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

Lecture de 9 minute(s)
0

Je souhaite copier un objet d'un compartiment Amazon S3 (Simple Storage Service) dans un autre, mais je n'y parviens pas.

Résolution

Politiques de compartiment et politiques IAM

Pour copier un objet d'un compartiment à un autre, assurez-vous d'avoir configuré les autorisations appropriées. Pour copier un objet entre des compartiments d'un même compte AWS, définissez les autorisations dans les politiques AWS IAM (Identity and Access Management). Pour copier un objet entre des compartiments de comptes différents, vous devez définir des autorisations à la fois dans les politiques IAM et dans les politiques de compartiment pertinentes.

**Remarque :**pour savoir comment modifier une politique de compartiment, consultez la page Ajout d'une politique de compartiment à l'aide de la console Amazon S3. Pour savoir comment modifier les autorisations d'un utilisateur IAM, consultez la page Modification des autorisations d'un utilisateur IAM. Pour savoir comment modifier les autorisations pour un rôle IAM, consultez la page Modification d'un rôle.

Confirmez les autorisations requises :

  • Au minimum, votre identité IAM (utilisateur ou rôle) doit être autorisée à effectuer les actions s3:ListBucket et s3:GetObject sur le compartiment source. Si les compartiments se trouvent dans le même compte, définissez ces autorisations en fonction des politiques de votre identité IAM ou de la politique des compartiments S3. Si les compartiments se trouvent dans des comptes différents, définissez ces autorisations à la fois dans la politique de compartiment et dans les politiques de votre identité IAM.
  • Au minimum, votre identité IAM doit être autorisée à effectuer les actions s3:ListBucket et s3:PutObject sur le compartiment de destination. Si les compartiments se trouvent dans le même compte, définissez ces autorisations en fonction des politiques de votre identité IAM ou de la politique des compartiments S3. Si les compartiments se trouvent dans des comptes différents, définissez ces autorisations à la fois dans la politique de compartiment et dans les politiques de votre identité IAM.
  • Passez en revue les politiques de compartiment et les politiques IAM pertinentes pour vérifier qu'aucune instruction de refus explicite n'entre en conflit avec les autorisations dont vous avez besoin. Une instruction de refus explicite remplace une instruction d’autorisation.
  • Pour des opérations spécifiques, vérifiez que votre identité IAM est autorisée à effectuer toutes les actions nécessaires dans le cadre de l'opération. Par exemple, pour exécuter la commande aws s3 cp, vous devez disposer des autorisations s3:GetObject et s3:PutObject. Pour exécuter la commande aws s3 cp avec l'option récursive, vous devez disposer des autorisations s3:GetObject, s3:PutObject et s3:ListBucket. Pour exécuter la commande aws s3 sync, vous devez disposer des autorisations s3:GetObject, s3:PutObject et s3:ListBucket.
    **Remarque :**si vous utilisez l'opération d'API AssumeRole pour accéder à Amazon S3, vérifiez que vous avez correctement configuré la relation de confiance.
  • Pour les opérations spécifiques à une version, vérifiez que votre identité IAM est autorisée à effectuer des actions spécifiques à la version. Par exemple, pour copier une version spécifique d'un objet, vous devez disposer des autorisations s3:GetObjectVersion et s3:GetObject.
  • Pour copier des objets dotés de 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 de l'autorisation s3:PutObjectTagging pour les objets du compartiment de destination.
  • Passez en revue les politiques de compartiment et les politiques IAM pertinentes pour vérifier que le chemin de l'élément Resource est correct. Pour les autorisations au niveau du compartiment, l'élément Resource doit pointer vers un compartiment. Pour les autorisations au niveau de l'objet, l'élément Resource doit pointer vers un ou plusieurs objets.

Par exemple, une instruction de politique appliquée à une action au niveau du compartiment telle que s3:ListBucket, doit spécifier un compartiment dans l'élément Resource :

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

Une instruction de politique appliquée à des actions au niveau des objets, telles que s3:GetObject ou s3:PutObject, doit spécifier un ou plusieurs objets dans l'élément Resource :

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

Propriété de l'objet

Si les politiques des compartiments accordent les autorisations appropriées et que vous ne pouvez toujours pas copier un objet entre compartiments, vérifiez à quel compte appartient l'objet. La politique du compartiment s'applique uniquement aux objets appartenant au propriétaire du compartiment. Un objet appartenant à un autre compte peut présenter des autorisations contradictoires sur sa liste de contrôle d'accès (ACL).

**Remarque :**le problème de propriété des objets et d'ACL se produit généralement lorsque vous copiez les journaux des services AWS sur plusieurs comptes. Les journaux d'accès AWS CloudTrail et Elastic Load Balancing sont des exemples de journaux de service.

