

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Accesso ai dati S3 in un altro AWS account da EMR Serverless
<a name="jobs-s3-access"></a>

Puoi eseguire job Serverless di Amazon EMR da un AWS account e configurarli per accedere ai dati nei bucket Amazon S3 che appartengono a un altro account. AWS Questa pagina descrive come configurare l'accesso tra account a S3 da EMR Serverless.

I lavori eseguiti su EMR Serverless possono utilizzare una policy di bucket S3 o un ruolo presunto per accedere ai dati in Amazon S3 da un altro account. AWS 

## Prerequisiti
<a name="jobs-s3-access-prerequisites"></a>

Per configurare l'accesso a più account per Amazon EMR Serverless, completa le attività accedendo a due account: AWS 
+ **`AccountA`**— Questo è l' AWS account su cui hai creato un'applicazione Amazon EMR Serverless. Prima di configurare l'accesso tra più account, tieni a portata di mano quanto segue in questo account:
  + Un'applicazione Serverless Amazon EMR in cui eseguire lavori.
  + Un ruolo di esecuzione del lavoro che dispone delle autorizzazioni necessarie per eseguire i lavori nell'applicazione. Per ulteriori informazioni, vedi [Ruoli Job Runtime per Amazon EMR Serverless](security-iam-runtime-role.md).
+ **`AccountB`**— Questo è l' AWS account che contiene il bucket S3 a cui desideri accedere per i tuoi job Serverless di Amazon EMR. 

## Utilizza una policy sui bucket S3 per accedere ai dati S3 tra più account
<a name="jobs-s3-access-how-to-s3-bucket-policy"></a>

