Pourquoi ne puis-je pas copier un objet d’un compartiment Amazon S3 à l’autre ?

Dernière mise à jour : 11/11/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 puis-je résoudre ce problème ?

Brève description

Pour résoudre les problèmes de copie d’un objet entre compartiments, vérifiez ce qui suit :

  • 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
  • Les problèmes de demande inter-régions avec les 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 ou de la stratégie de compartiment S3. 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, c’est que vous pouvez définir ces autorisations à l'aide des stratégies de votre identité IAM ou de la stratégie de compartiment S3. 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.
  • 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 API AssumeRole pour accéder à Amazon S3, vous devez également vérifier que la relation de confiance est correctement configurée.
  • 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 des autorisations S3:GetObjectTagging et S3:PutObjectTagging. Vous devez disposer de l'autorisation S3:getObjectTagging pour l'objet source et l'autorisation 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 de ressource comporte le bon chemin. Pour les autorisations au niveau du compartiment, l'élément de ressource doit pointer vers un compartiment. Pour les autorisations au niveau des objets, l'élément de ressource doit pointer 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 de ressource, comme suit :

"Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET"

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 de ressource, comme suit :

"Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*"

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 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 pouvez accéder à 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 ne pouvez pas accéder à 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, voir Utilisation de la stratégie de clé dans AWS KMS et 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 le paiement par le demandeur (Requester Pays) est activé sur le compartiment source ou le compartiment de destination, et si vous essayez d’accéder au compartiment depuis un autre compte, vérifiez que votre demande inclut le paramètre Paiement par le demandeur correct :

  • Pour l’Interface de ligne de commande AWS (AWS CLI), inclure l’option --request-payer.
    Remarque : si vous recevez des erreurs lors de l'exécution des commandes AWS CLI, assurez-vous d'utiliser la version la plus récente d'AWS CLI.
  • Pour les demandes GET, HEAD et POST, incluez x-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, consultez les politiques de contrôle des services pour être sûr 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 dans votre organisation.

Problèmes de demande Inter-régions avec des points de terminaison d'un VPC pour Amazon S3

Points de terminaison d'un VPC pour Amazon S3 ne prennent pas en charge les demandes inter-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 inter-régions »

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

  • Retirer le point de terminaison VPC de la table de routage. Si vous retirez le point de terminaison d'un VPC, l’instance devrait être capable de se connecter à Internet.
  • Exécutez la commande copy à partir d'une autre instance qui n'utilise pas le point de terminaison d'un VPC. Ou, exécutez la commande copy à partir d'une instance qui ne 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 requête GET pour copier l’objet depuis la source du compartiment à l’instance EC2. Envoyez ensuite une demande PUT pour copier l’objet depuis l’instance EC2 vers le compartiment de destination.

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


Besoin d'aide pour une question technique ou de facturation ?