Configuração do acesso entre contas para o Amazon EMR no EKS
Você pode configurar o acesso entre contas para o Amazon EMR no EKS. O acesso entre contas possibilita que os usuários de uma conta da AWS executem trabalhos do Amazon EMR no EKS e acessem os dados subjacentes que pertencem a outra conta da AWS.
Pré-requisitos
Para configurar o acesso entre contas para o Amazon EMR no EKS, você concluirá tarefas enquanto estiver conectado às seguintes contas da AWS:
AccountA: uma conta da AWS na qual você criou um cluster virtual do Amazon EMR no EKS ao registrar o Amazon EMR com um namespace em um cluster do EKS.AccountB: uma conta da AWS que contém um bucket do Amazon S3 ou uma tabela do DynamoDB que você deseja que os trabalhos do Amazon EMR no EKS acessem.
Você deve ter o seguinte em suas contas da AWS antes de configurar o acesso entre contas:
Um cluster virtual do Amazon EMR no EKS na
AccountAem que deseja executar trabalhos.Um perfil de execução de trabalho na
AccountAque tem as permissões obrigatórias para executar trabalhos no cluster virtual. Para obter mais informações, consulte Criação de um perfil de execução de trabalho e Uso de perfis de execução de trabalho com o Amazon EMR no EKS.
Como acessar um bucket do Amazon S3 ou uma tabela do DynamoDB entre contas
Para configurar o acesso entre contas do Amazon EMR no EKS, conclua as etapas apresentadas a seguir.
Crie um bucket do Amazon S3,
cross-account-bucket, naAccountB. Para mais informações, consulte Criar um bucket. 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 Creating a DynamoDB table.Crie um perfil do IAM
Cross-Account-Role-BnaAccountBque possa acessar ocross-account-bucket.Faça login no console do IAM.
Escolha Perfis e crie um novo perfil:
Cross-Account-Role-B. Para obter mais informações sobre como criar perfis do IAM, consulte Criação de perfis do IAM no Guia do usuário do IAM.Crie uma política do IAM que especifique as permissões para
Cross-Account-Role-Bacessar o bucketcross-account-bucketdo S3, como demonstra a instrução de política a seguir. Em seguida, anexe a política do IAM aoCross-Account-Role-B. Para obter mais informações, consulte Creating a New Policy no Guia do usuário do IAM.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 Criar uma tabela do DynamoDB no Guia do usuário do IAM.A seguir, é apresentada uma política de acesso a uma tabela do DynamoDB,
CrossAccountTable.
Edite a relação de confiança para o perfil
Cross-Account-Role-B.Para configurar a relação de confiança para o perfil, escolha a guia Relações de confiança no console do IAM para o perfil criado na Etapa 2:
Cross-Account-Role-B.Selecione Editar relação de confiança.
Adicione o documento de política a seguir, que permite que
Job-Execution-Role-AnaAccountAassuma esse perfilCross-Account-Role-B.
Conceda que o
Job-Execution-Role-AnaAccountAtenha a permissão sts assume-role para assumirCross-Account-Role-B.No console do IAM para a conta
AccountAda AWS, selecioneJob-Execution-Role-A.Adicione a instrução de política a seguir ao
Job-Execution-Role-Apara permitir a açãoAssumeRoleno perfilCross-Account-Role-B.
Para obter acesso ao Amazon S3, defina os parâmetros
spark-submit(spark conf) apresentados a seguir ao enviar o trabalho para o Amazon EMR no EKS.nota
Por padrão, o EMRFS usa o perfil de execução do trabalho para acessar o bucket do S3 usando o trabalho. Entretanto, quando
customAWSCredentialsProvideré definido comoAssumeRoleAWSCredentialsProvider, o EMRFS usa o perfil correspondente que você especifica comASSUME_ROLE_CREDENTIALS_ROLE_ARNem vez doJob-Execution-Role-Apara obter acesso ao 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 \
nota
Você deve definir
ASSUME_ROLE_CREDENTIALS_ROLE_ARNpara oenvdo executor e do driver na configuração de trabalho do Spark.Para obter acesso entre contas do DynamoDB, você deve definir
--conf spark.dynamodb.customAWSCredentialsProvider=com.amazonaws.emr.AssumeRoleAWSCredentialsProvider.Execute o trabalho do Amazon EMR no EKS com acesso entre contas, como demonstrado pelo exemplo a seguir.
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" }}}'