

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

# 搭配使用作業執行角色與 Amazon EMR on EKS
<a name="iam-execution-role"></a>

若要使用 `StartJobRun` 命令提交在 EKS 叢集上執行的作業，必須加入作業執行角色，才能與虛擬叢集搭配使用。如需詳細資訊，請參閱 [設定 Amazon EMR on EKS](setting-up.md) 中的 [建立作業執行角色](creating-job-execution-role.md)。也可以按照 Amazon EMR on EKS Workshop 的[建立 IAM 角色以執行作業](https://www.eksworkshop.com/advanced/430_emr_on_eks/prereqs/#create-iam-role-for-job-execution)一節中的指示進行操作。

作業執行角色的信任政策中必須包含下列許可。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Federated": "arn:aws:iam::{{AWS_ACCOUNT_ID}}:oidc-provider/{{OIDC_PROVIDER}}"
      },
      "Action": "sts:AssumeRoleWithWebIdentity",
      "Condition": {
        "StringEquals": {
          "{{OIDC_PROVIDER}}:aud": "sts.amazonaws.com"
        },
        "StringLike": {
          "{{OIDC_PROVIDER}}:sub": "system:serviceaccount:{{NAMESPACE}}:emr-containers-sa-*-*-{{AWS_ACCOUNT_ID}}-{{BASE36_ENCODED_ROLE_NAME}}"
        }
      }
    }
  ]
}
```

------

上述範例中的信任政策只會向具有與 `emr-containers-sa-*-*-{{AWS_ACCOUNT_ID}}-{{BASE36_ENCODED_ROLE_NAME}}` 模式相符名稱的 Amazon EMR 受管 Kubernetes 服務帳戶授予許可。將在作業提交時自動建立具有此模式的服務帳戶，並將範圍設定為您提交作業所在的命名空間。此信任政策可讓這些服務帳戶擔任執行角色，並取得執行角色的暫時憑證。來自不同 Amazon EKS 叢集或相同 EKS 叢集內不同命名空間的服務帳戶受到限制，無法擔任執行角色。

可以執行下列命令，以上述格式自動更新信任政策。

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

**控制對執行角色的存取**

Amazon EKS 叢集的管理員可以建立多租用戶 Amazon EMR on EKS 虛擬叢集，IAM 管理員可以為其新增多個執行角色。由於不受信任的租用戶可以使用這些執行角色來提交執行任意程式碼的作業，因此您可能想要限制這些租用戶，使其無法執行取得已指派給這些執行角色之許可的程式碼。若要限制附接至 IAM 身分的 IAM 政策，IAM 管理員可以使用選用的 Amazon Resource Name (ARN) 條件索引鍵 `emr-containers:ExecutionRoleArn`。此條件會接受具有虛擬叢集許可的執行角色 ARN 清單，如下列許可政策所示。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "emr-containers:StartJobRun"
      ],
      "Resource": [
        "arn:aws:emr-containers:*:*:/virtualclusters/{{VIRTUAL_CLUSTER_ID}}"
      ],
      "Condition": {
        "ArnEquals": {
          "emr-containers:ExecutionRoleArn": [
            "arn:aws:iam::*:role/{{execution_role_name_1}}",
            "arn:aws:iam::*:role/{{execution_role_name_2}}"
          ]
        }
      },
      "Sid": "AllowEMRCONTAINERSStartjobrun"
    }
  ]
}
```

------

如果想要允許所有以特定字首開頭的執行角色 (例如 `MyRole`)，可以將條件運算子 `ArnEquals` 取代為 `ArnLike` 運算子，並且可以將條件中的 `execution_role_arn` 值取代為萬用字元 `*`。例如 `arn:aws:iam::{{AWS_ACCOUNT_ID}}:role/MyRole*`。還支援所有其他 [ARN 條件金鑰](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html#Conditions_ARN)。

**注意**  
使用 Amazon EMR on EKS，您無法根據標籤或屬性將許可授予給執行角色。Amazon EMR on EKS 不支援執行角色的標籤型存取控制 (TBAC) 或屬性型存取控制 (ABAC)。