执行 IAM 策略
在 EMR Serverless 上提交作业运行时,除了执行角色之外,您还可以指定执行 IAM 策略。作业运行所采用的权限是执行角色中的权限与指定的执行 IAM 策略中的权限的交集。
开始使用
使用执行 IAM 策略的步骤:
创建一个 emr-serverless 应用程序或使用现有应用程序,然后运行以下 aws cli 以启动带有内联 IAM 策略的作业运行:
aws emr-serverless start-job-run --region us-west-2 \ --application-idapplication-id\ --execution-role-arnexecution-role-arn\ --job-driverjob-driver-options\ --execution-iam-policy '{"policy": "inline-policy"}'
CLI 命令示例
如果机器上的 policy.json 文件中存储了以下策略:
然后,我们可以使用以下 Amazon CLI 命令通过此策略启动作业:
aws emr-serverless start-job-run --region us-west-2 \ --application-idapplication-id\ --execution-role-arnexecution-role-arn\ --job-driverjob-driver-options--execution-iam-policy '{ "policy": '$(jq -c '. | @json' policy.json)' }'
您也可以同时使用 Amazon 和客户管理型策略,通过其 ARN 进行指定:
aws emr-serverless start-job-run --region us-west-2 \ --application-idapplication-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" ] }'
也可以在同一请求中同时指定内联 IAM 策略和托管策略 ARN:
aws emr-serverless start-job-run --region us-west-2 \ --application-idapplication-id\ --execution-role-arnexecution-role-arn\ --job-driverjob-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-policy的policy字段最多可包含 2048 个字符。在
execution-iam-policy的policy字段中指定的内联 IAM 策略字符串必须符合 json 字符串标准,不能像前面的示例那样对换行符和引号进行转义。可以将最多 10 个托管策略 ARN 的列表指定为
execution-iam-policy的policyArns字段的值。托管策略 ARN 必须是有效的 Amazon 或客户管理型策略 ARN 的列表,当指定客户管理型策略 ARN 时,该策略必须属于 EMR-S JobRun 的同一 Amazon 账户。
当同时使用内联 IAM 策略和托管策略时,用于内联策略和托管策略的明文组合不能超过 2,048 个字符。
作业运行所采用的权限是执行角色中的权限与指定的执行 IAM 策略中的权限的交集。
策略交集
作业运行所采用的权限是执行角色中的权限与指定的执行 IAM 策略中的权限的交集。这意味着,为了使作业运行正常工作,必须在两个位置都指定所需的任何权限。但是,对于您不打算更新或覆盖的任何权限,可以在内联策略中指定额外一揽子允许语句。
示例
给定以下执行 IAM 角色策略:
以及以下内联 IAM 策略:
作业运行所获得的权限为: