

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

# Amazon EMR on EKS のクロスアカウントアクセスを設定する
<a name="security-cross-account"></a>

Amazon EMR on EKS のクロスアカウントアクセスを設定できます。クロスアカウントアクセスにより、ある AWS アカウントのユーザーは Amazon EMR on EKS ジョブを実行し、別の AWS アカウントに属する基盤となるデータにアクセスできます。

## 前提条件
<a name="security-cross-account-prereq"></a>

Amazon EMR on EKS のクロスアカウントアクセスを設定するには、次の AWS アカウントにサインインしている間にタスクを完了します。
+ `AccountA` - EKS クラスターの名前空間に Amazon EMR を登録して Amazon EMR on EKS 仮想クラスターを作成した AWS アカウント。
+ `AccountB` - Amazon EMR on EKS ジョブがアクセスする Amazon S3 バケットまたは DynamoDB テーブルを含む AWS アカウント。

クロス AWS アカウントアクセスを設定する前に、アカウントに次の準備が整っている必要があります。
+ ジョブを実行する、`AccountA` 内の Amazon EMR on EKS 仮想クラスター。
+ 仮想クラスターでジョブを実行するために必要な許可を持つ、`AccountA` 内のジョブ実行ロール。詳細については、「[ジョブ実行ロールを作成する](creating-job-execution-role.md)」および「[Amazon EMR on EKS でのジョブ実行ロールの使用](iam-execution-role.md)」を参照してください。

## クロスアカウントの Amazon S3 バケットまたは DynamoDB テーブルにアクセスする方法
<a name="security-cross-account-steps"></a>

Amazon EMR on EKS のクロスアカウントアクセスを設定するには、次の手順を実行します。

