Pourquoi ne puis-je pas copier un objet entre deux compartiments Amazon S3 ?

Date de la dernière mise à jour : 27/03/2020

J'essaie de copier un objet depuis un compartiment Amazon Simple Storage Service (Amazon S3) vers un autre, mais cela ne fonctionne pas. Comment résoudre ce problème ?

Brève description

Pour résoudre les problèmes liés à la copie d'un objet d'un compartiment à un autre, vérifiez les points suivants :

  • Stratégies de compartiment et stratégie AWS Identity and Access Management (IAM)
  • Propriétaire de l'objet
  • Chiffrement AWS Key Management Service (AWS KMS)
  • Classe de stockage Amazon Simple Storage Service Glacier (Amazon S3 Glacier)
  • Paiement par le demandeur activé sur le compartiment
  • Stratégie de contrôle du service AWS Organizations
  • Problèmes de demande entre régions avec des points de terminaison Amazon Virtual Private Cloud (VPC) pour Amazon S3

Résolution

Stratégies de compartiment et stratégies IAM

Pour copier un objet entre des compartiments, vous devez vous assurer que les autorisations appropriées sont bien configurées. Pour copier un objet entre des compartiments d'un même compte AWS, vous pouvez définir des autorisations à l'aide de stratégies IAM. Pour copier un objet entre des compartiments de différents comptes, vous devez définir des autorisations sur les stratégies IAM et les stratégies de compartiment pertinentes.

Remarque : pour obtenir des instructions sur la façon de modifier une stratégie de compartiment, consultez Comment ajouter une stratégie de compartiment S3 ? Pour plus de consignes sur la modification des permissions pour un utilisateur IAM, consultez Modification des autorisations pour un utilisateur IAM. Pour obtenir des instructions sur la façon de modifier les autorisations d'un rôle IAM, consultez Modification d'un rôle.

Confirmez les autorisations requises suivantes :

  • Au minimum, votre identité IAM (utilisateur ou rôle) doit disposer d'autorisations pour les actions s3:ListBucket et s3:GetObject sur le compartiment source. Si les compartiments se trouvent sur le même compte, c’est que vous pouvez définir ces autorisations à l'aide des stratégies de votre identité IAM. Si les compartiments se trouvent sur des comptes différents, vous devez définir ces autorisations à l'aide de la stratégie de compartiment et des stratégies de votre identité IAM.
  • Au minimum, votre identité IAM doit disposer d'autorisations pour les actions s3:ListBucket et s3:PutObject sur le compartiment de destination. Si les compartiments se trouvent sur le même compte, vous pouvez définir ces autorisations à l'aide des stratégies de votre identité IAM. Si les compartiments se trouvent sur des comptes différents, définissez ces autorisations à l'aide de la stratégie de compartiment et des stratégies de votre identité IAM.
  • Passez en revue les stratégies de compartiment et les stratégies IAM pertinentes afin de confirmer qu'il n'existe aucune déclaration de refus explicite en conflit avec les autorisations dont vous avez besoin. Un refus explicite remplace une autorisation explicite.
  • Pour des opérations spécifiques, vérifiez que votre identité IAM dispose des autorisations pour toutes les actions nécessaires au sein de l'opération. Par exemple, pour exécuter la commande aws s3 cp, vous avez besoin de l'autorisation d'accès à s3:GetObject and s3:PutObject. Pour exécuter la commande aws s3 cp avec l'option -recursive vous avez besoin de l'autorisation d'accès à s3:GetObject, s3:PutObject et s3:ListBucket. Pour exécuter la commande aws s3 sync, vous avez besoin de l'autorisation d'accès à s3:GetObject, s3:PutObject, et à s3:ListBucket.
    Remarque : si vous utilisez l'opération d'API AssumeRole pour accéder à Amazon S3, vous devez également vérifier que la relation d'approbation est configurée correctement.
  • Pour les opérations spécifiques à une version, vérifiez que votre identité IAM dispose des autorisations pour les actions spécifiques à une version. Par exemple, si vous voulez copier une version spécifique d'un objet, vous avez besoin de l'autorisation pour s3:GetObjectVersion en sus de s3:GetObject.
  • Si vous copiez des objets qui ont des balises d'objet, votre identité IAM doit disposer de l'autorisation s3:GetObjectTagging pour l'objet source et s3:PutObjectTagging pour les objets du compartiment de destination.
  • Passez en revue les stratégies de compartiment et les stratégies IAM appropriées pour vous assurer que l'élément Resource comporte le bon chemin. Pour les autorisations au niveau du compartiment, l'élément Resource doit pointer vers un compartiment. Pour les autorisations au niveau des objets, l'élément Resource pointe vers un ou plusieurs objets.

