

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Atur akses lintas akun untuk Amazon EMR di EKS
<a name="security-cross-account"></a>

Anda dapat mengatur akses lintas-akun untuk Amazon EMR di EKS. Akses lintas akun memungkinkan pengguna dari satu AWS akun untuk menjalankan Amazon EMR pada pekerjaan EKS dan mengakses data dasar milik AWS akun lain. 

## Prasyarat
<a name="security-cross-account-prereq"></a>

Untuk mengatur akses lintas akun untuk Amazon EMR di EKS, Anda akan menyelesaikan tugas saat masuk ke akun berikut AWS : 
+ `AccountA`- AWS Akun tempat Anda membuat EMR Amazon di kluster virtual EKS dengan mendaftarkan Amazon EMR dengan namespace di cluster EKS.
+ `AccountB`- AWS Akun yang berisi bucket Amazon S3 atau tabel DynamoDB yang Anda inginkan untuk diakses oleh EMR Amazon Anda di pekerjaan EKS. 

Anda harus menyiapkan hal-hal berikut di AWS akun Anda sebelum menyiapkan akses lintas akun: 
+ Klaster virtual Amazon EMR di EKS di `AccountA` di mana Anda ingin menjalankan tugas.
+ Peran eksekusi tugas di `AccountA` yang memiliki izin yang diperlukan untuk menjalankan tugas di klaster virtual. Untuk informasi lebih lanjut, lihat [Untuk membuat peran eksekusi tugas](creating-job-execution-role.md) dan [Menggunakan peran eksekusi tugas dengan Amazon EMR di EKS](iam-execution-role.md).

## Cara mengakses bucket Amazon S3 lintas akun atau tabel DynamoDB
<a name="security-cross-account-steps"></a>

Untuk mengatur akses lintas-akun untuk Amazon EMR di EKS, selesaikan langkah-langkah berikut.

1. Buat bucket Amazon S3, `cross-account-bucket`, di `AccountB`. Untuk informasi lebih lanjut, lihat [Membuat bucket](https://docs.aws.amazon.com/AmazonS3/latest/gsg/CreatingABucket.html). Jika Anda ingin memiliki akses lintas-akun ke DynamoDB, Anda juga dapat membuat tabel DynamoDB di `AccountB`. Untuk informasi selengkapnya, lihat [Membuat tabel DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/getting-started-step-1.html).

1. Buat IAM role `Cross-Account-Role-B` dalam `AccountB` yang dapat mengakses `cross-account-bucket`.

   1. Masuklah ke konsol IAM.

   1. Pilih **Peran** dan buat peran baru: `Cross-Account-Role-B`. Untuk informasi selengkapnya tentang cara membuat peran IAM, lihat [Membuat peran IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create.html) di Panduan pengguna IAM.

   1. Buat kebijakan IAM yang menentukan izin untuk `Cross-Account-Role-B` untuk mengakses S3 bucket `cross-account-bucket`, seperti yang ditunjukkan pernyataan kebijakan berikut. Kemudian lampirkan kebijakan IAM ke `Cross-Account-Role-B`. Untuk informasi selengkapnya, lihat [Membuat Kebijakan Baru](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html) di Panduan pengguna IAM.

------
#### [ 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"
          }
        ]
      }
      ```

------

      Jika akses DynamoDB diperlukan, 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 [Buat tabel DynamoDB](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_examples_dynamodb_specific-table.html) dalam Panduan Pengguna IAM.

      Berikut ini adalah kebijakan untuk mengakses tabel DynamoDB, `CrossAccountTable`. 

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

****  

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

------

1. Cara mengedit hubungan kepercayaan untuk peran `Cross-Account-Role-B`. 

   1. Untuk mengonfigurasi hubungan kepercayaan untuk peran, pilih tab **Hubungan Kepercayaan** di konsol IAM untuk peran yang dibuat di langkah 2: `Cross-Account-Role-B`. 

   1. Pilih **Edit Hubungan Kepercayaan**.

   1. Tambahkan dokumen kebijakan berikut, yang memungkinkan `Job-Execution-Role-A` dalam `AccountA` untuk mengasumsikan peran `Cross-Account-Role-B` ini.

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

****  

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

------

1. `Job-Execution-Role-A`Hibah `AccountA` dengan - STS Asumsikan izin peran untuk diasumsikan`Cross-Account-Role-B`.

   1. Di konsol IAM untuk AWS akun`AccountA`, pilih`Job-Execution-Role-A`. 

   1. Tambahkan pernyataan kebijakan berikut pada `Job-Execution-Role-A` untuk mengizinkan tindakan `AssumeRole` di peran `Cross-Account-Role-B`.

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

****  

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

------

1. Untuk akses Amazon S3, atur parameter `spark-submit` berikut (`spark conf`) saat mengirimkan tugas ke Amazon EMR di EKS.
**catatan**  
Secara default, EMRFS menggunakan peran eksekusi tugas untuk mengakses bucket S3 dari tugas. Tapi saat `customAWSCredentialsProvider` diatur ke `AssumeRoleAWSCredentialsProvider`, EMRFS menggunakan peran yang sesuai yang Anda tentukan dengan `ASSUME_ROLE_CREDENTIALS_ROLE_ARN` bukan dari `Job-Execution-Role-A` untuk akses Amazon S3.
   + `--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 \`
**catatan**  
Anda harus menetapkan `ASSUME_ROLE_CREDENTIALS_ROLE_ARN` baik untuk pelaksana maupun driver `env` dalam konfigurasi tugas spark.

   Untuk akses lintas akun DynamoDB, Anda harus mengatur `--conf spark.dynamodb.customAWSCredentialsProvider=com.amazonaws.emr.AssumeRoleAWSCredentialsProvider`.

1. Jalankan Amazon EMR pada tugas EKS dengan akses lintas-akun, seperti yang ditunjukkan contoh berikut. 

   ```
   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" }}}'
   ```