

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Acessando dados do S3 em outra AWS conta do EMR Serverless
<a name="jobs-s3-access"></a>

Você pode executar trabalhos sem servidor do Amazon EMR em uma AWS conta e configurá-los para acessar dados nos buckets do Amazon S3 que pertencem a outra conta. AWS Esta página descreve como configurar o acesso entre contas do S3 no EMR Sem Servidor.

Os trabalhos executados no EMR Serverless podem usar uma política de bucket do S3 ou uma função assumida para acessar dados no Amazon S3 a partir de uma conta diferente. AWS 

## Pré-requisitos
<a name="jobs-s3-access-prerequisites"></a>

Para configurar o acesso entre contas para o Amazon EMR Serverless, conclua as tarefas enquanto estiver conectado a duas contas: AWS 
+ **`AccountA`**: essa é a conta da AWS na qual você criou uma aplicação do Amazon EMR Sem Servidor. Antes de configurar o acesso entre contas, tenha os seguintes itens prontos na conta:
  + Uma aplicação do Amazon EMR Sem Servidor em que você deseja executar trabalhos.
  + Um perfil de execução de trabalho que tem as permissões obrigatórias para executar trabalhos na aplicação. Para obter mais informações, consulte [Perfis de runtime do trabalho para o Amazon EMR Sem Servidor](security-iam-runtime-role.md).
+ **`AccountB`**: essa é a conta da AWS que contém o bucket do S3 que você deseja que os trabalhos do Amazon EMR Sem Servidor acessem. 

## Uso de uma política de bucket do S3 para acessar dados entre contas do S3
<a name="jobs-s3-access-how-to-s3-bucket-policy"></a>

