

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# 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 の「[Create IAM Role for job execution](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"
    }
  ]
}
```

------

前述の例の信頼ポリシーでは、名前が `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 クラスターの管理者は、IAM 管理者が複数の実行ロールを追加できるマルチテナントの Amazon EMR on EKS 仮想クラスターを作成できます。信頼できないテナントであっても、こうした実行ロールを使用して、任意のコードを実行するジョブを送信できます。そのため、信頼できないテナントではこうした実行ロールの 1 つ以上に割り当てられた権限を取得するコードを実行できないように制限することをお勧めします。IAM ID にアタッチされている IAM ポリシーを制限する場合、IAM 管理者はオプションの Amazon リソースネーム (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) をサポートしていません。