Pour trouver le compte propriétaire d'un objet, procédez comme suit :

  1. Ouvrez la console Amazon S3.
  2. Naviguez jusqu'à l'objet que vous ne pouvez pas copier entre plusieurs compartiments.
  3. Choisissez l'onglet Autorisations de l'objet.
  4. Vérifiez les valeurs sous Accès du propriétaire d'objet et Accès pour d'autres comptes AWS :
  • Si l'objet appartient à votre compte, l'ID canonique sous Accès du propriétaire d'objet contient (Votre compte AWS).
  • Si l'objet appartient à un autre compte et que vous pouvez y accéder, les conditions suivantes sont vraies :
    L'ID canonique sous Accès du propriétaire d'objet contient (Compte externe).
    L'ID canonique sous Accès pour les autres comptes AWS contient (Votre compte AWS).
  • Si l'objet appartient à un autre compte et que vous ne pouvez pas y accéder, la condition suivante est vraie :
    Les champs ID canonique sous **Accès du propriétaire d'objet ** et Accès pour les autres comptes AWS sont vides.

Si l'objet que vous ne pouvez pas copier entre compartiments appartient à un autre compte, le propriétaire de l'objet dispose des options 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 est propriétaire de l'objet, la politique du compartiment s'applique à l'objet.
  • Le propriétaire de l'objet peut conserver la propriété de l'objet, mais il doit modifier l'ACL en fonction des paramètres dont vous avez besoin pour votre cas d'utilisation.

Chiffrement AWS KMS

Un objet peut être chiffré à l'aide d'une clé AWS KMS (Key Management Service). Dans ce cas, vérifiez que votre identité IAM dispose des autorisations appropriées sur la clé. Si votre identité IAM et votre clé AWS KMS appartiennent au même compte, vérifiez que votre stratégie de clé accorde les autorisations AWS KMS requises.

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

Par exemple, si vous copiez des objets entre deux compartiments (et que chaque compartiment possède sa propre clé), l'identité IAM doit spécifier les autorisations suivantes :

  • kms:Decrypt faisant référence à la première clé KMS ;
  • kms:GenerateDataKey et KMS:Decrypt, faisant référence à la deuxième clé KMS.

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

Classes de stockage Amazon Archive, Amazon Glacier et Intelligent Archive

Vous ne pouvez pas copier un objet depuis la classe de stockage Amazon S3 Glacier. Vous devez d'abord le restaurer depuis la classe Amazon S3 Glacier avant de pouvoir le copier. Pour obtenir des instructions, consultez la page Restauration d'un objet archivé.

Requester Pays activé sur le compartiment

Si Requester Pays est activé dans le compartiment source ou de destination et que vous souhaitez accéder au compartiment depuis un autre compte, vérifiez votre requête. Assurez-vous qu'elle inclut le paramètre Requester Pays correct :

  • Pour les commandes de l'interface de ligne de commande AWS (AWS CLI), incluez l'option**--request-payer**.
    Remarque : si des erreurs surviennent lors de l'exécution des commandes AWS CLI, assurez-vous que vous utilisez 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 dans la demande.

Politique de contrôle des services AWS Organizations

Si vous utilisez AWS Organizations, vérifiez si les politiques de contrôle des services autorisent l'accès à Amazon S3.

Par exemple, cette politique génère une erreur 403 Forbidden lorsque vous essayez d'accéder à Amazon S3. Cela est dû à un refus explicite de 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 Activer toutes les fonctionnalités de votre organisation.

Problèmes liés aux demandes interrégionales avec les points de terminaison VPC pour Amazon S3

Les points de terminaison VPC pour Amazon S3 ne prennent pas en charge les demandes provenant de différentes régions AWS. Supposons, par exemple, que vous disposiez d'une instance Amazon EC2 (Elastic Compute Cloud) dans la région A. Cette instance possède un point de terminaison de cloud privé virtuel (VPC) configuré dans sa table de routage associée. L'instance EC2 ne peut pas copier un objet de la région B dans un compartiment de la région A. Vous recevez alors un message d'erreur semblable à cet exemple :

"An error occurred (AccessDenied) when calling the CopyObject operation: VPC endpoints do not support cross-region requests"

Pour résoudre ce problème lié aux demandes interrégionales, essayez les méthodes suivantes :

  • Supprimez le point de terminaison du VPC de la table de routage. Si vous supprimez le point de terminaison du VPC, l'instance doit alors pouvoir se connecter à Internet.
  • Exécutez la commande de copie depuis une autre instance qui n'utilise pas le point de terminaison du VPC. Vous pouvez également exécuter la commande de copie à 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 VPC, envoyez d'abord une demande GET pour copier l'objet du compartiment source dans l'instance EC2. Envoyez ensuite une demande PUT pour copier l'objet de l'instance EC2 dans le compartiment de destination.

Informations connexes

Copier des objets

Comment résoudre les erreurs 403 d'accès refusé depuis Amazon S3 ?

AWS OFFICIEL
AWS OFFICIELA mis à jour il y a 7 mois