Amazon EMR on EKS のクロスアカウントアクセスを設定する - Amazon EMR

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

Amazon EMR on EKS のクロスアカウントアクセスを設定する

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

前提条件

Amazon EMR on EKS のクロスアカウントアクセスを設定するには、次の AWS アカウントにサインインしてタスクを完了します。

  • AccountA - Amazon EMR を EKS クラスターの名前空間に登録して Amazon EMR on EKS 仮想クラスターを作成した AWS アカウント。

  • AccountB ‐ Amazon EMR on EKS ジョブにアクセスさせる Amazon S3 バケットまたは DynamoDB テーブルを含む AWS アカウント。

クロス AWS アカウントアクセスを設定する前に、アカウントで次の準備をしておく必要があります。

クロスアカウントの Amazon S3 バケットまたは DynamoDB テーブルにアクセスする方法

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

  1. Amazon S3 バケット cross-account-bucketAccountB に作成します。詳細については、「バケットの作成」を参照してください。DynamoDB へのクロスアカウントアクセスが必要な場合は、AccountB で DynamoDB テーブルを作成することもできます。詳細については、「DynamoDB テーブルの作成」を参照してください。

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

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

    2. [ロール] を選択し、新しいロール Cross-Account-Role-B を作成します。IAM ロールの作成方法の詳細については、「IAM ユーザーガイド」の「IAM ロールの作成」を参照してください。

    3. 以下のポリシーステートメントに示すように、cross-account-bucket S3 バケットにアクセスするための Cross-Account-Role-B の許可を指定する IAM ポリシーを作成します。IAM ポリシーを Cross-Account-Role-B にアタッチします。詳細については、「IAM ユーザーガイド」の「新しいポリシーの作成」を参照してください。

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

      DynamoDB アクセスが必要な場合は、クロスアカウントの DynamoDB テーブルにアクセスするための許可を指定する IAM ポリシーを作成します。IAM ポリシーを Cross-Account-Role-B にアタッチします。詳細については、「IAM ユーザーガイド」の「DynamoDB テーブルの作成」を参照してください。

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

      { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "dynamodb:*", "Resource": "arn:aws:dynamodb:MyRegion:AccountB:table/CrossAccountTable" } ] }
  3. Cross-Account-Role-B ロールの信頼関係を編集します。

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

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

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

      { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::AccountA:role/Job-Execution-Role-A" }, "Action": "sts:AssumeRole" } ] }
  4. Cross-Account-Role-B を引き受けるように、STS ロール引き受け許可を使用して AccountA 内で Job-Execution-Role-A を付与します。

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

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

      { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": "arn:aws:iam::AccountB:role/Cross-Account-Role-B" } ] }
  5. Amazon S3 アクセスの場合、Amazon EMR on EKS にジョブを送信するときに、以下の spark-submit パラメータ (spark conf) を設定します。

    注記

    デフォルトでは、EMRFS はジョブ実行ロールを使用して、ジョブから S3 バケットにアクセスします。ただし、customAWSCredentialsProviderAssumeRoleAWSCredentialsProvider に設定されている場合、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 設定で、エグゼキュターとドライバーの両方の envASSUME_ROLE_CREDENTIALS_ROLE_ARN を設定する必要があります。

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

  6. 次の例に示すように、クロスアカウントアクセスを使用して 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" }}}'