本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
執行 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-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" ] }'
您也可以在相同的請求中同時指定內嵌 IAM 政策和受管政策 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 '{ "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
policy
的欄位長度上限為 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" ] } ] }