

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

# 啟用 EKS 叢集的 IAM 角色
<a name="setting-up-enable-IAM-roles"></a>

下列主題詳細說明啟用 IAM 角色的選項。

**Topics**
+ [選項 1：在 EKS 叢集上啟用 EKS Pod 身分](setting-up-enable-IAM.md)
+ [選項 2：在 EKS 叢集上啟用服務帳戶的 IAM 角色 (IRSA)](setting-up-enable-IAM-service-accounts.md)

# 選項 1：在 EKS 叢集上啟用 EKS Pod 身分
<a name="setting-up-enable-IAM"></a>

Amazon EKS Pod 身分識別關聯提供管理應用程式憑證的功能，類似 Amazon EC2 執行個體設定檔將憑證提供給 Amazon EC2 執行個體的方式。Amazon EKS Pod 身分識別透過其他 EKS 驗證 API 和在每個節點上執行的代理程式 Pod，為您的工作負載提供憑證。

自 emr-7.3.0 發行以來，Amazon EMR on EKS 開始支援 StartJobRun 提交模型的 EKS Pod 身分。

如需 EKS Pod 身分的詳細資訊，請參閱[了解 EKS Pod 身分的運作方式](https://docs.aws.amazon.com/eks/latest/userguide/pod-id-how-it-works.html)。

## 為什麼選擇 EKS Pod 身分？
<a name="setting-up-enable-IAM-pod-identity-why"></a>

作為 EMR 設定的一部分，任務執行角色需要在特定命名空間 (EMR 虛擬叢集） 中的 IAM 角色和服務帳戶之間建立信任界限。使用 IRSA，這可透過更新 EMR 任務執行角色的信任政策來實現。不過，由於 IAM 信任政策長度有 4096 個字元的硬性限制，在最多十二 (12) 個 EKS 叢集之間共用單一任務執行 IAM 角色有其限制。

EMR 支援 Pod 身分，IAM 角色和服務帳戶之間的信任界限現在由 EKS 團隊透過 EKS Pod 身分的關聯 APIs 管理。

**注意**  
EKS Pod 身分的安全界限仍在服務帳戶層級，而非 Pod 層級。

## Pod 身分考量事項
<a name="setting-up-enable-IAM-pod-identity-consider"></a>

如需 Pod 身分限制的資訊，請參閱 [EKS Pod 身分考量](https://docs.aws.amazon.com/eks/latest/userguide/pod-identities.html#pod-id-considerations)事項。

## 在 EKS 叢集中準備 EKS Pod 身分
<a name="setting-up-enable-IAM-pod-eks-cluster"></a>

### 檢查 NodeInstanceRole 中是否存在所需的許可
<a name="setting-up-enable-IAM-pod-eks-cluster-permission"></a>

節點角色`NodeInstanceRole`需要代理程式在 EKS 驗證 API 中執行`AssumeRoleForPodIdentity`動作的許可。您可以將下列項目新增至 Amazon EKS 使用者指南中定義的 [AmazonEKSWorkerNodePolicy](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/security-iam-awsmanpol.html#security-iam-awsmanpol-amazoneksworkernodepolicy)，或使用自訂政策。

如果您的 EKS 叢集建立的 eksctl 版本高於 **0.181.0**，AmazonEKSWorkerNodePolicy 會自動連接到節點角色，包括必要的`AssumeRoleForPodIdentity`許可。如果許可不存在，請手動將下列許可新增至 AmazonEKSWorkerNodePolicy，以允許擔任 Pod 身分的角色。EKS Pod 身分代理程式需要此許可，才能擷取 Pod 的登入資料。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "eks-auth:AssumeRoleForPodIdentity"
      ],
      "Resource": [
        "*"
      ],
      "Sid": "AllowEKSAUTHAssumeroleforpodidentity"
    }
  ]
}
```

------

### 建立 EKS Pod 身分代理程式附加元件
<a name="setting-up-enable-IAM-pod-eks-cluster-agent"></a>

使用下列命令，以最新版本建立 EKS Pod Identity Agent 附加元件：

```
aws eks create-addon --cluster-name cluster-name --addon-name eks-pod-identity-agent

