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 outro AWS conta da EMR Serverless
Você pode executar trabalhos do Amazon EMR Serverless a partir de um AWS conta e configure-os para acessar dados em buckets do Amazon S3 que pertencem a outra AWS conta. Esta página descreve como configurar o acesso entre contas ao S3 a partir do EMR Serverless.
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 outra AWS conta.
Pré-requisitos
Para configurar o acesso entre contas para o Amazon EMR Serverless, você deve concluir as tarefas enquanto estiver conectado a duas AWS contas:
-
AccountA
— Este é o AWS conta na qual você criou um aplicativo Amazon EMR Serverless. Antes de configurar o acesso entre contas, você deve ter o seguinte pronto nessa conta:-
Um aplicativo Amazon EMR Serverless no qual você deseja executar trabalhos.
-
Uma função de execução de tarefas que tem as permissões necessárias para executar tarefas no aplicativo. Para obter mais informações, consulte Funções de tempo de execução de trabalho para Amazon EMR Serverless.
-
-
AccountB
— Este é o AWS conta que contém o bucket do S3 que você deseja que seus trabalhos do Amazon EMR Serverless acessem.
Use uma política de bucket do S3 para acessar dados do S3 entre contas
Para acessar o bucket do S3 em account B from account A, anexe a seguinte política ao bucket do S3 em 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
/*" ] } ] }
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 no Guia do usuário do Amazon Simple Storage Service.
Use uma função assumida para acessar dados do S3 de várias contas
Outra forma de configurar o acesso entre contas para o Amazon EMR Serverless é com a ação do AssumeRole
AWS Security Token Service (AWS STS). AWS STS é um serviço web global que permite solicitar credenciais temporárias com privilégios limitados para usuários. Você pode fazer API chamadas para o EMR Serverless e o Amazon S3 com as credenciais de segurança temporárias com as quais você cria. AssumeRole
As etapas a seguir ilustram como usar uma função assumida para acessar dados do S3 entre contas a partir do Serverless: EMR
-
Crie um bucket Amazon S3,
cross-account-bucket
, emAccountB
. Para obter mais informações, consulte Criar um bucket no Guia do usuário do Amazon Simple Storage Service. Se desejar ter acesso entre contas para o DynamoDB, você também pode criar uma tabela do DynamoDB naAccountB
. Para obter mais informações, consulte Criação de uma tabela do DynamoDB no Amazon DynamoDB Developer Guide. -
Crie uma
Cross-Account-Role-B
IAM funçãoAccountB
que possa acessar ocross-account-bucket
.Faça login no AWS Management Console e abra o IAM console em https://console.aws.amazon.com/iam/
. -
Escolha Perfis e crie um novo perfil:
Cross-Account-Role-B
. Para obter mais informações sobre como criar IAM funções, consulte Criação de IAM funções no Guia IAM do usuário. -
Crie uma IAM política que especifique as permissões
Cross-Account-Role-B
para acessar ocross-account-bucket
Bucket S3, conforme demonstra a declaração de política a seguir. Em seguida, anexe a IAM políticaCross-Account-Role-B
a. Para obter mais informações, consulte Criação de IAM políticas no Guia IAM do usuário.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "s3:*", "Resource": [ "arn:aws:s3:::
cross-account-bucket
", "arn:aws:s3:::cross-account-bucket
/*" ] } ] }Se você precisar de acesso ao DynamoDB, crie IAM uma política que especifique as permissões para acessar a tabela do DynamoDB entre contas. Em seguida, anexe a IAM política
Cross-Account-Role-B
a. Para obter mais informações, consulte Amazon DynamoDB: Permite acesso a uma tabela específica no IAM Guia do usuário.Veja a seguir uma política para permitir o acesso à tabela do DynamoDB
CrossAccountTable
.{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "dynamodb:*", "Resource": "arn:aws:dynamodb:MyRegion:
AccountB
:table/CrossAccountTable
" } ] } -
Edite a relação de confiança para o perfil
Cross-Account-Role-B
.-
Para configurar a relação de confiança para a função, escolha a guia Relações de Confiança no IAM console para a função
Cross-Account-Role-B
que você criou na Etapa 2. -
Selecione Editar relação de confiança.
-
Adicione o seguinte documento de política. Isso permite que
Job-Execution-Role-A
AccountA
eu assuma oCross-Account-Role-B
papel.{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::
AccountA
:role/Job-Execution-Role-A" }, "Action": "sts:AssumeRole" } ] }
-
-
Grant
Job-Execution-Role-A
AccountA
no AWS STSAssumeRole
permissão para assumirCross-Account-Role-B
.-
No IAM console para AWS conta
AccountA
, selecioneJob-Execution-Role-A
. -
Adicione a instrução de política a seguir ao
Job-Execution-Role-A
para permitir a açãoAssumeRole
no perfilCross-Account-Role-B
.{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": "arn:aws:iam::
AccountB
:role/Cross-Account-Role-B" } ] }
-
Exemplos de funções assumidas
Você pode usar uma única função assumida para acessar todos os recursos do S3 em uma conta ou, com o Amazon EMR 6.11 e superior, você pode configurar várias IAM funções a serem assumidas ao acessar diferentes buckets do S3 entre contas.
Tópicos
Acesse os recursos do S3 com uma função assumida
nota
Quando você configura um trabalho para usar uma única função assumida, todos os recursos do S3 em todo o trabalho usam essa função, incluindo o entryPoint
script.
Se você quiser usar uma única função assumida para acessar todos os recursos do S3 na conta B, especifique as seguintes configurações:
-
Especifique
fs.s3.customAWSCredentialsProvider
a EMRFS configuração paraspark.hadoop.fs.s3.customAWSCredentialsProvider=com.amazonaws.emr.AssumeRoleAWSCredentialsProvider
. -
Para o Spark, use
spark.emr-serverless.driverEnv.ASSUME_ROLE_CREDENTIALS_ROLE_ARN
e especifiquespark.executorEnv.ASSUME_ROLE_CREDENTIALS_ROLE_ARN
as variáveis de ambiente no driver e nos executores. -
Para o Hive
hive.emr-serverless.launch.env.ASSUME_ROLE_CREDENTIALS_ROLE_ARN
tez.am.emr-serverless.launch.env.ASSUME_ROLE_CREDENTIALS_ROLE_ARN
, use etez.task.emr-serverless.launch.env.ASSUME_ROLE_CREDENTIALS_ROLE_ARN
para especificar as variáveis de ambiente no driver do Hive, no mestre do aplicativo Tez e nos contêineres de tarefas do Tez.
Os exemplos a seguir mostram como usar uma função assumida para iniciar uma execução de trabalho EMR sem servidor com acesso entre contas.
Acesse recursos do S3 com várias funções assumidas
Com as versões 6.11.0 e posteriores do EMR Serverless, você pode configurar várias IAM funções a serem assumidas ao acessar diferentes buckets entre contas. Se você quiser acessar diferentes recursos do S3 com diferentes funções assumidas na conta B, use as seguintes configurações ao iniciar a execução do trabalho:
-
Especifique
fs.s3.customAWSCredentialsProvider
a EMRFS configuração paracom.amazonaws.emr.serverless.credentialsprovider.BucketLevelAssumeRoleCredentialsProvider
. -
Especifique
fs.s3.bucketLevelAssumeRoleMapping
a EMRFS configuração para definir o mapeamento do nome do bucket do S3 para a IAM função na conta B a ser assumida. O valor deve estar no formato debucket1->role1;bucket2->role2
.
Por exemplo, você pode usar arn:aws:iam::
para acessar o bucket AccountB
:role/Cross-Account-Role-B-1bucket1
e usar arn:aws:iam::
para acessar o bucketAccountB
:role/Cross-Account-Role-B-2bucket2
. Os exemplos a seguir mostram como iniciar uma execução de trabalho EMR sem servidor com acesso entre contas por meio de várias funções assumidas.