執行 IAM 政策 - Amazon EMR

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

執行 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 檔案中:

{ "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" ] }'

您也可以在相同的請求中同時指定內嵌 IAM 政策和受管政策 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 '{ "policy": "'"$(sed 's/"/\"/g' policy.json | tr -d '[:space:]')"'", "policyArns": [ "arn:aws:iam::aws:policy/AmazonS3FullAccess", "arn:aws:iam::aws:policy/CloudWatchLogsFullAccess" ] }'

重要說明

  • execution-role-policypolicy 的欄位長度上限為 2048 個字元。

  • 在 的 execution-iam-policy policy 欄位中指定的內嵌 IAM 政策字串必須符合 json 字串標準,而不會逸出新行和引號,如上述範例所示。

  • 最多可以指定 10 個受管政策 ARNs 的清單做為 的 execution-iam-policy policyArns 欄位的值。

  • 受管政策 ARNs 必須是有效 AWS 或客戶受管政策 ARN 的清單,指定客戶受管政策 ARN 時,政策必須屬於 EMR-S JobRun 的相同 AWS 帳戶。

  • 同時使用內嵌 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" ] } ] }