翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
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 アカウントアクセスを設定する前に、アカウントで次の準備をしておく必要があります。
ジョブを実行する、
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-B
IAM ロールを作成します。IAM コンソールにサインインします。
[ロール] を選択し、新しいロール
Cross-Account-Role-B
を作成します。IAM ロールの作成方法の詳細については、「IAM ユーザーガイド」の「IAM ロールの作成」を参照してください。以下のポリシーステートメントに示すように、
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" } ] }
Cross-Account-Role-B
ロールの信頼関係を編集します。ロールの信頼関係を設定するには、IAM コンソールで、ステップ 2 で作成したロール
Cross-Account-Role-B
の [信頼関係] タブを選択します。[信頼関係の編集] を選択します。
以下のポリシードキュメントを追加します。これにより、
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" } ] }
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
アクションを許可します。{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": "arn:aws:iam::
AccountB
:role/Cross-Account-Role-B" } ] }
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" }}}'