本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
执行 IAM 策略
在 EMR Serverless 上提交作业时,除了执行角色外,您还可以指定执行 IAM 策略。任务运行所获得的权限是执行角色中的权限和指定的执行 IAM 策略中的权限的交集。
开始使用
使用 Execution IAM 策略的步骤::
创建emr-serverless
应用程序或使用现有应用程序,然后运行以下 aws cli,使用内联 IAM 策略开始运行作业:
aws emr-serverless start-job-run --region us-west-2 \ --application-id
application-id
\ --execution-role-arnexecution-role-arn
\ --job-driverjob-driver-options
\ --execution-iam-policy '{"policy": "inline-policy
"}'
CLI 命令示例
如果我们在计算机上的policy.json
文件中存储了以下策略:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetObject", "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::my-test-bucket", "arn:aws:s3:::my-test-bucket/*" ] } ] }
然后,我们可以使用以下 AWS CLI 命令使用此策略启动作业:
aws emr-serverless start-job-run --region us-west-2 \ --application-id
application-id
\ --execution-role-arnexecution-role-arn
\ --job-driverjob-driver-options
--execution-iam-policy '{ "policy": "'"$(sed 's/"/\"/g' policy.json | tr -d '[:space:]')"'" }'
您也可以同时使用客户托管策略 AWS 和客户托管策略,通过以下方式进行指定 ARNs:
aws emr-serverless start-job-run --region us-west-2 \ --application-id
application-id
\ --execution-role-arnexecution-role-arn
\ --job-driverjob-driver-options
--execution-iam-policy '{ "policyArns": [ "arn:aws:iam::aws:policy/AmazonS3FullAccess", "arn:aws:iam::aws:policy/CloudWatchLogsFullAccess" ] }'
也可以在同一个请求 ARNs 中同时指定内联 IAM 策略和托管策略:
aws emr-serverless start-job-run --region us-west-2 \ --application-id
application-id
\ --execution-role-arnexecution-role-arn
\ --job-driverjob-driver-options
--execution-iam-policy '{ "policy": "'"$(sed 's/"/\"/g' policy.json | tr -d '[:space:]')"'", "policyArns": [ "arn:aws:iam::aws:policy/AmazonS3FullAccess", "arn:aws:iam::aws:policy/CloudWatchLogsFullAccess" ] }'
重要提示
execution-role-policy
'spolicy
字段的最大长度可以为 2048 个字符。在的
policy
字段中指定的内联 IAM 策略字符串必须符合 json 字符串标准,不能像上面的示例那样对换行符和引号进行转义。execution-iam-policy
ARNs 可以将最多 10 个托管策略的列表指定为
execution-iam-policy
'spolicyArns
字段的值。托管策略 ARNs 必须是有效 AWS 或客户托管策略 ARN 的列表,当指定客户托管策略 ARN 时,该策略必须属于 EMR-S 的同一个 AWS 账户。 JobRun
同时使用内联 IAM 策略和托管策略时,用于内联策略和托管策略的纯文本总和不能超过 2,048 个字符。
由此产生的权限 JobRun 是执行角色和指定执行 IAM 策略中的权限的交集。
政策交叉点
任务运行所获得的权限是执行角色中的权限和指定的执行 IAM 策略中的权限的交集。这意味着必须在这两个地方都指定任何所需的许可 JobRun 才能起作用。但是,可以在内联策略中为不打算更新或覆盖的任何权限指定额外的全面允许语句。
示例
鉴于以下执行 IAM 角色策略:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:*" ], "Resource": [ "*" ] }, { "Effect": "Allow", "Action":[ "logs:DescribeLogGroups" ], "Resource":[ "arn:aws:logs:us-west-2:12345678910:log-group::log-stream" ] }, { "Effect": "Allow", "Action": [ "dynamodb:DescribeTable" ], "Resource": [ "arn:aws:dynamodb:*:*:table/MyCompany1table" ] } ] }
以及以下内联 IAM 政策:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetObject", "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::my-test-bucket/tenant1", "arn:aws:s3:::my-test-bucket/tenant1/*" ] }, { "Effect": "Allow", "Action":[ "logs:*", "dynamodb:*", ], "Resource":[ "*" ] } ] }
由此产生的权限 JobRun 为::
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetObject", "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::my-test-bucket/tenant1", "arn:aws:s3:::my-test-bucket/tenant1/*" ] }, { "Effect": "Allow", "Action":[ "logs:DescribeLogGroups" ], "Resource":[ "arn:aws:logs:us-west-2:12345678910:log-group::log-stream" ] }, { "Effect": "Allow", "Action": [ "dynamodb:DescribeTable" ], "Resource": [ "arn:aws:dynamodb:*:*:table/MyCompany1table" ] } ] }