Para acessar o bucket do S3 na account B usando a account A, anexe a política a seguir ao bucket do S3 na 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/*"
      ]
    }
  ]
}
```

------

Para obter mais informações sobre o acesso entre contas do S3 com políticas de bucket do S3, consulte [Exemplo 2: Proprietário do bucket concedendo permissões de bucket entre contas](https://docs.aws.amazon.com/AmazonS3/latest/userguide/example-walkthroughs-managing-access-example2.html) no *Guia do usuário do Amazon Simple Storage Service*.

## Uso de um perfil assumido para acessar dados entre contas do S3
<a name="jobs-s3-access-how-to-assumed-role"></a>

Outra forma de configurar o acesso entre contas para o Amazon EMR Serverless é com `AssumeRole` a ação do (). AWS Security Token Service AWS STS AWS STS é um serviço web global que permite solicitar credenciais temporárias com privilégios limitados para os usuários. Você pode fazer chamadas de API para o EMR Sem Servidor e o Amazon S3 com as credenciais de segurança temporárias criadas com `AssumeRole`.

As seguintes etapas ilustram como usar um perfil assumido para acessar dados entre contas do S3 no EMR Sem Servidor: 

1. Crie um bucket do Amazon S3, *cross-account-bucket*, na `AccountB`. Para mais informações, consulte [Criar um bucket](https://docs.aws.amazon.com/AmazonS3/latest/gsg/CreatingABucket.html) no *Guia do usuário do Amazon Simple Storage Service*. Se quiser ter acesso entre contas ao DynamoDB, você também pode criar uma tabela do DynamoDB na `AccountB`. Para obter mais informações, consulte [Criar uma tabela no DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/getting-started-step-1.html), no *Guia do desenvolvedor do Amazon DynamoDB*.

1. Crie um perfil do IAM `Cross-Account-Role-B` na `AccountB` que possa acessar o *cross-account-bucket*.

   1. Faça login no Console de gerenciamento da AWS e abra o console do IAM em [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/).

   1. Escolha **Perfis** e crie um novo perfil: `Cross-Account-Role-B`. Para obter mais informações sobre como criar perfis do IAM, consulte [Criar um perfil do IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create.html), no Guia do usuário do IAM.

   1. Crie uma política do IAM que especifique as permissões para `Cross-Account-Role-B` acessar o bucket *cross-account-bucket* do S3, como demonstra a instrução de política a seguir. Em seguida, anexe a política do IAM ao `Cross-Account-Role-B`. Para obter mais informações, consulte [Criar políticas do IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html) no *Guia do usuário do 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"
       }
     ]
   }
   ```

------

   Se o acesso ao DynamoDB for necessário, crie uma política do IAM que especifique as permissões de acesso à tabela do DynamoDB entre contas. Em seguida, anexe a política do IAM ao `Cross-Account-Role-B`. Para obter mais informações, consulte [Amazon DynamoDB: permite acesso a uma tabela específica](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_examples_dynamodb_specific-table.html) no *Guia do usuário do IAM*.

   A seguir, é apresentada uma política para permitir acesso à tabela `CrossAccountTable` do DynamoDB.

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

****  

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

------

1. Edite a relação de confiança para o perfil `Cross-Account-Role-B`.

   1. Para configurar o relacionamento de confiança para o perfil, escolha a guia **Relacionamentos de confiança** no console do IAM para o perfil `Cross-Account-Role-B` criado na Etapa 2.

   1. Selecione **Editar relação de confiança**.

   1. Insira o documento de política a seguir. Isso permite que `Job-Execution-Role-A` na `AccountA` assuma o perfil `Cross-Account-Role-B`.

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

****  

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

------

1. `Job-Execution-Role-A`Conceda `AccountA` a AWS STS `AssumeRole` permissão para assumir`Cross-Account-Role-B`.

   1. No console do IAM da AWS conta`AccountA`, selecione`Job-Execution-Role-A`.

   1. Adicione a instrução de política a seguir ao `Job-Execution-Role-A` para permitir a ação `AssumeRole` no perfil `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"
          }
        ]
      }
      ```

------

## Exemplos de perfis assumidos
<a name="jobs-s3-access-how-to-assumed-role-examples"></a>

Use um único perfil assumido para acessar todos os recursos do S3 em uma conta ou, com o Amazon EMR 6.11 e superior, configurar vários perfis do IAM a serem assumidos ao acessar diferentes buckets do S3 entre contas.

**Topics**
+ [Acesso aos recursos do S3 com um perfil assumido](#jobs-s3-access-how-to-assumed-role-single)
+ [Acesso a recursos do S3 com vários perfis assumidos](#jobs-s3-access-how-to-assumed-role-multiple)

### Acesso aos recursos do S3 com um perfil assumido
<a name="jobs-s3-access-how-to-assumed-role-single"></a>

**nota**  
Quando você configura um trabalho para usar um único perfil assumido, todos os recursos do S3 em todo o trabalho usam esse perfil, incluindo o script `entryPoint`.

Se você quiser usar um único perfil assumido para acessar todos os recursos do S3 na conta B, especifique as seguintes configurações:

1. Especifique a configuração `fs.s3.customAWSCredentialsProvider` do EMRFS para `com.amazonaws.emr.AssumeRoleAWSCredentialsProvider`.

1. No Spark, use `spark.emr-serverless.driverEnv.ASSUME_ROLE_CREDENTIALS_ROLE_ARN` e `spark.executorEnv.ASSUME_ROLE_CREDENTIALS_ROLE_ARN` para especificar as variáveis de ambiente no driver e nos executores.

1. No Hive, use `hive.emr-serverless.launch.env.ASSUME_ROLE_CREDENTIALS_ROLE_ARN`, `tez.am.emr-serverless.launch.env.ASSUME_ROLE_CREDENTIALS_ROLE_ARN` e `tez.task.emr-serverless.launch.env.ASSUME_ROLE_CREDENTIALS_ROLE_ARN` para especificar as variáveis de ambiente no driver do Hive, no primário de aplicação do Tez e nos contêineres de tarefas do Tez.

Os exemplos a seguir mostram como usar um perfil assumido para iniciar uma execução de trabalho do EMR Sem Servidor com acesso entre contas.

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

O exemplo a seguir mostra como usar um perfil assumido para iniciar a execução de um trabalho do Spark no EMR Sem Servidor com acesso entre contas ao 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 ]

O exemplo a seguir mostra como usar um perfil assumido para iniciar uma execução de trabalho do Hive no EMR Sem Servidor com acesso entre contas ao 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"
            }
        }]
    }'
```

------

### Acesso a recursos do S3 com vários perfis assumidos
<a name="jobs-s3-access-how-to-assumed-role-multiple"></a>

Com o EMR Sem Servidor nas versões 6.11.0 e posteriores, configure vários perfis do IAM a serem assumidos ao acessar diferentes buckets entre contas. Se você quiser acessar diferentes recursos do S3 com diferentes perfis assumidos na conta B, use as seguintes configurações ao iniciar a execução do trabalho:

1. Especifique a configuração `fs.s3.customAWSCredentialsProvider` do EMRFS para `com.amazonaws.emr.serverless.credentialsprovider.BucketLevelAssumeRoleCredentialsProvider`.

1. Especifique a configuração `fs.s3.bucketLevelAssumeRoleMapping` do EMRFS para definir o mapeamento do nome do bucket do S3 para o perfil do IAM na conta B a ser assumido. O valor deve estar no formato de `bucket1->role1;bucket2->role2`.

Por exemplo, use `arn:aws:iam::AccountB:role/Cross-Account-Role-B-1` para acessar o bucket `bucket1` e `arn:aws:iam::AccountB:role/Cross-Account-Role-B-2` para acessar o bucket `bucket2`. Os exemplos a seguir mostram como iniciar uma execução de trabalho do EMR Sem Servidor com acesso entre contas por meio de vários perfis assumidos.

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

O exemplo a seguir mostra como usar vários perfis assumidos para criar uma execução de trabalho do Spark no EMR Sem Servidor.

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

Os exemplos a seguir mostram como usar vários perfis assumidos para criar uma execução de trabalho do Hive no EMR Sem Servidor.

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

------