执行 IAM 策略 - Amazon EMR

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

执行 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-arn execution-role-arn \ --job-driver job-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-arn execution-role-arn \ --job-driver job-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-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" ] }'

也可以在同一个请求 ARNs 中同时指定内联 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": "'"$(sed 's/"/\"/g' policy.json | tr -d '[:space:]')"'", "policyArns": [ "arn:aws:iam::aws:policy/AmazonS3FullAccess", "arn:aws:iam::aws:policy/CloudWatchLogsFullAccess" ] }'

重要提示

  • execution-role-policy's policy 字段的最大长度可以为 2048 个字符。

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

  • ARNs 可以将最多 10 个托管策略的列表指定为 execution-iam-policy's policyArns 字段的值。

  • 托管策略 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" ] } ] }