

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

# 執行 IAM 政策
<a name="jobs-cli-execution"></a>

在 EMR Serverless 上提交任務執行時，除了執行角色之外，您還可以指定執行 IAM 政策。任務執行所取得的許可是執行角色和指定執行 IAM 政策中許可的交集。

## 開始使用
<a name="jobs-cli-execution-getting-started"></a>

使用執行 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 命令範例
<a name="jobs-cli-execution-examples"></a>

如果我們在機器的 `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"
    }
  ]
}
```

------

然後，我們可以使用下列 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": '$(jq -c '. | @json' policy.json)'
      }'
```

您也可以同時使用 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": '$(jq -c '. | @json' policy.json)',
          "policyArns": [
          "arn:aws:iam::aws:policy/AmazonS3FullAccess",
          "arn:aws:iam::aws:policy/CloudWatchLogsFullAccess"
          ]
      }'
```

## 重要說明
<a name="jobs-cli-execution-important-notes"></a>
+ `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 政策中許可的交集。

## 政策交集
<a name="jobs-cli-execution-policy-intersection"></a>

任務執行所取得的許可是執行角色和指定執行 IAM 政策中許可的交集。這表示必須在這兩個位置指定任何必要的許可，JobRun 才能運作。不過，您可以針對您不打算更新或覆寫的任何許可，在內嵌政策中指定額外的括號允許陳述式。

範例

根據下列執行 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"
    }
  ]
}
```

------

JobRun 所取得的許可如下：

------
#### [ 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"
    }
  ]
}
```

------