

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
<a name="jobs-s3-access"></a>

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
<a name="jobs-s3-access-prerequisites"></a>

Untuk mengatur akses lintas akun untuk Amazon EMR Tanpa Server, selesaikan 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, siapkan hal-hal berikut 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 lebih lanjut, lihat[Peran runtime Job untuk Amazon EMR Tanpa Server](security-iam-runtime-role.md).
+ **`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
<a name="jobs-s3-access-how-to-s3-bucket-policy"></a>

Untuk mengakses bucket S3 in account B fromaccount A, lampirkan kebijakan berikut ke bucket S3 di. account B

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "ExamplePermissions1",
      "Effect": "Allow",
      "Action": [
        "s3:ListBucket"
      ],
      "Resource": [
        "arn:aws:s3:::my-bucket-name"
      ]
    },
    {
      "Sid": "ExamplePermissions2",
      "Effect": "Allow",
      "Action": [
        "s3:PutObject",
        "s3:GetObject",
        "s3:DeleteObject"
      ],
      "Resource": [
        "arn:aws:s3:::my-bucket-name/*"
      ]
    }
  ]
}
```

------

Untuk informasi selengkapnya tentang akses lintas akun S3 dengan kebijakan bucket S3, lihat [Contoh 2: Pemilik bucket yang memberikan izin bucket lintas akun di](https://docs.aws.amazon.com/AmazonS3/latest/userguide/example-walkthroughs-managing-access-example2.html) Panduan Pengguna Layanan Penyimpanan Sederhana *Amazon*.

## Gunakan peran yang diasumsikan untuk mengakses data S3 lintas akun
<a name="jobs-s3-access-how-to-assumed-role"></a>

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: 

1. Buat bucket Amazon S3, *cross-account-bucket*, di `AccountB`. Untuk informasi selengkapnya, lihat [Membuat bucket](https://docs.aws.amazon.com/AmazonS3/latest/gsg/CreatingABucket.html) di *Panduan Pengguna Layanan Penyimpanan Sederhana Amazon*. Jika Anda ingin memiliki akses lintas akun ke DynamoDB, buat juga tabel DynamoDB di. `AccountB` Untuk informasi selengkapnya, lihat [Membuat tabel DynamoDB di Panduan Pengembang Amazon *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. Masuk ke Konsol Manajemen AWS dan buka konsol IAM di [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/).

   1. Pilih **Peran** dan buat peran baru: `Cross-Account-Role-B`. Untuk informasi selengkapnya tentang cara membuat peran IAM, lihat [Membuat peran IAM di Panduan](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create.html) 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 IAM](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 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](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_examples_dynamodb_specific-table.html) di Panduan Pengguna IAM.*

   Berikut ini adalah kebijakan untuk mengizinkan akses ke tabel DynamoDB. `CrossAccountTable`

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

****  

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

------

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

   1. 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.

   1. Pilih **Edit Hubungan Kepercayaan**.

   1. Tambahkan dokumen kebijakan berikut. Hal ini memungkinkan `Job-Execution-Role-A` `AccountA` untuk mengambil `Cross-Account-Role-B` peran.

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

****  

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

------

1. Berikan `Job-Execution-Role-A` AWS STS `AssumeRole` izin `AccountA` untuk berasumsi`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::123456789012:role/Cross-Account-Role-B"
            ],
            "Sid": "AllowSTSAssumerole"
          }
        ]
      }
      ```

------

## Contoh peran yang diasumsikan
<a name="jobs-s3-access-how-to-assumed-role-examples"></a>

Gunakan satu peran yang diasumsikan untuk mengakses semua sumber daya S3 di akun, atau dengan Amazon EMR 6.11 dan yang lebih tinggi, konfigurasikan beberapa peran IAM untuk diasumsikan saat Anda mengakses bucket S3 lintas akun yang berbeda.

**Topics**
+ [Akses sumber daya S3 dengan satu peran yang diasumsikan](#jobs-s3-access-how-to-assumed-role-single)
+ [Akses sumber daya S3 dengan beberapa peran yang diasumsikan](#jobs-s3-access-how-to-assumed-role-multiple)

### Akses sumber daya S3 dengan satu peran yang diasumsikan
<a name="jobs-s3-access-how-to-assumed-role-single"></a>

**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:

1. Tentukan konfigurasi `fs.s3.customAWSCredentialsProvider` EMRFS ke. `com.amazonaws.emr.AssumeRoleAWSCredentialsProvider`

1. Untuk Spark, gunakan `spark.emr-serverless.driverEnv.ASSUME_ROLE_CREDENTIALS_ROLE_ARN` dan `spark.executorEnv.ASSUME_ROLE_CREDENTIALS_ROLE_ARN` tentukan variabel lingkungan pada driver dan pelaksana.

1. Untuk Hive, gunakan`hive.emr-serverless.launch.env.ASSUME_ROLE_CREDENTIALS_ROLE_ARN`,`tez.am.emr-serverless.launch.env.ASSUME_ROLE_CREDENTIALS_ROLE_ARN`, dan `tez.task.emr-serverless.launch.env.ASSUME_ROLE_CREDENTIALS_ROLE_ARN` untuk menentukan variabel lingkungan pada driver Hive, aplikasi utama Tez, dan wadah tugas Tez.

Contoh berikut menunjukkan cara menggunakan peran yang diasumsikan untuk memulai pekerjaan EMR Tanpa Server dengan akses lintas akun.

------
#### [ Spark ]

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

------
#### [ Hive ]

Contoh berikut menunjukkan cara menggunakan peran yang diasumsikan untuk memulai pekerjaan EMR Serverless Hive 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 '{
        "hive": {
            "query": "query_location",
            "parameters": "hive_parameters"
        }
    }' \
    --configuration-overrides '{
        "applicationConfiguration": [{
            "classification": "hive-site",
            "properties": {
                "fs.s3.customAWSCredentialsProvider": "com.amazonaws.emr.serverless.credentialsprovider.AssumeRoleAWSCredentialsProvider",
                "hive.emr-serverless.launch.env.ASSUME_ROLE_CREDENTIALS_ROLE_ARN": "arn:aws:iam::AccountB:role/Cross-Account-Role-B",
                "tez.am.emr-serverless.launch.env.ASSUME_ROLE_CREDENTIALS_ROLE_ARN": "arn:aws:iam::AccountB:role/Cross-Account-Role-B",
                "tez.task.emr-serverless.launch.env.ASSUME_ROLE_CREDENTIALS_ROLE_ARN": "arn:aws:iam::AccountB:role/Cross-Account-Role-B"
            }
        }]
    }'
```

------

### Akses sumber daya S3 dengan beberapa peran yang diasumsikan
<a name="jobs-s3-access-how-to-assumed-role-multiple"></a>

Dengan rilis EMR Tanpa Server 6.11.0 dan yang lebih tinggi, konfigurasikan beberapa peran IAM untuk diasumsikan saat Anda 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:

1. Tentukan konfigurasi `fs.s3.customAWSCredentialsProvider` EMRFS ke. `com.amazonaws.emr.serverless.credentialsprovider.BucketLevelAssumeRoleCredentialsProvider`

1. Tentukan konfigurasi EMRFS `fs.s3.bucketLevelAssumeRoleMapping` untuk menentukan pemetaan dari nama bucket S3 ke peran IAM di akun B untuk diasumsikan. Nilai harus dalam format`bucket1->role1;bucket2->role2`.

Misalnya, gunakan `arn:aws:iam::AccountB:role/Cross-Account-Role-B-1` untuk mengakses bucket`bucket1`, dan gunakan `arn:aws:iam::AccountB:role/Cross-Account-Role-B-2` untuk mengakses bucket`bucket2`. Contoh berikut menunjukkan cara memulai pekerjaan EMR Tanpa Server dengan akses lintas akun melalui beberapa peran yang diasumsikan.

------
#### [ Spark ]

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

------
#### [ Hive ]

Contoh berikut menunjukkan cara menggunakan beberapa peran yang diasumsikan untuk membuat pekerjaan EMR Serverless Hive berjalan.

```
aws emr-serverless start-job-run \
    --application-id application-id \
    --execution-role-arn job-role-arn \
    --job-driver '{
        "hive": {
            "query": "query_location",
            "parameters": "hive_parameters"
        }
    }' \
    --configuration-overrides '{
        "applicationConfiguration": [{
            "classification": "hive-site",
            "properties": {
                "fs.s3.customAWSCredentialsProvider": "com.amazonaws.emr.serverless.credentialsprovider.AssumeRoleAWSCredentialsProvider",
                "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"
            }
        }]
    }'
```

------