Par exemple, une instruction de stratégie pour une action au niveau du compartiment telle que s3:ListBucket doit spécifier un compartiment dans l'élément Resource, analogue à ce qui suit :

"Resource": "arn:aws:s3:::awsexamplebucket"

Une instruction de stratégie pour les actions au niveau de l'objet comme s3:GetObject ou s3:PutObject doit spécifier un ou plusieurs objets dans l'élément Resource, comme suit : 

"Resource": "arn:aws:s3:::awsexamplebucket/*"

Propriétaire de l'objet

Si les stratégies de compartiment comportent des autorisations appropriées et que vous avez toujours des difficultés à copier un objet entre des compartiments, vérifiez quel compte AWS possède l'objet. La stratégie de compartiment s'applique uniquement aux objets appartenant au propriétaire du compartiment. Un objet appartenant à un autre compte peut avoir des autorisations contradictoires sur sa liste de contrôle d'accès (ACL).

Remarque : le problème de propriété d'objet et de liste ACL se produit généralement lorsque vous copiez les journaux de service AWS entre les comptes. Les journaux de service incluent les journaux AWS CloudTrail et les journaux d'accès Elastic Load Balancing.

Suivez ces étapes pour trouver le compte qui possède un objet :

1.    Ouvrez la console Amazon S3.

2.    Accédez à l'objet que vous ne pouvez pas copier entre les compartiments.

3.    Choisissez l'onglet Permissions (Autorisations) de l'objet.

4.    Passez en revue les valeurs sous Access for object owner (Accès pour le propriétaire de l'objet) et Access for other AWS accounts (Accès pour d'autres comptes AWS) :

  • Si l'objet appartient à votre compte, l'ID canonique sous Access for object owner (Accès pour le propriétaire de l'objet) contient (Your AWS account) (Votre compte AWS).
  • Si l'objet appartient à un autre compte et que vous avez accès à l'objet, l'ID canonique sous Access for object owner (Accès pour le propriétaire de l'objet) contient (External account) (Compte externe). L'ID canonique sous Access for other AWS accounts (Accès pour d'autres comptes AWS) contient (Your AWS account) (Votre compte AWS).
  • Si l'objet appartient à un autre compte et que vous n'avez pas accès à l'objet, les champs ID canonique pour Access for object owner (Accès pour le propriétaire de l'objet) et Access for other AWS accounts (Accès pour les autres comptes AWS) sont vides.

Si l'objet que vous ne pouvez pas copier entre des compartiments appartient à un autre compte, le propriétaire de l'objet peut effectuer l'une des actions suivantes :

  • Le propriétaire de l'objet peut accorder au propriétaire du compartiment le contrôle total de l'objet. Une fois que le propriétaire du compartiment possède l'objet, la stratégie de compartiment s'applique à l'objet.
  • Le propriétaire de l'objet peut conserver la propriété de l'objet. Cependant,il doit remplacer la liste ACL par les paramètres dont vous avez besoin pour votre cas d'utilisation.

Chiffrement AWS KMS

