Je souhaite accorder à un utilisateur Gestion des identités et des accès AWS (AWS IAM) d'un autre compte l'accès à mon compartiment Amazon Simple Storage Service (Amazon S3). Je souhaite également accorder un accès intercompte afin que l'utilisateur puisse charger des objets dans mon compartiment Amazon S3.
Résolution
Remarque : si des erreurs surviennent lorsque vous exécutez des commandes de l'interface de la ligne de commande AWS (AWS CLI), consultez la section Résoudre des erreurs liées à l’AWS CLI. Vérifiez également que vous utilisez bien la version la plus récente de l'AWS CLI.
Pour autoriser un utilisateur d'un autre compte à charger des objets dans votre compartiment S3, mettez à jour les politiques IAM de l'utilisateur ou de son compte. Il est recommandé de contrôler l'accès via le compte, avec la propriété des objets imposée par le propriétaire du compartiment.
Si votre compartiment utilise des listes de contrôle d'accès (ACL) au lieu de la propriété imposée par le propriétaire du compartiment, envisagez la configuration Amazon S3 BucketOwnerEnforced, qui désactive les ACL. Vérifiez si votre compartiment utilise des ACL à l'aide de la commande get-bucket-ownership-controls suivante :
aws s3api get-bucket-ownership-controls --bucket DOC-EXAMPLE-BUCKET
Remarque : remplacez DOC-EXAMPLE-BUCKET par le nom de votre compartiment.
Si la sortie affiche BucketOwnerPreferred ou ObjectWriter au lieu de BucketOwnerEnforced, votre compartiment utilise des ACL. L'utilisateur qui a chargé le fichier, et non le propriétaire du compartiment, est propriétaire des objets chargés entre comptes.
Propriété des objets imposée par le propriétaire du compartiment
Pour accorder l'accès à un compartiment au niveau du compte, utilisez la propriété d'objet imposée par le propriétaire du compartiment. Pour accorder à un utilisateur IAM appartenant au compte A l’accès pour charger des objets dans un compartiment S3 appartenant au compte B, vous devez suivre ces étapes :
-
Dans le compte A, créez une politique IAM pour les utilisateurs qui ont besoin d'accéder au compartiment du compte B :
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:PutObject",
"s3:ListBucket",
"s3:GetBucketLocation"
],
"Resource": [
"arn:aws:s3:::DOC-EXAMPLE-BUCKET",
"arn:aws:s3:::DOC-EXAMPLE-BUCKET/*"
]
}
]
}
Remarque : remplacez DOC-EXAMPLE-BUCKET par le nom de votre compartiment.
-
Dans le compte A, prenez note de la valeur Amazon Resource Name (ARN) de l'utilisateur IAM.
-
À partir du compte B, créez une stratégie de compartiment qui accorde à l'utilisateur intercompte l’autorisation de charger des objets :
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "CrossAccountUploadAccess",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::111122223333:user/UploadData"
},
"Action": [
"s3:PutObject"
],
"Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*"
},
{
"Sid": "CrossAccountListAccess",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::111122223333:user/UploadData"
},
"Action": [
"s3:ListBucket",
"s3:GetBucketLocation"
],
"Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET"
}
]
}
Remarque : pour la valeur de Principal, veillez à saisir l'ARN de l'utilisateur IAM dans le compte A. Remplacez DOC-EXAMPLE-BUCKET par le nom de votre compartiment.
Propriété des objets imposée par l’ACL
Pour accorder l'accès à un compartiment qui utilise la propriété d'objet imposée par l'ACL, accordez l'autorisation PutObjectAcl dans la stratégie du compartiment et dans la politique utilisateur IAM.
-
À partir du compte A, attachez une politique à l'utilisateur IAM. Cette politique doit autoriser l'utilisateur à exécuter les actions PutObject et PutObjectAcl dans le compartiment du compte B :
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:PutObject",
"s3:PutObjectAcl",
"s3:ListBucket",
"s3:GetBucketLocation"
],
"Resource": [
"arn:aws:s3:::DOC-EXAMPLE-BUCKET",
"arn:aws:s3:::DOC-EXAMPLE-BUCKET/*"
]
}
]
}
Remarque : avant de spécifier une ACL pour le chargement, vous devez disposer de l'autorisation s3:PutObjectAcl. Dans le cas contraire, vous obtiendrez le message d'erreur Access Denied lors du chargement d’un objet avec une ACL telle que bucket-owner-full control.
-
Dans le compte B, attachez une stratégie de compartiment qui autorise l'utilisateur IAM du compte A à exécuter les actions s3:PutObject et s3:PutObjectAcl :
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "DelegateS3ObjectAccess",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::999999999999:user/UploadData"
},
"Action": [
"s3:PutObject",
"s3:PutObjectAcl"
],
"Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*"
},
{
"Sid": "DelegateS3BucketAccess",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::111122223333:user/UploadData"
},
"Action": [
"s3:ListBucket",
"s3:GetBucketLocation"
],
"Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET"
}
]
}
Informations connexes
Exemple 2 : propriétaire d'un compartiment accordant des autorisations intercomptes sur un compartiment