Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
Acceso a los datos de S3 en otra AWS cuenta desde EMR Serverless
Puede ejecutar trabajos de Amazon EMR Serverless desde una AWS cuenta y configurarlos para acceder a los datos de los buckets de Amazon S3 que pertenezcan a otra cuenta. AWS En esta página se describe cómo configurar el acceso entre cuentas a S3 desde EMR sin servidor.
Los trabajos que se ejecutan en EMR Serverless pueden utilizar una política de bucket de S3 o un rol asumido para acceder a los datos de Amazon S3 desde una cuenta diferente. AWS
Requisitos previos
Para configurar el acceso multicuenta para Amazon EMR Serverless, debe completar las tareas con la sesión iniciada en dos cuentas: AWS
-
AccountA
: esta es la cuenta de AWS en la que ha creado una aplicación Amazon EMR sin servidor. Antes de configurar el acceso entre cuentas deberá tener preparado en su cuenta lo siguiente:-
Una aplicación de Amazon EMR sin servidor en la que desee ejecutar los trabajos.
-
Un rol de ejecución de trabajos que tenga los permisos necesarios para ejecutar trabajos en la aplicación. Para obtener más información, consulte Roles en tiempo de ejecución de trabajo para Amazon EMR sin servidor.
-
-
AccountB
: esta es la cuenta de AWS que contiene el bucket de S3 al que desea que accedan sus trabajos de Amazon EMR sin servidor.
Uso de una política de buckets de S3 para acceder a los datos de S3 entre cuentas
Para acceder al bucket de S3, en account B desde account A, adjunte la siguiente política al depósito de S3 en 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 obtener más información sobre cómo acceder entre cuentas con políticas de buckets de S3, consulte Ejemplo 2: propietario de bucket que concede permisos de bucket entre cuentas en la Guía del usuario de Amazon Simple Storage Service.
Uso de un rol asumido para acceder a los datos de S3 entre cuentas
Otra forma de configurar el acceso multicuenta para Amazon EMR Serverless es con AssumeRole
la acción de AWS Security Token Service ().AWS STS AWS STS es un servicio web global que le permite solicitar credenciales temporales con privilegios limitados para los usuarios. Puede realizar llamadas de API a EMR sin servidor y Amazon S3 con las credenciales de seguridad temporales que usted crea con AssumeRole
.
Los siguientes pasos ilustran cómo utilizar un rol asumido para acceder a los datos de S3 entre cuentas desde EMR sin servidor:
-
Cree un bucket de Amazon S3,
cross-account-bucket
, en laAccountB
. Para obtener más información, consulte Creación de un bucket en la Guía del usuario de Amazon Simple Storage Service. Si desea tener acceso entre cuentas a DynamoDB, también puede crear una tabla de DynamoDB en laAccountB
. Para obtener más información, consulte Creación de una tabla de DynamoDB en la Guía para desarrolladores de Amazon DynamoDB. -
Cree un rol de IAM
Cross-Account-Role-B
en laAccountB
que pueda acceder across-account-bucket
.Inicie sesión en la consola de IAM AWS Management Console y ábrala en. https://console.aws.amazon.com/iam/
-
Elija Roles y, a continuación, cree un nuevo rol:
Cross-Account-Role-B
. Para obtener más información acerca de cómo crear un rol de IAM, consulte Creación de roles de IAM en la Guía del usuario de IAM. -
Cree una política de IAM que especifique los permisos del
Cross-Account-Role-B
para acceder al bucket de S3cross-account-bucket
, tal como se muestra en la siguiente instrucción de política. Adjunte la política de IAM alCross-Account-Role-B
. Para obtener más información, consulte Creación de políticas de IAM en la Guía del usuario de IAM.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "s3:*", "Resource": [ "arn:aws:s3:::
cross-account-bucket
", "arn:aws:s3:::cross-account-bucket
/*" ] } ] }Si requiere acceso a DynamoDB, cree una política de IAM que especifique los permisos para acceder a la tabla de DynamoDB entre cuentas. Adjunte la política de IAM al
Cross-Account-Role-B
. Para obtener más información, consulte Amazon DynamoDB: permite el acceso a una tabla específica en la Guía del usuario de IAM.A continuación, se presenta una política para acceder a una tabla de DynamoDB
CrossAccountTable
.{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "dynamodb:*", "Resource": "arn:aws:dynamodb:MyRegion:
AccountB
:table/CrossAccountTable
" } ] } -
Edite la relación de confianza del rol
Cross-Account-Role-B
.-
Para configurar la relación de confianza del rol, elija la pestaña Relaciones de confianza en la consola de IAM para el rol
Cross-Account-Role-B
creado en el paso 2. -
Seleccione Editar la relación de confianza.
-
Añada el siguiente documento de política. Esto permite que
Job-Execution-Role-A
enAccountA
asuma el rolCross-Account-Role-B
.{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::
AccountA
:role/Job-Execution-Role-A" }, "Action": "sts:AssumeRole" } ] }
-
-
Otorgue
Job-Execution-Role-A
AccountA
el AWS STSAssumeRole
permiso para asumirCross-Account-Role-B
.-
En la consola de IAM de la AWS cuenta
AccountA
, seleccioneJob-Execution-Role-A
. -
Agregue la siguiente instrucción de política al
Job-Execution-Role-A
para denegar la acciónAssumeRole
en el rolCross-Account-Role-B
.{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": "arn:aws:iam::
AccountB
:role/Cross-Account-Role-B" } ] }
-
Ejemplos de roles asumidos
Puede usar una solo rol asumido para acceder a todos los recursos de S3 de una cuenta o, con Amazon EMR 6.11 y versiones posteriores, puede configurar varios roles de IAM para asumirlos al acceder a diferentes buckets de S3 entre cuentas.
Temas
Acceso a los recursos de S3 con un rol asumido
nota
Al configurar un trabajo para usar un único rol asumido, todos los recursos de S3 del trabajo usan ese rol, incluido el script de entryPoint
.
Si desea utilizar un único rol asumido para acceder a todos los recursos de S3 de la cuenta B, especifique las siguientes configuraciones:
-
Especifique la configuración
fs.s3.customAWSCredentialsProvider
paraspark.hadoop.fs.s3.customAWSCredentialsProvider=com.amazonaws.emr.AssumeRoleAWSCredentialsProvider
de EMRFS. -
En el caso de Spark, utilice
spark.emr-serverless.driverEnv.ASSUME_ROLE_CREDENTIALS_ROLE_ARN
yspark.executorEnv.ASSUME_ROLE_CREDENTIALS_ROLE_ARN
para especificar las variables de entorno del controlador y los ejecutores. -
Para Hive, utilice
hive.emr-serverless.launch.env.ASSUME_ROLE_CREDENTIALS_ROLE_ARN
,tez.am.emr-serverless.launch.env.ASSUME_ROLE_CREDENTIALS_ROLE_ARN
ytez.task.emr-serverless.launch.env.ASSUME_ROLE_CREDENTIALS_ROLE_ARN
para especificar las variables de entorno en el controlador Hive, el maestro de aplicaciones de Tez y los contenedores de tareas de Tez.
Los siguientes ejemplos muestran cómo usar un rol asumido para iniciar una ejecución de un trabajo EMR sin servidor con acceso entre cuentas.
El siguiente ejemplo muestra cómo usar un rol asumido para iniciar la ejecución de un trabajo de EMR sin servidor Spark con acceso entre cuentas 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": "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"
}
}]
}'
Acceso a los recursos de S3 con varios roles asumidos
Con las versiones 6.11.0 y posteriores de EMR sin servidor, puede configurar varios roles de IAM para que los asuma al acceder a diferentes buckets entre cuentas. Si desea acceder a diferentes recursos de S3 con diferentes roles asumidos en la cuenta B, utilice las siguientes configuraciones al iniciar la ejecución del trabajo:
-
Especifique la configuración
fs.s3.customAWSCredentialsProvider
paracom.amazonaws.emr.serverless.credentialsprovider.BucketLevelAssumeRoleCredentialsProvider
de EMRFS. -
Especifique la configuración
fs.s3.bucketLevelAssumeRoleMapping
de EMRFS para definir la asignación desde el nombre del bucket de S3 hasta el rol de IAM que se va a asumir en la cuenta B. El formato del valor debe serbucket1->role1;bucket2->role2
.
Por ejemplo, puede usar arn:aws:iam::
para acceder al bucket AccountB
:role/Cross-Account-Role-B-1bucket1
y usar arn:aws:iam::
para acceder al bucket AccountB
:role/Cross-Account-Role-B-2bucket2
. Los siguientes ejemplos muestran cómo iniciar una ejecución de trabajo de EMR sin servidor con acceso entre cuentas a través de varios roles asumidos.
El siguiente ejemplo muestra cómo usar varios roles asumidos para crear la ejecución de un trabajo de EMR sin servidor 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"
}
}]
}'