Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Accès aux données S3 dans un autre AWS compte depuis EMR Serverless
Vous pouvez exécuter des tâches Amazon EMR Serverless à partir d'un AWS et configurez-les pour accéder aux données contenues dans des compartiments Amazon S3 appartenant à un autre AWS . Cette page décrit comment configurer l'accès entre comptes à S3 depuis EMR Serverless.
Les tâches exécutées sur EMR Serverless peuvent utiliser une politique de compartiment S3 ou un rôle assumé pour accéder aux données d'Amazon S3 à partir d'un autre AWS .
Prérequis
Pour configurer l'accès entre comptes pour Amazon EMR Serverless, vous devez effectuer des tâches en étant connecté à deux AWS comptes :
-
AccountA
— C'est le AWS compte sur lequel vous avez créé une application Amazon EMR Serverless. Avant de configurer l'accès entre comptes, vous devez disposer des éléments suivants sur ce compte :-
Une application Amazon EMR Serverless dans laquelle vous souhaitez exécuter des tâches.
-
Rôle d'exécution de tâches disposant des autorisations requises pour exécuter des tâches dans l'application. Pour de plus amples informations, veuillez consulter Rôles d'exécution des tâches pour Amazon EMR Serverless.
-
-
AccountB
— C'est le AWS compte contenant le compartiment S3 auquel vous souhaitez que vos tâches Amazon EMR Serverless accèdent.
Utiliser une politique de compartiment S3 pour accéder aux données S3 entre comptes
Pour accéder au compartiment S3 dans account B from account A, attachez la politique suivante au compartiment S3 dans 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
/*" ] } ] }
Pour plus d'informations sur l'accès entre comptes S3 avec les politiques relatives aux compartiments S3, consultez l'exemple 2 : le propriétaire du compartiment accorde des autorisations de compartiment entre comptes dans le guide de l'utilisateur d'Amazon Simple Storage Service.
Utiliser un rôle assumé pour accéder aux données S3 entre comptes
Une autre méthode pour configurer l'accès entre comptes pour Amazon EMR Serverless consiste à utiliser l'AssumeRole
action du AWS Security Token Service (AWS STS). AWS STS est un service Web mondial qui vous permet de demander des informations d'identification temporaires à privilèges limités pour les utilisateurs. Vous pouvez API passer des appels vers EMR Serverless et Amazon S3 avec les informations d'identification de sécurité temporaires que vous avez créées avecAssumeRole
.
Les étapes suivantes illustrent comment utiliser un rôle assumé pour accéder aux données S3 entre comptes depuis EMR Serverless :
-
Créez un compartiment Amazon S3,
cross-account-bucket
, dansAccountB
. Pour plus d'informations, consultez la section Création d'un compartiment dans le guide de l'utilisateur d'Amazon Simple Storage Service. Si vous souhaitez bénéficier d'un accès intercompte à DynamoDB, vous pouvez également créer une table DynamoDB dansAccountB
. Pour plus d'informations, consultez la section Création d'une table DynamoDB dans le manuel Amazon DynamoDB Developer Guide. -
Créez un
Cross-Account-Role-B
IAM rôle dansAccountB
lequel vous pouvez accéder aucross-account-bucket
.Connectez-vous au AWS Management Console et ouvrez la IAM console à l'adresse https://console.aws.amazon.com/iam/
. -
Choisissez Rôles et créez un nouveau rôle :
Cross-Account-Role-B
. Pour plus d'informations sur la création de IAM rôles, consultez la section Création de IAM rôles dans le Guide de IAM l'utilisateur. -
Créez une IAM politique qui spécifie les autorisations
Cross-Account-Role-B
pour accéder aucross-account-bucket
compartiment S3, comme le montre la déclaration de politique suivante. Attachez ensuite la IAM politique àCross-Account-Role-B
. Pour plus d'informations, consultez la section Création IAM de politiques dans le guide de IAM l'utilisateur.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "s3:*", "Resource": [ "arn:aws:s3:::
cross-account-bucket
", "arn:aws:s3:::cross-account-bucket
/*" ] } ] }Si vous avez besoin d'un accès DynamoDB, créez IAM une politique qui spécifie les autorisations d'accès à la table DynamoDB multicomptes. Attachez ensuite la IAM politique à
Cross-Account-Role-B
. Pour plus d'informations, consultez Amazon DynamoDB : autorise l'accès à une table spécifique dans IAM le guide de l'utilisateur.Voici une politique permettant d'autoriser l'accès à la table DynamoDB
CrossAccountTable
.{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "dynamodb:*", "Resource": "arn:aws:dynamodb:MyRegion:
AccountB
:table/CrossAccountTable
" } ] } -
Modifiez la relation de confiance du rôle
Cross-Account-Role-B
.-
Pour configurer la relation de confiance pour le rôle, choisissez l'onglet Relations de confiance dans la IAM console pour le rôle
Cross-Account-Role-B
que vous avez créé à l'étape 2. -
Sélectionnez Modifier la relation de confiance.
-
Ajoutez le document de politique suivant. Cela permet
AccountA
àJob-Execution-Role-A
in d'assumer leCross-Account-Role-B
rôle.{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::
AccountA
:role/Job-Execution-Role-A" }, "Action": "sts:AssumeRole" } ] }
-
-
Subvention
Job-Execution-Role-A
dansAccountA
le AWS STSAssumeRole
autorisation d'assumerCross-Account-Role-B
.-
Dans la IAM console pour AWS compte
AccountA
, sélectionnezJob-Execution-Role-A
. -
Ajoutez la déclaration de politique générale suivante au rôle
Job-Execution-Role-A
pour autoriser l'actionAssumeRole
sur le rôleCross-Account-Role-B
.{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": "arn:aws:iam::
AccountB
:role/Cross-Account-Role-B" } ] }
-
Exemples de rôles supposés
Vous pouvez utiliser un seul rôle assumé pour accéder à toutes les ressources S3 d'un compte, ou avec Amazon EMR 6.11 et versions ultérieures, vous pouvez configurer plusieurs IAM rôles à assumer lorsque vous accédez à différents compartiments S3 entre comptes.
Rubriques
Accédez aux ressources S3 avec un rôle assumé
Note
Lorsque vous configurez une tâche pour utiliser un seul rôle assumé, toutes les ressources S3 de la tâche utilisent ce rôle, y compris le entryPoint
script.
Si vous souhaitez utiliser un seul rôle assumé pour accéder à toutes les ressources S3 du compte B, spécifiez les configurations suivantes :
-
Spécifiez EMRFS la configuration
fs.s3.customAWSCredentialsProvider
àspark.hadoop.fs.s3.customAWSCredentialsProvider=com.amazonaws.emr.AssumeRoleAWSCredentialsProvider
. -
Pour Spark, utilisez
spark.emr-serverless.driverEnv.ASSUME_ROLE_CREDENTIALS_ROLE_ARN
etspark.executorEnv.ASSUME_ROLE_CREDENTIALS_ROLE_ARN
pour spécifier les variables d'environnement sur le pilote et les exécuteurs. -
Pour Hive, utilisez
hive.emr-serverless.launch.env.ASSUME_ROLE_CREDENTIALS_ROLE_ARN
tez.am.emr-serverless.launch.env.ASSUME_ROLE_CREDENTIALS_ROLE_ARN
, et pour spécifier les variablestez.task.emr-serverless.launch.env.ASSUME_ROLE_CREDENTIALS_ROLE_ARN
d'environnement sur le pilote Hive, le maître d'application Tez et les conteneurs de tâches Tez.
Les exemples suivants montrent comment utiliser un rôle assumé pour démarrer une tâche EMR sans serveur exécutée avec un accès entre comptes.
Accédez aux ressources S3 avec plusieurs rôles assumés
Avec les versions 6.11.0 et supérieures EMR sans serveur, vous pouvez configurer plusieurs IAM rôles à assumer lorsque vous accédez à différents buckets multicomptes. Si vous souhaitez accéder à différentes ressources S3 avec différents rôles assumés dans le compte B, utilisez les configurations suivantes lorsque vous démarrez l'exécution de la tâche :
-
Spécifiez EMRFS la configuration
fs.s3.customAWSCredentialsProvider
àcom.amazonaws.emr.serverless.credentialsprovider.BucketLevelAssumeRoleCredentialsProvider
. -
Spécifiez la EMRFS configuration
fs.s3.bucketLevelAssumeRoleMapping
pour définir le mappage entre le nom du compartiment S3 et le IAM rôle à assumer dans le compte B. La valeur doit être au format debucket1->role1;bucket2->role2
.
Par exemple, vous pouvez utiliser arn:aws:iam::
pour accéder au bucket AccountB
:role/Cross-Account-Role-B-1bucket1
et utiliser arn:aws:iam::
pour accéder au bucketAccountB
:role/Cross-Account-Role-B-2bucket2
. Les exemples suivants montrent comment démarrer une tâche EMR sans serveur exécutée avec un accès entre comptes via plusieurs rôles assumés.