

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 将任务执行角色与 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 研讨会的[为任务执行创建 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",
      "Action": [
        "sts:AssumeRoleWithWebIdentity"
      ],
      "Resource": "*",
      "Condition": {
        "StringLike": {
          "aws:userid": "system:serviceaccount:NAMESPACE:emr-containers-sa-*-*-AWS_ACCOUNT_ID-BASE36_ENCODED_ROLE_NAME"
        }
      },
      "Sid": "AllowSTSAssumerolewithwebidentity"
    }
  ]
}
```

------

前述示例中的信任策略仅向 Amazon EMR 托管的 Kubernetes 服务账户授予权限，并且服务账户的名称与 `emr-containers-sa-*-*-AWS_ACCOUNT_ID-BASE36_ENCODED_ROLE_NAME` 模式相匹配。具有此模式的服务账户将在任务提交时自动创建，作用域为提交任务的命名空间。此信任策略允许这些服务账户担任执行角色并获取执行角色的临时凭证。不同 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 policy，IAM 管理员可使用可选 Amazon 资源名称（ARN）条件键 `emr-containers:ExecutionRoleArn`。此条件接受具有虚拟集群权限的执行角色 ARNs 列表，如以下权限策略所示。

------
#### [ 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）。