Passer au contenu

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

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.

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 de Gestion des identités et des accès AWS (AWS IAM). 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 section 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 section Modifier les autorisations d'un utilisateur IAM. Pour savoir comment modifier les autorisations d'un rôle IAM, consultez la section Mettre à jour les autorisations 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:GetObject sur le compartiment source. Si les compartiments se trouvent dans le même compte, définissez ces autorisations avec la politique de votre identité IAM. Vous pouvez également autoriser explicitement l'identité IAM dans la politique de compartiment 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:PutObject sur le compartiment de destination. Si les compartiments se trouvent dans le même compte, définissez ces autorisations avec la politique de votre identité IAM. Vous pouvez également autoriser explicitement l'identité IAM dans la politique de compartiment 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 --recursive, 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 d’approbation.
  • 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 d’identifications 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.
  • Examinez 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. Examinez les valeurs sous Bénéficiaire.

Si l'objet appartient à votre compte, sous Bénéficiaire, pour Propriétaire de l'objet (votre compte AWS), l'ID canonique contient votre compte AWS. Si un autre compte est propriétaire de l'objet et que vous pouvez y accéder, les conditions suivantes sont toutes deux vraies :

  • L'ID canonique sous Propriétaire de l'objet (votre compte AWS) contient un compte externe.
  • L'ID canonique sous Groupe d'utilisateurs authentifiés (toute personne possédant un compte AWS) contient votre compte AWS.

Si un autre compte est propriétaire d’un objet auquel vous ne pouvez pas accéder, les champs ID canonique pour **Propriétaire de l'objet (votre compte AWS) ** et les autres bénéficiaires 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. À titre de bonne pratique en matière de sécurité, le propriétaire du compartiment peut désactiver les ACL du compartiment pour définir la propriété de l'objet sur bucket-owner enforced.
  • 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 sections 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 section Restauration d'un objet archivé.

Requester Pays activé sur le compartiment

Si Paiement par le demandeur 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 Paiement par le demandeur correct :

  • Pour les commandes de l'interface de la ligne de commande AWS (AWS CLI), incluez l'option**--request-payer**.
  • Pour les requêtes 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 requêtes interrégionales avec les points de terminaison de VPC pour Amazon S3

Les points de terminaison de 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é à la requête interrégionale, utilisez les méthodes suivantes :

  • Supprimez le point de terminaison de VPC de la table de routage. Si vous supprimez le point de terminaison de 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 de 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 de 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, déplacer et renommer des objets

Comment résoudre les erreurs 403 Access Denied depuis Amazon S3 ?

AWS OFFICIELA mis à jour il y a 10 mois