Pourquoi m'est-il impossible d'accéder à un objet qui a été chargé dans mon compartiment Amazon S3 par un autre compte AWS ?

Dernière mise à jour : 24/01/2022

Un utilisateur AWS Identity and Access Management (IAM) d'un autre compte AWS a chargé un objet dans mon compartiment Amazon Simple Storage Service (Amazon S3). Lorsque j'essaie d'accéder à cet objet, je reçois le message d’erreur 403 Access Denied (Accès refusé). Comment puis-je corriger ce problème ?

Brève description

Pour les compartiments Amazon S3 existants avec les paramètres de propriété d'objet par défaut, le propriétaire de l'objet est le compte AWS qui a chargé l'objet dans le compartiment. Pour ces compartiments existants, le propriétaire d'un objet doit explicitement accorder des autorisations à un objet (en attachant une liste de contrôle d'accès). Dans le cas contraire, le propriétaire du compartiment ne pourra pas accéder à l'objet.

Avec le paramètre de propriété de l'objet S3, les propriétaires de compartiments peuvent désormais gérer la propriété de l'ensemble des objets chargés dans leurs compartiments. Par défaut, le paramètre bucket owner enforced (propriétaire du compartiment appliqué) est activé pour tous les compartiments S3 nouvellement créés. Lorsque le paramètre bucket owner enforced (propriétaire du compartiment appliqué) est activé, les propriétaires du compartiment deviennent les propriétaires de l'ensemble des objets du compartiment. De plus, toutes les listes ACL d'un compartiment ainsi que ses objets sont désactivés.

Vous pouvez également définir le paramètre de propriété de l'objet S3 sur les compartiments existants en activant le paramètre bucket owner enforced (propriétaire du compartiment appliqué) ou le paramètre bucket owner preferred (propriétaire du compartiment préféré). Lorsque le paramètre bucket owner preferred (propriétaire du compartiment préféré) est activé, les listes ACL sont toujours activées. En outre, seuls les objets chargés dans le compartiment avec une liste ACL bucket-owner-full-control appartiennent au propriétaire du compartiment. Si vous activez le paramètre bucket owner enforced (propriétaire du compartiment appliqué) sur un compartiment existant, notez que vous pouvez également le désactiver à tout moment. (La désactivation du paramètre bucket owner enforced (propriétaire du compartiment appliqué) sur un compartiment existant réactive tous les compartiments et les listes ACL d'objet précédemment appliqués.)

Il est recommandé que les propriétaires de compartiment utilisent le paramètre bucket owner enforced (propriétaire du compartiment appliqué) sur les nouveaux compartiments ainsi que sur ceux existants, tout en gérant les autorisations via des politiques IAM et de compartiments.

Important : avant de désactiver des listes ACL sur des compartiments existants, évaluez l'impact potentiel de cette désactivation. S'il existe plusieurs listes ACL sur un objet ou un compartiment, mettez à jour vos politiques IAM et de compartiment afin d'accorder les autorisations requises.

Solution

Afin de désactiver les listes ACL pour votre compartiment et prendre possession de tous les objets du compartiment, exécutez la commande suivante :

aws s3api put-bucket-ownership-controls --bucket example-bucket --ownership-controls 'Rules=[{ObjectOwnership=BucketOwnerEnforced}]'

Si vous ne parvenez pas à désactiver les listes ACL sur votre compartiment, utilisez les options suivantes pour accorder l'accès aux objets de votre compartiment.

Accorder l'accès lors d'une opération « put » ou « copy »

Lors d’une opération « put » ou « copy », le propriétaire de l'objet peut spécifier que la liste de contrôle d'accès (ACL) de l'objet accorde un contrôle total au propriétaire du compartiment.

Pour une opération « put », le propriétaire de l'objet peut exécuter cette commande :

aws s3api put-object --bucket destination_DOC-EXAMPLE-BUCKET --key dir-1/my_images.tar.bz2 --body my_images.tar.bz2 --acl bucket-owner-full-control

Remarque : si vous recevez des erreurs lors de l'exécution de commandes depuis l'interface de ligne de commande AWS (AWS CLI), assurez-vous d'utiliser la version la plus récente d’AWS CLI.

Pour une opération « copy » d'un objet unique, le propriétaire de l'objet peut exécuter une de ces commandes :

aws s3api copy-object --bucket destination_DOC-EXAMPLE-BUCKET --key source_DOC-EXAMPLE-BUCKET/myobject --acl bucket-owner-full-control

-ou-

aws s3 cp s3://source_DOC-EXAMPLE-BUCKET/myobject s3://destination_DOC-EXAMPLE-BUCKET/ --acl bucket-owner-full-control

Pour une opération « copy » de plusieurs objets, le propriétaire de l'objet peut exécuter cette commande :

aws s3 cp s3://source_DOC-EXAMPLE-BUCKET/ s3://destination_DOC-EXAMPLE-BUCKET/ --acl bucket-owner-full-control --recursive

Accorder l'accès une fois que l'objet est ajouté au compartiment

Si l'objet se trouve déjà dans un compartiment d'un autre compte, le propriétaire de l'objet peut octroyer un accès au propriétaire du compartiment avec une commande put-object-acl :

aws s3api put-object-acl --bucket destination_DOC-EXAMPLE-BUCKET --key keyname --acl bucket-owner-full-control

Exiger que les objets accordent un contrôle total au propriétaire du compartiment

Vous pouvez utiliser une stratégie de compartiment pour exiger que touts les objets chargés dans votre compartiment par un autre compte définisse la liste ACL en tant que « bucket-owner-full-control ». Pour obtenir un exemple, consultez la section Lorsque d'autres comptes AWS chargent des objets dans mon compartiment S3, comment puis-je exiger qu'ils me concèdent la propriété d'objets ?