

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

# オプション 2: EKS クラスターでサービスアカウント (IRSA) の IAM ロールを有効にする
<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 が関連付けられます。この URL は Amazon EKS コンソールで表示することも、次の 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 ID プロバイダーを作成する必要があります。

## `eksctl` を使用してクラスターの IAM OIDC ID プロバイダーを作成するには
<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 ID プロバイダーを作成します。*cluster\$1name* は、独自の値に置き換えてください。

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

## を使用してクラスターの IAM OIDC ID プロバイダーを作成するには 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. IAM コンソール ([https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)) を開きます。

1. ナビゲーションペインで、**[ID プロバイダー]** を選択し、**[プロバイダーの作成]** をクリックします。

   1. [**プロバイダーのタイプ**] で [**Choose a provider type**] を選択してから、[**OpenID Connect**] を選択します。

   1. **Provider URL** に、クラスターの OIDC 発行者 URL を貼り付けます。

   1. [対象者] に、「sts.amazonaws.com」と入力し、**[次のステップ]** を選択します。

1. プロバイダー情報が正しいことを確認し、[**作成**] を選択して ID プロバイダーを作成します。

# ジョブ実行ロールを作成する
<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 マネージドサービスアカウントの ID との間に信頼関係を作成する必要があります。信頼関係は、ジョブ実行ロールの信頼ポリシーを更新することによって作成できます。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` のアクセス許可が必要です。