执行 IAM 策略 - Amazon EMR
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

执行 IAM 策略

在 EMR Serverless 上提交作业运行时,除了执行角色之外,您还可以指定执行 IAM 策略。作业运行所采用的权限是执行角色中的权限与指定的执行 IAM 策略中的权限的交集。

开始使用

使用执行 IAM 策略的步骤:

创建一个 emr-serverless 应用程序或使用现有应用程序,然后运行以下 aws cli 以启动带有内联 IAM 策略的作业运行:

aws emr-serverless start-job-run --region us-west-2 \ --application-id application-id \ --execution-role-arn execution-role-arn \ --job-driver job-driver-options \ --execution-iam-policy '{"policy": "inline-policy"}'

CLI 命令示例

如果机器上的 policy.json 文件中存储了以下策略:

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/*" ], "Sid": "AllowS3Getobject" } ] }

然后,我们可以使用以下 Amazon CLI 命令通过此策略启动作业:

aws emr-serverless start-job-run --region us-west-2 \ --application-id application-id \ --execution-role-arn execution-role-arn \ --job-driver job-driver-options --execution-iam-policy '{ "policy": '$(jq -c '. | @json' policy.json)' }'

您也可以同时使用 Amazon 和客户管理型策略,通过其 ARN 进行指定:

aws emr-serverless start-job-run --region us-west-2 \ --application-id application-id \ --execution-role-arn execution-role-arn \ --job-driver job-driver-options --execution-iam-policy '{ "policyArns": [ "arn:aws:iam::aws:policy/AmazonS3FullAccess", "arn:aws:iam::aws:policy/CloudWatchLogsFullAccess" ] }'

也可以在同一请求中同时指定内联 IAM 策略和托管策略 ARN:

aws emr-serverless start-job-run --region us-west-2 \ --application-id application-id \ --execution-role-arn execution-role-arn \ --job-driver job-driver-options --execution-iam-policy '{ "policy": '$(jq -c '. | @json' policy.json)', "policyArns": [ "arn:aws:iam::aws:policy/AmazonS3FullAccess", "arn:aws:iam::aws:policy/CloudWatchLogsFullAccess" ] }'

重要提示

  • execution-role-policypolicy 字段最多可包含 2048 个字符。

  • execution-iam-policypolicy 字段中指定的内联 IAM 策略字符串必须符合 json 字符串标准,不能像前面的示例那样对换行符和引号进行转义。

  • 可以将最多 10 个托管策略 ARN 的列表指定为 execution-iam-policypolicyArns 字段的值。

  • 托管策略 ARN 必须是有效的 Amazon 或客户管理型策略 ARN 的列表,当指定客户管理型策略 ARN 时,该策略必须属于 EMR-S JobRun 的同一 Amazon 账户。

  • 当同时使用内联 IAM 策略和托管策略时,用于内联策略和托管策略的明文组合不能超过 2,048 个字符。

  • 作业运行所采用的权限是执行角色中的权限与指定的执行 IAM 策略中的权限的交集。

策略交集

作业运行所采用的权限是执行角色中的权限与指定的执行 IAM 策略中的权限的交集。这意味着,为了使作业运行正常工作,必须在两个位置都指定所需的任何权限。但是,对于您不打算更新或覆盖的任何权限,可以在内联策略中指定额外一揽子允许语句。

示例

给定以下执行 IAM 角色策略:

JSON
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:*" ], "Resource": [ "*" ], "Sid": "AllowS3" }, { "Effect": "Allow", "Action": [ "logs:DescribeLogGroups" ], "Resource": [ "arn:aws:logs:us-west-2:123456789012:log-group::log-stream" ], "Sid": "AllowLOGSDescribeloggroups" }, { "Effect": "Allow", "Action": [ "dynamodb:DescribeTable" ], "Resource": [ "arn:aws:dynamodb:*:*:table/MyCompany1table" ], "Sid": "AllowDYNAMODBDescribetable" } ] }

以及以下内联 IAM 策略:

JSON
{ "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/*" ], "Sid": "AllowS3Getobject" }, { "Effect": "Allow", "Action": [ "logs:*", "dynamodb:*" ], "Resource": [ "*" ], "Sid": "AllowLOGS" } ] }

作业运行所获得的权限为:

JSON
{ "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/*" ], "Sid": "AllowS3Getobject" }, { "Effect": "Allow", "Action": [ "logs:DescribeLogGroups" ], "Resource": [ "arn:aws:logs:us-west-2:123456789012:log-group::log-stream" ], "Sid": "AllowLOGSDescribeloggroups" }, { "Effect": "Allow", "Action": [ "dynamodb:DescribeTable" ], "Resource": [ "arn:aws:dynamodb:*:*:table/MyCompany1table" ], "Sid": "AllowDYNAMODBDescribetable" } ] }