翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
Amazon EMR on EKS のクロスアカウントアクセスを設定する
Amazon EMR on EKS のクロスアカウントアクセスを設定できます。クロスアカウントアクセスにより、ある AWS アカウントのユーザーは Amazon EMR on EKS ジョブを実行し、別の AWS アカウントに属する基盤となるデータにアクセスできます。
前提条件
Amazon EMR on EKS のクロスアカウントアクセスを設定するには、次の AWS アカウントにサインインしている間にタスクを完了します。
- AccountA- Amazon EMR on EKS 仮想クラスターを作成した AWS アカウント。Amazon EMR を EKS クラスターの名前空間に登録します。
- AccountB- Amazon EMR on EKS ジョブがアクセスする Amazon S3 バケットまたは DynamoDB テーブルを含む AWS アカウント。
クロス AWS アカウントアクセスを設定する前に、アカウントに次の準備が整っている必要があります。
- ジョブを実行する、 - AccountA内の Amazon EMR on EKS 仮想クラスター。
- 仮想クラスターでジョブを実行するために必要な許可を持つ、 - AccountA内のジョブ実行ロール。詳細については、「ジョブ実行ロールを作成する」および「Amazon EMR on EKS でのジョブ実行ロールの使用」を参照してください。
クロスアカウントの Amazon S3 バケットまたは DynamoDB テーブルにアクセスする方法
Amazon EMR on EKS のクロスアカウントアクセスを設定するには、次の手順を実行します。
- Amazon S3 バケット - cross-account-bucketを- AccountBに作成します。詳細については、「バケットの作成」を参照してください。DynamoDB へのクロスアカウントアクセスが必要な場合は、- AccountBで DynamoDB テーブルを作成することもできます。詳細については、「DynamoDB テーブルの作成」を参照してください。
- AccountBに、- cross-account-bucketにアクセスできる- Cross-Account-Role-BIAM ロールを作成します。- IAM コンソールにサインインします。 
- [ロール] を選択し、新しいロール - Cross-Account-Role-Bを作成します。IAM ロールの作成方法の詳細については、「IAM ユーザーガイド」の「IAM ロールの作成」を参照してください。
- 以下のポリシーステートメントに示すように、 - cross-account-bucketS3 バケットにアクセスするための- Cross-Account-Role-Bの許可を指定する IAM ポリシーを作成します。IAM ポリシーを- Cross-Account-Role-Bにアタッチします。詳細については、「IAM ユーザーガイド」の「新しいポリシーの作成」を参照してください。- DynamoDB アクセスが必要な場合は、クロスアカウントの DynamoDB テーブルにアクセスするための許可を指定する IAM ポリシーを作成します。IAM ポリシーを - Cross-Account-Role-Bにアタッチします。詳細については、「IAM ユーザーガイド」の「DynamoDB テーブルの作成」を参照してください。- DynamoDB テーブル - CrossAccountTableにアクセスするためのポリシーを以下に示します。
 
- Cross-Account-Role-Bロールの信頼関係を編集します。- ロールの信頼関係を設定するには、IAM コンソールで、ステップ 2 で作成したロール - Cross-Account-Role-Bの [信頼関係] タブを選択します。
- [信頼関係の編集] を選択します。 
- 以下のポリシードキュメントを追加します。これにより、 - AccountA内の- Job-Execution-Role-Aにこの- Cross-Account-Role-Bロールを引き受けることを許可します。
 
- Cross-Account-Role-Bを引き受けるように、STS ロール引き受け許可を使用して- AccountA内で- Job-Execution-Role-Aを付与します。- AWS アカウント の IAM コンソールで - AccountA、 を選択します- Job-Execution-Role-A。
- 次のポリシーステートメントを - Job-Execution-Role-Aに追加して、- Cross-Account-Role-Bロールに対して- AssumeRoleアクションを許可します。
 
- 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を設定する必要があります。
- 次の例に示すように、クロスアカウントアクセスを使用して 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" }}}'