Si l'objet est chiffré à l'aide d'une clé AWS KMS, vérifiez que votre identité IAM dispose des autorisations appropriées sur la clé. Si votre identité IAM et la clé AWS KMS appartiennent au même compte, vérifiez que la stratégie de clé accorde les autorisations suivantes à votre identité IAM :

"Action": [
    "kms:Encrypt",
    "kms:Decrypt",
    "kms:ReEncrypt*",
    "kms:GenerateDataKey*",
    "kms:DescribeKey"
 ]

Si votre identité IAM et la clé AWS KMS appartiennent à des comptes différents, vérifiez que la stratégie de clé ainsi que vos stratégies IAM accordent les autorisations requises.

Pour plus d'informations, consultez Utilisation des stratégies de clé dans AWS KMS et des actions, ressources et clés de condition pour AWS Key Management Service.

Classe de stockage Amazon S3 Glacier

Vous ne pouvez pas copier un objet depuis la classe de stockage Amazon S3 Glacier. Vous devez commencer par restaurer l'objet à partir de Amazon S3 Glacier avant de pouvoir copier l'objet. Pour obtenir des instructions, consultez Comment restaurer un objet S3 qui a été archivé ?

Paiement par le demandeur activé sur le compartiment

Si Paiement par le demandeur est activé sur le compartiment source ou cible et que vous essayez d'accéder au compartiment à partir d'un autre compte, vérifiez que le bon paramètre pour Paiement par le demandeur est associé à votre demande :

  • Pour l'interface de ligne de commande AWS (AWS CLI), incluez l'option --request-payer.
  • Les demandes GET, HEAD, et POST doivent comprendre-amz-request-payer : requester.
  • Pour les URL signées, incluez x-amz-request-payer=requester.

Stratégie de contrôle du service AWS Organizations

Si vous utilisez AWS Organizations, vérifiez les stratégies de contrôle de service pour vous assurer que l'accès à Amazon S3 est autorisé.

Par exemple, la stratégie suivante entraîne une erreur 403:Forbidden lorsque vous tentez d'accéder à Amazon S3 parce qu'il refuse explicitement l'accès : 

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Deny",
            "Action": "S3:*",
            "Resource": "*"
        }
    ]
}

Pour plus d'informations sur les fonctionnalités d'AWS Organizations, consultez la section Activation de toutes les fonctions de votre organisation.

Problèmes de demande entre régions avec des points de terminaison VPC pour Amazon S3

Les points de terminaison d'un VPC pour Amazon S3 ne prennent actuellement pas en charge les demandes entre régions. Par exemple, si vous avez une instance Amazon Elastic Compute Cloud (Amazon EC2) dans une région avec un point de terminaison d'un VPC configuré dans la table de routage associée, c'est que l'instance ne peut pas copier un objet à partir de la région B sur un compartiment dans la région A. Si vous tentez la copie, vous recevrez un message d'erreur analogue à celui-ci :

« Une erreur "Accès refusé" s'est produite lors de l'appel de l'opération CopyObject : les points de terminaison d'un VPC ne prennent pas en charge les demandes entre les régions. »

Pour résoudre ce problème de demande entre régions, vous pouvez :

  • Supprimez le point de terminaison de VPC de la table de routage. Si vous supprimez le point de terminaison d'un VPC, l'instance doit être en mesure de se connecter, mais plutôt à Internet.
  • Exécutez la commande de copie à partir d'une autre instance qui n'utilise pas le point de terminaison d'un VPC, ou à partir d'une instance qui se trouve ni dans la région A ni dans la région B.
  • Si vous devez utiliser le point de terminaison d'un VPC, envoyez une demande GET pour copier l'objet à partir du compartiment source vers l'instance EC2. Ensuite, envoyez une demande PUT pour copier l'objet de l'instance EC2 vers le compartiment de destination. 

Cet article vous a-t-il été utile ?

Cette page peut-elle être améliorée ?


Vous avez besoin d’aide ?