Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Mengakses data S3 di AWS akun lain dari EMR Tanpa Server
Anda dapat menjalankan pekerjaan Amazon EMR Tanpa Server dari satu AWS akun dan mengonfigurasinya untuk mengakses data di bucket Amazon S3 milik akun lain. AWS Halaman ini menjelaskan cara mengonfigurasi akses lintas akun ke S3 dari EMR Tanpa Server.
Pekerjaan yang berjalan di EMR Tanpa Server dapat menggunakan kebijakan bucket S3 atau peran yang diasumsikan untuk mengakses data di Amazon S3 dari akun lain. AWS
Prasyarat
Untuk mengatur akses lintas akun untuk Amazon EMR Tanpa Server, Anda harus menyelesaikan tugas saat masuk ke dua akun: AWS
-
AccountA
— Ini adalah AWS akun tempat Anda membuat aplikasi Amazon EMR Tanpa Server. Sebelum Anda mengatur akses lintas akun, Anda harus memiliki yang berikut ini siap di akun ini:-
Aplikasi Amazon EMR Tanpa Server tempat Anda ingin menjalankan pekerjaan.
-
Peran eksekusi pekerjaan yang memiliki izin yang diperlukan untuk menjalankan pekerjaan dalam aplikasi. Untuk informasi selengkapnya, lihat Peran runtime Job untuk Amazon EMR Tanpa Server.
-
-
AccountB
— Ini adalah AWS akun yang berisi ember S3 yang Anda inginkan untuk diakses oleh pekerjaan Amazon EMR Tanpa Server Anda.
Menggunakan kebijakan bucket S3 untuk mengakses data S3 lintas akun
Untuk mengakses bucket S3 di account B From account A, lampirkan kebijakan berikut ke bucket S3 di account B.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Example permissions 1",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::AccountA
:root"
},
"Action": [
"s3:ListBucket"
],
"Resource": [
"arn:aws:s3:::bucket_name_in_AccountB
"
]
},
{
"Sid": "Example permissions 2",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::AccountA
:root"
},
"Action": [
"s3:PutObject",
"s3:GetObject",
"s3:DeleteObject"
],
"Resource": [
"arn:aws:s3:::bucket_name_in_AccountB
/*"
]
}
]
}
Untuk informasi selengkapnya tentang akses lintas akun S3 dengan kebijakan bucket S3, lihat Contoh 2: Pemilik bucket yang memberikan izin bucket lintas akun di Panduan Pengguna Layanan Penyimpanan Sederhana Amazon.
Gunakan peran yang diasumsikan untuk mengakses data S3 lintas akun
Cara lain untuk mengatur akses lintas akun untuk Amazon EMR Tanpa Server adalah dengan tindakan AssumeRole
dari (). AWS Security Token Service AWS STS AWS STS adalah layanan web global yang memungkinkan Anda meminta kredenal hak istimewa terbatas sementara untuk pengguna. Anda dapat melakukan panggilan API ke EMR Tanpa Server dan Amazon S3 dengan kredensil keamanan sementara yang Anda buat. AssumeRole
Langkah-langkah berikut menggambarkan cara menggunakan peran yang diasumsikan untuk mengakses data S3 lintas akun dari EMR Tanpa Server:
-
Buat bucket Amazon S3,
cross-account-bucket
, diAccountB
. Untuk informasi selengkapnya, lihat Membuat bucket di Panduan Pengguna Layanan Penyimpanan Sederhana Amazon. Jika Anda ingin memiliki akses lintas-akun ke DynamoDB, Anda juga dapat membuat tabel DynamoDB diAccountB
. Untuk informasi selengkapnya, lihat Membuat tabel DynamoDB di Panduan Pengembang Amazon DynamoDB. -
Buat IAM role
Cross-Account-Role-B
dalamAccountB
yang dapat mengaksescross-account-bucket
.Masuk ke AWS Management Console dan buka konsol IAM di https://console.aws.amazon.com/iam/
. -
Pilih Peran dan buat peran baru:
Cross-Account-Role-B
. Untuk informasi selengkapnya tentang cara membuat IAM role, lihat Membuat IAM role dalam Panduan Pengguna IAM. -
Buat kebijakan IAM yang menentukan izin untuk
Cross-Account-Role-B
untuk mengakses S3 bucketcross-account-bucket
, seperti yang ditunjukkan pernyataan kebijakan berikut. Kemudian lampirkan kebijakan IAM keCross-Account-Role-B
. Untuk informasi selengkapnya, lihat Membuat kebijakan IAM dalam Panduan Pengguna IAM.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "s3:*", "Resource": [ "arn:aws:s3:::
cross-account-bucket
", "arn:aws:s3:::cross-account-bucket
/*" ] } ] }Jika Anda memerlukan akses DynamoDB, buat kebijakan IAM yang menentukan izin untuk mengakses tabel DynamoDB lintas akun. Kemudian lampirkan kebijakan IAM ke
Cross-Account-Role-B
. Untuk informasi selengkapnya, lihat Amazon DynamoDB: Mengizinkan akses ke tabel tertentu di Panduan Pengguna IAM.Berikut ini adalah kebijakan untuk mengizinkan akses ke tabel DynamoDB.
CrossAccountTable
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "dynamodb:*", "Resource": "arn:aws:dynamodb:MyRegion:
AccountB
:table/CrossAccountTable
" } ] } -
Cara mengedit hubungan kepercayaan untuk peran
Cross-Account-Role-B
.-
Untuk mengonfigurasi hubungan kepercayaan untuk peran tersebut, pilih tab Trust Relationships di konsol IAM untuk peran
Cross-Account-Role-B
yang Anda buat di Langkah 2. -
Pilih Edit Hubungan Kepercayaan.
-
Tambahkan dokumen kebijakan berikut. Hal ini memungkinkan
Job-Execution-Role-A
AccountA
untuk mengambilCross-Account-Role-B
peran.{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::
AccountA
:role/Job-Execution-Role-A" }, "Action": "sts:AssumeRole" } ] }
-
-
Berikan
Job-Execution-Role-A
AWS STSAssumeRole
izinAccountA
untuk berasumsiCross-Account-Role-B
.-
Di konsol IAM untuk AWS akun
AccountA
, pilihJob-Execution-Role-A
. -
Tambahkan pernyataan kebijakan berikut pada
Job-Execution-Role-A
untuk mengizinkan tindakanAssumeRole
di peranCross-Account-Role-B
.{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": "arn:aws:iam::
AccountB
:role/Cross-Account-Role-B" } ] }
-
Contoh peran yang diasumsikan
Anda dapat menggunakan satu peran yang diasumsikan untuk mengakses semua sumber daya S3 di akun, atau dengan Amazon EMR 6.11 dan yang lebih tinggi, Anda dapat mengonfigurasi beberapa peran IAM untuk diasumsikan saat mengakses bucket S3 lintas akun yang berbeda.
Topik
Akses sumber daya S3 dengan satu peran yang diasumsikan
catatan
Saat Anda mengonfigurasi pekerjaan untuk menggunakan satu peran yang diasumsikan, semua sumber daya S3 di seluruh pekerjaan menggunakan peran tersebut, termasuk entryPoint
skrip.
Jika Anda ingin menggunakan satu peran yang diasumsikan untuk mengakses semua sumber daya S3 di akun B, tentukan konfigurasi berikut:
-
Tentukan konfigurasi
fs.s3.customAWSCredentialsProvider
EMRFS ke.spark.hadoop.fs.s3.customAWSCredentialsProvider=com.amazonaws.emr.AssumeRoleAWSCredentialsProvider
-
Untuk Spark, gunakan
spark.emr-serverless.driverEnv.ASSUME_ROLE_CREDENTIALS_ROLE_ARN
danspark.executorEnv.ASSUME_ROLE_CREDENTIALS_ROLE_ARN
tentukan variabel lingkungan pada driver dan pelaksana. -
Untuk Hive, gunakan
hive.emr-serverless.launch.env.ASSUME_ROLE_CREDENTIALS_ROLE_ARN
,tez.am.emr-serverless.launch.env.ASSUME_ROLE_CREDENTIALS_ROLE_ARN
, dantez.task.emr-serverless.launch.env.ASSUME_ROLE_CREDENTIALS_ROLE_ARN
untuk menentukan variabel lingkungan pada driver Hive, master aplikasi Tez, dan wadah tugas Tez.
Contoh berikut menunjukkan cara menggunakan peran yang diasumsikan untuk memulai pekerjaan EMR Tanpa Server dengan akses lintas akun.
Contoh berikut menunjukkan cara menggunakan peran yang diasumsikan untuk memulai pekerjaan EMR Serverless Spark yang dijalankan dengan akses lintas akun ke S3.
aws emr-serverless start-job-run \
--application-id application-id \
--execution-role-arn job-role-arn \
--job-driver '{
"sparkSubmit": {
"entryPoint": "entrypoint_location
",
"entryPointArguments": [":argument_1
:", ":argument_2
:"],
"sparkSubmitParameters": "--conf spark.executor.cores=4 --conf spark.executor.memory=20g --conf spark.driver.cores=4 --conf spark.driver.memory=8g --conf spark.executor.instances=1"
}
}' \
--configuration-overrides '{
"applicationConfiguration": [{
"classification": "spark-defaults",
"properties": {
"spark.hadoop.fs.s3.customAWSCredentialsProvider": "spark.hadoop.fs.s3.customAWSCredentialsProvider=com.amazonaws.emr.AssumeRoleAWSCredentialsProvider",
"spark.emr-serverless.driverEnv.ASSUME_ROLE_CREDENTIALS_ROLE_ARN": "arn:aws:iam::AccountB
:role/Cross-Account-Role-B",
"spark.executorEnv.ASSUME_ROLE_CREDENTIALS_ROLE_ARN": "arn:aws:iam::AccountB
:role/Cross-Account-Role-B"
}
}]
}'
Akses sumber daya S3 dengan beberapa peran yang diasumsikan
Dengan rilis EMR Tanpa Server 6.11.0 dan yang lebih tinggi, Anda dapat mengonfigurasi beberapa peran IAM untuk diasumsikan saat mengakses bucket lintas akun yang berbeda. Jika Anda ingin mengakses sumber daya S3 yang berbeda dengan peran yang diasumsikan berbeda di akun B, gunakan konfigurasi berikut saat Anda memulai pekerjaan:
-
Tentukan konfigurasi
fs.s3.customAWSCredentialsProvider
EMRFS ke.com.amazonaws.emr.serverless.credentialsprovider.BucketLevelAssumeRoleCredentialsProvider
-
Tentukan konfigurasi EMRFS
fs.s3.bucketLevelAssumeRoleMapping
untuk menentukan pemetaan dari nama bucket S3 ke peran IAM di akun B untuk diasumsikan. Nilai harus dalam formatbucket1->role1;bucket2->role2
.
Misalnya, Anda dapat menggunakan arn:aws:iam::
untuk mengakses bucketAccountB
:role/Cross-Account-Role-B-1bucket1
, dan menggunakannya arn:aws:iam::
untuk mengakses bucketAccountB
:role/Cross-Account-Role-B-2bucket2
. Contoh berikut menunjukkan cara memulai pekerjaan EMR Tanpa Server dengan akses lintas akun melalui beberapa peran yang diasumsikan.
Contoh berikut menunjukkan cara menggunakan beberapa peran yang diasumsikan untuk membuat EMR Serverless Spark job run.
aws emr-serverless start-job-run \
--application-id application-id \
--execution-role-arn job-role-arn \
--job-driver '{
"sparkSubmit": {
"entryPoint": "entrypoint_location
",
"entryPointArguments": [":argument_1
:", ":argument_2
:"],
"sparkSubmitParameters": "--conf spark.executor.cores=4 --conf spark.executor.memory=20g --conf spark.driver.cores=4 --conf spark.driver.memory=8g --conf spark.executor.instances=1"
}
}' \
--configuration-overrides '{
"applicationConfiguration": [{
"classification": "spark-defaults",
"properties": {
"spark.hadoop.fs.s3.customAWSCredentialsProvider": "com.amazonaws.emr.serverless.credentialsprovider.BucketLevelAssumeRoleCredentialsProvider",
"spark.hadoop.fs.s3.bucketLevelAssumeRoleMapping": "bucket1->arn:aws:iam::AccountB
:role/Cross-Account-Role-B-1;bucket2->arn:aws:iam::AccountB
:role/Cross-Account-Role-B-2"
}
}]
}'