Per accedere al bucket in S3 account B daaccount A, collega la seguente policy al bucket in S3. 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/*"
      ]
    }
  ]
}
```

------

*Per ulteriori informazioni sull'accesso a più account S3 con le policy dei bucket S3, consulta l'[Esempio 2: Il proprietario del bucket concede le autorizzazioni per i bucket tra account nella Guida per l'utente di Amazon Simple](https://docs.aws.amazon.com/AmazonS3/latest/userguide/example-walkthroughs-managing-access-example2.html) Storage Service.*

## Usa un ruolo presunto per accedere ai dati S3 tra più account
<a name="jobs-s3-access-how-to-assumed-role"></a>

Un altro modo per configurare l'accesso tra account per Amazon EMR Serverless consiste nell'eseguire `AssumeRole` l'azione di AWS Security Token Service ().AWS STS AWS STS è un servizio web globale che consente di richiedere credenziali temporanee con privilegi limitati per gli utenti. Puoi effettuare chiamate API verso EMR Serverless e Amazon S3 con le credenziali di sicurezza temporanee con cui crei. `AssumeRole`

I passaggi seguenti illustrano come utilizzare un ruolo presunto per accedere ai dati S3 tra account diversi da EMR Serverless: 

1. Crea un bucket Amazon S3, *cross-account-bucket*, in `AccountB`. Per ulteriori informazioni, consulta la sezione [Creazione di un bucket](https://docs.aws.amazon.com/AmazonS3/latest/gsg/CreatingABucket.html) nella *Guida per l'utente di Amazon Simple Storage Service*. Se desideri avere accesso a DynamoDB su più account, crea anche una tabella DynamoDB in. `AccountB` Per ulteriori informazioni, consulta [Creating a DynamoDB table nella Amazon DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/getting-started-step-1.html) Developer *Guide*.

1. Crea un ruolo IAM `Cross-Account-Role-B` in `AccountB` per accedere a *cross-account-bucket*.

   1. Accedi Console di gestione AWS e apri la console IAM all'indirizzo. [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)

   1. Scegli **Roles (Ruoli)**, quindi crea un nuovo ruolo: `Cross-Account-Role-B`. Per ulteriori informazioni su come creare ruoli IAM, consulta [Creating IAM roles](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create.html) nella IAM User Guide.

   1. Crea una policy IAM che specifichi le autorizzazioni per `Cross-Account-Role-B` per accedere al bucket S3 *cross-account-bucket*, come dimostra la seguente istruzione di policy. Quindi, allega la policy IAM a `Cross-Account-Role-B`. Per ulteriori informazioni, consulta [Creating IAM policies](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html) nella *IAM User Guide*.

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

------

   Se hai bisogno dell'accesso a DynamoDB, crea una policy IAM che specifichi le autorizzazioni per accedere alla tabella DynamoDB tra account. Quindi, allega la policy IAM a `Cross-Account-Role-B`. *Per ulteriori informazioni, consulta [Amazon DynamoDB: consente l'accesso a una tabella specifica](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_examples_dynamodb_specific-table.html) nella IAM User Guide.*

   Di seguito è riportata una politica per consentire l'accesso alla tabella DynamoDB`CrossAccountTable`.

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

****  

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

------

1. Modifica la relazione di fiducia per il ruolo `Cross-Account-Role-B`.

   1. Per configurare la relazione di trust per il ruolo, scegli la scheda **Trust Relationships** nella console IAM per il ruolo `Cross-Account-Role-B` che hai creato nel passaggio 2.

   1. Seleziona **Edit Trust Relationship (Modifica relazione di fiducia)**.

   1. Aggiungi il seguente documento di policy. Ciò consente `Job-Execution-Role-A` `AccountA` di assumere il `Cross-Account-Role-B` ruolo.

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

****  

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

------

1. Concedi `Job-Execution-Role-A` `AccountA` il AWS STS `AssumeRole` permesso di assumere`Cross-Account-Role-B`.

   1. Nella console IAM per l' AWS account`AccountA`, seleziona`Job-Execution-Role-A`.

   1. Aggiungi la seguente istruzione di policy a `Job-Execution-Role-A` per autorizzare l'operazione `AssumeRole` nel ruolo `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"
          }
        ]
      }
      ```

------

## Esempi di ruoli presunti
<a name="jobs-s3-access-how-to-assumed-role-examples"></a>

Usa un singolo ruolo presunto per accedere a tutte le risorse S3 in un account oppure, con Amazon EMR 6.11 e versioni successive, configura più ruoli IAM da assumere quando accedi a diversi bucket S3 tra account diversi.

**Topics**
+ [Accedi alle risorse S3 con un ruolo presunto](#jobs-s3-access-how-to-assumed-role-single)
+ [Accedi alle risorse S3 con più ruoli presunti](#jobs-s3-access-how-to-assumed-role-multiple)

### Accedi alle risorse S3 con un ruolo presunto
<a name="jobs-s3-access-how-to-assumed-role-single"></a>

**Nota**  
Quando configuri un lavoro per utilizzare un singolo ruolo assunto, tutte le risorse S3 del job utilizzano quel ruolo, incluso lo `entryPoint` script.

Se desideri utilizzare un singolo ruolo assunto per accedere a tutte le risorse S3 nell'account B, specifica le seguenti configurazioni:

1. Specificare la configurazione EMRFS per. `fs.s3.customAWSCredentialsProvider` `com.amazonaws.emr.AssumeRoleAWSCredentialsProvider`

1. Per Spark, usa `spark.emr-serverless.driverEnv.ASSUME_ROLE_CREDENTIALS_ROLE_ARN` e specifica le variabili `spark.executorEnv.ASSUME_ROLE_CREDENTIALS_ROLE_ARN` di ambiente su driver ed executor.

1. Per Hive `hive.emr-serverless.launch.env.ASSUME_ROLE_CREDENTIALS_ROLE_ARN``tez.am.emr-serverless.launch.env.ASSUME_ROLE_CREDENTIALS_ROLE_ARN`, usa e specifica le variabili `tez.task.emr-serverless.launch.env.ASSUME_ROLE_CREDENTIALS_ROLE_ARN` di ambiente nei contenitori Hive driver, Tez application primary e Tez task.

Gli esempi seguenti mostrano come utilizzare un ruolo presunto per avviare un processo EMR Serverless con accesso tra account.

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

L'esempio seguente mostra come utilizzare un ruolo assunto per avviare un job EMR Serverless Spark eseguito con accesso multiaccount a 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 ]

L'esempio seguente mostra come utilizzare un ruolo presunto per avviare un job EMR Serverless Hive eseguito con accesso multiaccount a 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"
            }
        }]
    }'
```

------

### Accedi alle risorse S3 con più ruoli presunti
<a name="jobs-s3-access-how-to-assumed-role-multiple"></a>

Con le versioni 6.11.0 e successive di EMR Serverless, configura più ruoli IAM da assumere quando accedi a diversi bucket tra account. Se desideri accedere a diverse risorse S3 con diversi ruoli assunti nell'account B, utilizza le seguenti configurazioni all'avvio del job run:

1. Specificare la configurazione EMRFS per. `fs.s3.customAWSCredentialsProvider` `com.amazonaws.emr.serverless.credentialsprovider.BucketLevelAssumeRoleCredentialsProvider`

1. Specificate la configurazione EMRFS `fs.s3.bucketLevelAssumeRoleMapping` per definire la mappatura dal nome del bucket S3 al ruolo IAM nell'account B da assumere. Il valore deve essere nel formato di. `bucket1->role1;bucket2->role2`

Ad esempio, utilizzare per accedere `arn:aws:iam::AccountB:role/Cross-Account-Role-B-1` al bucket `bucket1` e utilizzare `arn:aws:iam::AccountB:role/Cross-Account-Role-B-2` per accedere al `bucket2` bucket. Gli esempi seguenti mostrano come avviare l'esecuzione di un job EMR Serverless con accesso tra più account tramite più ruoli presunti.

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

L'esempio seguente mostra come utilizzare più ruoli presunti per creare un'esecuzione di job EMR Serverless Spark.

```
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 ]

Gli esempi seguenti mostrano come utilizzare più ruoli presunti per creare un'esecuzione di job EMR Serverless Hive.

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

------