kubectl get pods -n kube-system | grep 'eks-pod-identity-agent'
```

使用下列步驟，從 Amazon EKS 主控台建立 EKS Pod Identity Agent 附加元件：

1. 開啟 Amazon EKS 主控台：[Amazon EKS 主控台](https://console.aws.amazon.com/eks/home#/clusters)。

1. 在左側導覽窗格中，選取**叢集**，然後選取您要為其設定 EKS Pod 身分識別代理程式附加元件之叢集的名稱。

1. 選擇**附加元件**索引標籤。

1. 選擇**取得更多附加元件**。

1. 選取 EKS Pod 身分識別代理程式之附加元件方塊右上方的方塊，然後選擇**下一步**。

1. 在**設定選取的附加元件設定**頁面上，在版本下拉式清單中選取任何**版本**。

1. (選用) 展開**選用組態設定**以輸入其他組態。例如，您可以提供替代容器映像位置和 `ImagePullSecrets`。具有已接受索引鍵的 JSON 結構描述會顯示在**附加元件組態結構描述**中。

   在**組態值**中輸入組態金鑰和值。

1. 選擇**下一步**。

1. 確認代理程式 Pod 透過 CLI 在叢集上執行。

   `kubectl get pods -n kube-system | grep 'eks-pod-identity-agent'`

輸出範例如下：

```
NAME                              READY   STATUS    RESTARTS      AGE
eks-pod-identity-agent-gmqp7      1/1     Running   1 (24h ago)   24h
eks-pod-identity-agent-prnsh      1/1     Running   1 (24h ago)   24h
```

這會在`kube-system`命名空間中設定新的 DaemonSet。在每個 EKS 節點上執行的 Amazon EKS Pod Identity Agent 會使用 [AssumeRoleForPodIdentity](https://docs.aws.amazon.com/eks/latest/APIReference/API_auth_AssumeRoleForPodIdentity.html) 動作，從 EKS 身分驗證 API 擷取臨時憑證。然後，這些登入資料可供您在容器內執行 AWS SDKs 使用。

如需詳細資訊，請參閱公有文件中的先決條件：[設定 Amazon EKS Pod Identity Agent](https://docs.aws.amazon.com/eks/latest/userguide/pod-id-agent-setup.html)。

## 建立任務執行角色
<a name="setting-up-enable-IAM-pod-create-job-role"></a>

### 建立或更新允許 EKS Pod Identity 的任務執行角色
<a name="setting-up-enable-IAM-pod-create-job-role-update"></a>

若要使用 Amazon EMR on EKS 執行工作負載，您需要建立 IAM 角色。在本文件中，我們將此角色稱為作業執行角色。如需如何建立 IAM 角色的詳細資訊，請參閱《 使用者指南》中的[建立 IAM 角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create.html)。

此外，您必須建立指定任務執行角色必要許可的 IAM 政策，然後將此政策連接至角色以啟用 EKS Pod Identity。

例如，您有下列任務執行角色。如需詳細資訊，請參閱[建立任務執行角色](https://docs.aws.amazon.com/emr/latest/EMR-on-EKS-DevelopmentGuide/creating-job-execution-role.html)。

```
arn:aws:iam::111122223333:role/PodIdentityJobExecutionRole
```

**重要**  
Amazon EMR on EKS 會根據您的任務執行角色名稱自動建立 Kubernetes 服務帳戶。請確定角色名稱不會太長，因為如果 `cluster_name`、 和 的組合`service_account_name`超過長度限制`pod_name`，您的任務可能會失敗。

**任務執行角色組態** – 確保使用下列 EKS Pod 身分的信任許可建立任務執行角色。若要更新現有的任務執行角色，請將其設定為信任下列 EKS 服務委託人，做為信任政策中的額外許可。此信任許可可以與現有的 IRSA 信任政策共存。

```
cat >trust-relationship.json <<EOF
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AllowEksAuthToAssumeRoleForPodIdentity",
            "Effect": "Allow",
            "Principal": {
                "Service": "pods.eks.amazonaws.com"
            },
            "Action": [
                "sts:AssumeRole",
                "sts:TagSession"
            ]
        }
    ]
}
EOF
```

**使用者許可**：使用者需要執行 `StartJobRun` API 呼叫或提交任務的`iam:PassRole`許可。此許可可讓使用者將任務執行角色傳遞至 EMR on EKS。根據預設，任務管理員應該具有 許可。

以下是使用者所需的許可：

```
{
    "Effect": "Allow",
    "Action": "iam:PassRole",
    "Resource": "arn:aws:iam::111122223333:role/PodIdentityJobExecutionRole",
    "Condition": {
        "StringEquals": {
            "iam:PassedToService": "pods.eks.amazonaws.com"
        }
    }
}
```

若要進一步限制使用者存取特定 EKS 叢集，請將 AssociatedResourceArn 屬性篩選條件新增至 IAM 政策。它將角色假設限制為授權的 EKS 叢集，加強您的資源層級安全控制。

```
"Condition": {
        "ArnLike": {
            "iam:AssociatedResourceARN": [
                "arn:aws:eks:us-west-2:111122223333:cluster/*"
            ]
        }
```

## 設定 EKS Pod 身分關聯
<a name="setting-up-enable-IAM-pod-identity-asociations"></a>

### 先決條件
<a name="setting-up-enable-IAM-pod-identity-asociations-prereq"></a>

請確定建立 Pod 身分關聯的 IAM 身分，例如 EKS 管理員使用者，具有 許可`eks:CreatePodIdentityAssociation`和 `iam:PassRole`。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "eks:CreatePodIdentityAssociation"
      ],
      "Resource": [
        "arn:aws:eks:*:*:cluster/*"
      ],
      "Sid": "AllowEKSCreatepodidentityassociation"
    },
    {
      "Effect": "Allow",
      "Action": [
        "iam:PassRole"
      ],
      "Resource": [
        "arn:aws:iam::*:role/*"
      ],
      "Condition": {
        "StringEquals": {
          "iam:PassedToService": "pods.eks.amazonaws.com"
        }
      },
      "Sid": "AllowIAMPassrole"
    }
  ]
}
```

------

### 建立角色和 EMR 服務帳戶的關聯
<a name="setting-up-enable-IAM-pod-identity-asociations-emr-service"></a>

------
#### [ Create EMR role associations through the AWS CLI ]

當您將任務提交至 Kubernetes 命名空間時，管理員必須在任務執行角色與 EMR 受管服務帳戶的身分之間建立關聯。請注意，會在提交作業時自動建立 EMR 受管服務帳戶，範圍限定在提交作業的命名空間。

使用 AWS CLI （高於 2.24.0 版），執行下列命令來建立與 Pod 身分的角色關聯。

執行下列命令來建立與 Pod 身分的角色關聯：

```
aws emr-containers create-role-associations \
        --cluster-name mycluster \
        --namespace mynamespace \
        --role-name JobExecutionRoleIRSAv2
```

請注意：
+ 每個叢集最多可以有 1，000 個關聯。每個任務執行角色 - 命名空間映射將需要任務提交者、驅動程式和執行器 Pod 的 3 個關聯。
+ 您只能關聯與叢集位於相同 AWS 帳戶中的角色。您可以將存取權從另一個帳戶委派給此帳戶 (您為要使用的 EKS Pod 身分識別所設定) 中的角色。如需委派存取權和 的教學課程`AssumeRole`，請參閱 [IAM 教學課程：使用 IAM 角色在 AWS 帳戶之間委派存取權](https://docs.aws.amazon.com/IAM/latest/UserGuide/tutorial_cross-account-with-roles.html)。

------
#### [ Create EMR role associations through Amazon EKS ]

提交任務時，EMR 會建立具有特定命名模式的服務帳戶。若要建立手動關聯或將此工作流程與 AWS SDK 整合，請遵循下列步驟：

建構服務帳戶名稱：

```
emr-containers-sa-spark-%(SPARK_ROLE)s-%(AWS_ACCOUNT_ID)s-%(BASE36_ENCODED_ROLE_NAME)s
```

以下範例會為範例任務執行角色 JobExecutionRoleIRSAv2 建立角色關聯。

**角色關聯範例：**

```
RoleName: JobExecutionRoleIRSAv2
Base36EncodingOfRoleName: 2eum5fah1jc1kwyjc19ikdhdkdegh1n26vbe
```

**CLI 命令範例：**

```
# setup for the client service account (used by job runner pod)
# emr-containers-sa-spark-client-111122223333-2eum5fah1jc1kwyjc19ikdhdkdegh1n26vbe
aws eks create-pod-identity-association --cluster-name mycluster --role-arn arn:aws:iam::111122223333:role/JobExecutionRoleIRSAv2 --namespace mynamespace --service-account emr-containers-sa-spark-client-111122223333-2eum5fah1jc1kwyjc19ikdhdkdegh1n26vbe

# driver service account
# emr-containers-sa-spark-driver-111122223333-2eum5fah1jc1kwyjc19ikdhdkdegh1n26vbe        
aws eks create-pod-identity-association --cluster-name mycluster --role-arn arn:aws:iam::111122223333:role/JobExecutionRoleIRSAv2 --namespace mynamespace --service-account emr-containers-sa-spark-driver-111122223333-2eum5fah1jc1kwyjc19ikdhdkdegh1n26vbe

# executor service account
# emr-containers-sa-spark-executor-111122223333-2eum5fah1jc1kwyjc19ikdhdkdegh1n26vbe
aws eks create-pod-identity-association --cluster-name mycluster --role-arn arn:aws:iam::111122223333:role/JobExecutionRoleIRSAv2 --namespace mynamespace --service-account emr-containers-sa-spark-executor-111122223333-2eum5fah1jc1kwyjc19ikdhdkdegh1n26vbe
```

------

完成 EKS Pod 身分所需的所有步驟後，您可以略過下列步驟進行 IRSA 設定：
+ [在 EKS 叢集上啟用服務帳戶的 IAM 角色 (IRSA)](https://docs.aws.amazon.com/emr/latest/EMR-on-EKS-DevelopmentGuide/setting-up-enable-IAM.html)
+ [建立任務執行角色](https://docs.aws.amazon.com/emr/latest/EMR-on-EKS-DevelopmentGuide/creating-job-execution-role.html)
+ [更新任務執行角色的信任政策](https://docs.aws.amazon.com/emr/latest/EMR-on-EKS-DevelopmentGuide/setting-up-trust-policy.html)

您可以直接跳至下列步驟：[授予使用者對 Amazon EMR on EKS 的存取權](https://docs.aws.amazon.com/emr/latest/EMR-on-EKS-DevelopmentGuide/setting-up-iam.html)

## 刪除角色關聯
<a name="setting-up-enable-IAM-pod-identity-asociations-delete-associations"></a>

每當您刪除虛擬叢集或任務執行角色，而且您不想再將 EMR 的存取權授予其服務帳戶時，您應該刪除該角色的關聯。這是因為 EKS 允許與不存在的資源 （命名空間和服務帳戶） 建立關聯。如果命名空間已刪除或角色不再使用，Amazon EMR on EKS 建議刪除關聯，以釋放空間給其他關聯。

**注意**  
如果您不刪除關聯，保留關聯可能會影響您擴展的能力，因為 EKS 對您可以建立的關聯數量有限制 （軟性限制：每個叢集 1000 個關聯）。您可以在指定的命名空間中列出 Pod 身分關聯，以檢查是否有任何需要清除的保留關聯：

```
aws eks list-pod-identity-associations --cluster-name mycluster --namespace mynamespace
```

使用 AWS CLI (2.24.0 版或更新版本），執行下列 emr-containers 命令來刪除 EMR 的角色關聯：

```
aws emr-containers delete-role-associations \
        --cluster-name mycluster \
        --namespace mynamespace \
        --role-name JobExecutionRoleIRSAv2
```

## 自動將現有 IRSA 遷移至 Pod 身分
<a name="setting-up-enable-IAM-pod-identity-auto-migrate"></a>

您可以使用工具 eksctl 將現有的 IAM 角色服務帳戶 (IRSA) 遷移至 Pod 身分關聯：

```
eksctl utils migrate-to-pod-identity \
    --cluster mycluster \
    --remove-oidc-provider-trust-relationship \
    --approve
```

在沒有`--approve`旗標的情況下執行命令只會輸出反映遷移步驟的計劃，而且不會發生實際的遷移。

## 疑難排解
<a name="setting-up-enable-IAM-pod-identity-troubleshooting"></a>

### 我的任務無法使用登入資料提供者的 NoClassDefinitionFound 或 ClassNotFound 例外狀況，或無法取得登入資料提供者。
<a name="setting-up-enable-IAM-pod-identity-troubleshooting-no-class"></a>

EKS Pod 身分使用容器登入資料提供者來擷取必要的登入資料。如果您已指定自訂登入資料提供者，請確定其正常運作。或者，請確定您使用的是支援 EKS Pod Identity 的正確 AWS SDK 版本。如需詳細資訊，請參閱[開始使用 Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/getting-started.html)。

### 任務失敗，因為 eks-pod-identity-agent 日誌中顯示的「因 【x】 大小限制而無法擷取登入資料」錯誤。
<a name="setting-up-enable-IAM-pod-identity-troubleshooting-creds"></a>

EMR on EKS 會根據任務執行角色名稱建立 Kubernetes 服務帳戶。如果角色名稱太長，EKS 身分驗證將無法擷取登入資料`pod_name`，因為 `cluster_name`、 和 的組合`service_account_name`超過長度限制。識別哪個元件佔用的空間最多，並相應地調整大小。

### 任務失敗，出現 eks-pod-identity 日誌中顯示的「無法擷取登入資料 xxx」錯誤。
<a name="setting-up-enable-IAM-pod-identity-troubleshooting-creds-error"></a>

此問題的一個可能原因可能是 EKS 叢集是在私有子網路下設定，但未正確設定叢集的 PrivateLink。檢查您的叢集是否位於私有網路中，並設定 AWS PrivateLink 以解決問題。如需詳細說明，請參閱[開始使用 Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/getting-started.html)。

# 選項 2：在 EKS 叢集上啟用服務帳戶的 IAM 角色 (IRSA)
<a name="setting-up-enable-IAM-service-accounts"></a>

服務帳戶的 IAM 角色功能適用於 Amazon EKS 1.14 版和更高版本，以及在 2019 年 9 月 3 日或之後更新至第 1.13 版或更高版本的 EKS 叢集。若要使用此功能，可將現有 EKS 叢集更新至 1.14 版或更新版本。如需詳細資訊，請參閱[更新 Amazon EKS 叢集 Kubernetes 版本](https://docs.aws.amazon.com/eks/latest/userguide/update-cluster.html)。

如果您的叢集支援服務帳戶的 IAM 角色，則會有相關聯的 [OpenID Connect](https://openid.net/connect/) 發行者 URL。您可以在 Amazon EKS 主控台中檢視此 URL，也可以使用下列 AWS CLI 命令進行擷取。

**重要**  
您必須使用最新版本的 AWS CLI ，才能從此命令接收適當的輸出。

```
aws eks describe-cluster --name cluster_name --query "cluster.identity.oidc.issuer" --output text
```

預期輸出如下。

```
https://oidc.eks.<region-code>.amazonaws.com/id/EXAMPLED539D4633E53DE1B716D3041E
```

若要在叢集中使用服務帳戶的 IAM 角色，則必須使用 [eksctl](https://docs.aws.amazon.com/eks/latest/userguide/enable-iam-roles-for-service-accounts.html#create-oidc-eksctl) 或 [AWS 管理主控台](https://docs.aws.amazon.com/eks/latest/userguide/enable-iam-roles-for-service-accounts.html#create-oidc-console) 來建立 OIDC 身分提供者。

## 使用 `eksctl` 為您的叢集建立 IAM OIDC 身分提供者
<a name="setting-up-OIDC-eksctl"></a>

使用以下命令檢查您的 `eksctl` 版本。此程序假設您已安裝 `eksctl`，且您的 `eksctl` 版本為 0.32.0 或更高版本。

```
eksctl version
```

如需有關安裝或升級 eksctl 的詳細資訊，請參閱[安裝或升級 eksctl](https://docs.aws.amazon.com/eks/latest/userguide/eksctl.html#installing-eksctl)。

使用下列命令為您的叢集建立 OIDC 身分提供者。使用自己的值取代 *cluster\$1name*。

```
eksctl utils associate-iam-oidc-provider --cluster cluster_name --approve
```

## 使用 為您的叢集建立 IAM OIDC 身分提供者 AWS 管理主控台
<a name="setting-up-OIDC-console"></a>

從叢集的 Amazon EKS 主控台描述擷取 OIDC 發行者 URL，或使用下列 AWS CLI 命令。

使用下列命令，從 AWS CLI中擷取 OIDC 發行者 URL。

```
aws eks describe-cluster --name <cluster_name> --query "cluster.identity.oidc.issuer" --output text
```

使用下列命令，從 Amazon EKS 主控台中擷取 OIDC 發行者 URL。

1. 前往 [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) 開啟 IAM 主控台。

1. 在導覽面板中，選擇**身分提供者**，然後選擇**建立提供者**。

   1. 處理 **Provider Type (提供者類型)** 時，請選擇 **Choose a provider type (選擇提供者類型)**，然後選擇 **OpenID Connect**。

   1. 針對 **Provider URL (提供者 URL)**，貼上叢集的 OIDC 發行者 URL。

   1. 如果為「對象」，則輸入 sts.amazonaws.com，然後選擇**下一步**。

1. 確認供應商資訊是否正確，然後選擇 **Create (建立)** 來建立您的身分提供者。

# 建立作業執行角色
<a name="creating-job-execution-role"></a>

若要在 Amazon EMR on EKS 上執行工作負載，您需要建立 IAM 角色。在本文件中，我們將此角色稱為*作業執行角色*。如需有關如何建立 IAM 角色的詳細資訊，請參閱《IAM 使用者指南》中的[建立 IAM 角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create.html)。

您還必須建立 IAM 政策來指定作業執行角色的許可，然後將 IAM 政策附接至作業執行角色。

作業執行角色的下列政策允許存取資源目標、Amazon S3 和 CloudWatch。這些許可是監控作業和存取日誌所必需的。若要使用 遵循相同的程序 AWS CLI：

建立任務執行的 IAM 角色：讓我們建立 EMR 將用於任務執行的角色。這是 角色，EMR 任務將在 EKS 上執行時擔任。

```
cat <<EoF > ~/environment/emr-trust-policy.json
 {
   "Version": "2012-10-17",		 	 	 
   "Statement": [
     {
       "Effect": "Allow",
       "Principal": {
         "Service": "elasticmapreduce.amazonaws.com"
       },
       "Action": "sts:AssumeRole"
     }
   ]
 }
 EoF
  
 aws iam create-role --role-name EMRContainers-JobExecutionRole --assume-role-policy-document file://~/environment/emr-trust-policy.json
```

接下來，我們需要將必要的 IAM 政策連接到角色，以便它可以將日誌寫入 s3 和 cloudwatch。

```
cat <<EoF > ~/environment/EMRContainers-JobExecutionRole.json
 {
     "Version": "2012-10-17",		 	 	 
     "Statement": [
         {
             "Effect": "Allow",
             "Action": [
                 "s3:PutObject",
                 "s3:GetObject",
                 "s3:ListBucket"
             ],
             "Resource": "arn:aws:s3:::amzn-s3-demo-bucket"
         },
         {
             "Effect": "Allow",
             "Action": [
                 "logs:PutLogEvents",
                 "logs:CreateLogStream",
               "logs:DescribeLogGroups",
                 "logs:DescribeLogStreams"
             ],
             "Resource": [
                 "arn:aws:logs:*:*:*"
             ]
         }
     ]
 } 
 EoF
 aws iam put-role-policy --role-name EMRContainers-JobExecutionRole --policy-name EMR-Containers-Job-Execution --policy-document file://~/environment/EMRContainers-JobExecutionRole.json
```

**注意**  
應適當確定存取權限的範圍，而不是授予給作業執行角色中的所有 S3 物件。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "s3:PutObject",
        "s3:GetObject",
        "s3:ListBucket"
      ],
      "Resource": [
        "arn:aws:s3:::amzn-s3-demo-bucket"
      ],
      "Sid": "AllowS3Putobject"
    },
    {
      "Effect": "Allow",
      "Action": [
        "logs:PutLogEvents",
        "logs:CreateLogStream",
        "logs:DescribeLogGroups",
        "logs:DescribeLogStreams"
      ],
      "Resource": [
        "arn:aws:logs:*:*:*"
      ],
      "Sid": "AllowLOGSPutlogevents"
    }
  ]
}
```

------

如需詳細資訊，請參閱[使用作業執行角色](https://docs.aws.amazon.com/emr/latest/EMR-on-EKS-DevelopmentGuide/iam-execution-role.html)、[設定作業執行以使用 S3 日誌](https://docs.aws.amazon.com/emr/latest/EMR-on-EKS-DevelopmentGuide/emr-eks-jobs-CLI.html#emr-eks-jobs-s3)以及[設定作業執行以使用 CloudWatch 日誌](https://docs.aws.amazon.com/emr/latest/EMR-on-EKS-DevelopmentGuide/emr-eks-jobs-CLI.html#emr-eks-jobs-cloudwatch)。

# 更新作業執行角色的信任政策
<a name="setting-up-trust-policy"></a>

當您使用服務帳戶的 IAM 角色 (IRSA)，在 Kubernetes 命名空間上執行作業時，系統管理員必須在作業執行角色與 EMR 受管服務帳戶的身分之間建立信任關係。可以透過更新作業執行角色的信任政策來建立信任關係。請注意，會在提交作業時自動建立 EMR 受管服務帳戶，範圍限定在提交作業的命名空間。

執行下列命令來更新信任政策。

```
 aws emr-containers update-role-trust-policy \
       --cluster-name cluster \
       --namespace namespace \
       --role-name iam_role_name_for_job_execution
```

如需詳細資訊，請參閱[搭配使用作業執行角色與 Amazon EMR on EKS](iam-execution-role.md)。

**重要**  
執行上述命令的運算子必須具有以下許可：`eks:DescribeCluster`、`iam:GetRole`、`iam:UpdateAssumeRolePolicy`。