1. Amazon S3 バケット `cross-account-bucket` を `AccountB` に作成します。詳細については、「[バケットの作成](https://docs.aws.amazon.com/AmazonS3/latest/gsg/CreatingABucket.html)」を参照してください。DynamoDB へのクロスアカウントアクセスが必要な場合は、`AccountB` で DynamoDB テーブルを作成することもできます。詳細については、「[DynamoDB テーブルの作成](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/getting-started-step-1.html)」を参照してください。

1. `AccountB` に、`cross-account-bucket` にアクセスできる `Cross-Account-Role-B` IAM ロールを作成します。

   1. IAM コンソールにサインインします。

   1. **[ロール]** を選択し、新しいロール `Cross-Account-Role-B` を作成します。IAM ロールの作成方法の詳細については、「IAM ユーザーガイド」の「[IAM ロールの作成](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create.html)」を参照してください。

   1. 以下のポリシーステートメントに示すように、`cross-account-bucket` S3 バケットにアクセスするための `Cross-Account-Role-B` の許可を指定する IAM ポリシーを作成します。IAM ポリシーを `Cross-Account-Role-B` にアタッチします。詳細については、「IAM ユーザーガイド」の「[新しいポリシーの作成](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html)」を参照してください。

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

****  

      ```
      {
        "Version":"2012-10-17",		 	 	 
        "Statement": [
          {
            "Effect": "Allow",
            "Action": [
              "s3:*"
            ],
            "Resource": [
              "arn:aws:s3:::cross-account-bucket",
              "arn:aws:s3:::cross-account-bucket/*"
            ],
            "Sid": "AllowS3"
          }
        ]
      }
      ```

------

      DynamoDB アクセスが必要な場合は、クロスアカウントの DynamoDB テーブルにアクセスするための許可を指定する IAM ポリシーを作成します。IAM ポリシーを `Cross-Account-Role-B` にアタッチします。詳細については、「IAM ユーザーガイド」の「[DynamoDB テーブルの作成](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_examples_dynamodb_specific-table.html)」を参照してください。

      DynamoDB テーブル `CrossAccountTable` にアクセスするためのポリシーを以下に示します。

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

****  

      ```
      {
        "Version":"2012-10-17",		 	 	 
        "Statement": [
          {
            "Effect": "Allow",
            "Action": [
              "dynamodb:*"
            ],
            "Resource": [
              "arn:aws:dynamodb:us-east-1:*:table/CrossAccountTable"
            ],
            "Sid": "AllowDYNAMODB"
          }
        ]
      }
      ```

------

1. `Cross-Account-Role-B` ロールの信頼関係を編集します。

   1. ロールの信頼関係を設定するには、IAM コンソールで、ステップ 2 で作成したロール `Cross-Account-Role-B` の **[信頼関係]** タブを選択します。

   1. **[信頼関係の編集]** を選択します。

   1. 以下のポリシードキュメントを追加します。これにより、`AccountA` 内の `Job-Execution-Role-A` にこの `Cross-Account-Role-B` ロールを引き受けることを許可します。

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

****  

      ```
      {
        "Version":"2012-10-17",		 	 	 
        "Statement": [
          {
            "Effect": "Allow",
            "Action": [
              "sts:AssumeRole"
            ],
            "Resource": [
              "arn:aws:iam::*:role/Job-Execution-Role-A"
            ],
            "Sid": "AllowSTSAssumerole"
          }
        ]
      }
      ```

------

1. `Cross-Account-Role-B` を引き受けるように、STS ロール引き受け許可を使用して `AccountA` 内で `Job-Execution-Role-A` を付与します。

   1.  AWS アカウント の IAM コンソールで`AccountA`、 を選択します`Job-Execution-Role-A`。

   1. 次のポリシーステートメントを `Job-Execution-Role-A` に追加して、`Cross-Account-Role-B` ロールに対して `AssumeRole` アクションを許可します。

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

****  

      ```
      {
        "Version":"2012-10-17",		 	 	 
        "Statement": [
          {
            "Effect": "Allow",
            "Action": [
              "sts:AssumeRole"
            ],
            "Resource": [
              "arn:aws:iam::*:role/Cross-Account-Role-B"
            ],
            "Sid": "AllowSTSAssumerole"
          }
        ]
      }
      ```

------

1. Amazon S3 アクセスの場合、Amazon EMR on EKS にジョブを送信するときに、以下の `spark-submit` パラメータ (`spark conf`) を設定します。
**注記**  
デフォルトでは、EMRFS はジョブ実行ロールを使用して、ジョブから S3 バケットにアクセスします。ただし、`customAWSCredentialsProvider` が `AssumeRoleAWSCredentialsProvider` に設定されている場合、EMRFS は、Amazon S3 アクセスに `Job-Execution-Role-A` ではなく `ASSUME_ROLE_CREDENTIALS_ROLE_ARN` で指定された対応するロールを使用します。
   + `--conf spark.hadoop.fs.s3.customAWSCredentialsProvider=com.amazonaws.emr.AssumeRoleAWSCredentialsProvider`
   + `--conf spark.kubernetes.driverEnv.ASSUME_ROLE_CREDENTIALS_ROLE_ARN=arn:aws:iam::AccountB:role/Cross-Account-Role-B \`
   + `--conf spark.executorEnv.ASSUME_ROLE_CREDENTIALS_ROLE_ARN=arn:aws:iam::AccountB:role/Cross-Account-Role-B \`
**注記**  
ジョブの Spark 設定で、エグゼキュターとドライバーの両方の `env` に `ASSUME_ROLE_CREDENTIALS_ROLE_ARN` を設定する必要があります。

   DynamoDB のクロスアカウントアクセスの場合、`--conf spark.dynamodb.customAWSCredentialsProvider=com.amazonaws.emr.AssumeRoleAWSCredentialsProvider` を設定する必要があります。

1. 次の例に示すように、クロスアカウントアクセスを使用して Amazon EMR on EKS ジョブを実行します。

   ```
   aws emr-containers start-job-run \
   --virtual-cluster-id 123456 \
   --name myjob \
   --execution-role-arn execution-role-arn \
   --release-label emr-6.2.0-latest \
   --job-driver '{"sparkSubmitJobDriver": {"entryPoint": "entryPoint_location", "entryPointArguments": ["arguments_list"], "sparkSubmitParameters": "--class <main_class> --conf spark.executor.instances=2 --conf spark.executor.memory=2G --conf spark.executor.cores=2 --conf spark.driver.cores=1 --conf spark.hadoop.fs.s3.customAWSCredentialsProvider=com.amazonaws.emr.AssumeRoleAWSCredentialsProvider --conf spark.kubernetes.driverEnv.ASSUME_ROLE_CREDENTIALS_ROLE_ARN=arn:aws:iam::AccountB:role/Cross-Account-Role-B --conf spark.executorEnv.ASSUME_ROLE_CREDENTIALS_ROLE_ARN=arn:aws:iam::AccountB:role/Cross-Account-Role-B"}} ' \
   --configuration-overrides '{"applicationConfiguration": [{"classification": "spark-defaults", "properties": {"spark.driver.memory": "2G"}}], "monitoringConfiguration": {"cloudWatchMonitoringConfiguration": {"logGroupName": "log_group_name", "logStreamNamePrefix": "log_stream_prefix"}, "persistentAppUI":"ENABLED",  "s3MonitoringConfiguration": {"logUri": "s3://my_s3_log_location" }}}'
   ```