Consultez Contrôle de la propriété des objets et désactivation des listes ACL pour votre compartiment - Amazon Simple Storage Service

Consultez Contrôle de la propriété des objets et désactivation des listes ACL pour votre compartiment

S3 Object Ownership est un paramètre Amazon S3 au niveau du compartiment que vous pouvez utiliser pour désactiver les listes de contrôle d'accès (ACL) et prendre possession de chaque objet de votre compartiment. Cela a pour effet de simplifier la gestion des accès aux données stockées dans Amazon S3. Par défaut, lorsqu'un autre Compte AWS télécharge un objet dans votre compartiment S3, ce compte (le rédacteur d'objet) est propriétaire de l'objet, y a accès et peut en accorder l'accès à d'autres utilisateurs via des ACL. Vous pouvez utiliser la propriété de l'objet pour modifier ce comportement par défaut. Avec la propriété de l'objet, les ACL sont désactivées et vous, en tant que propriétaire du compartiment, vous possédez automatiquement tous les objets de votre compartiment. Par conséquent, le contrôle d'accès à vos données est basé sur des stratégies, telles que les stratégies IAM, les stratégies de compartiment S3, les stratégies de point de terminaison de cloud privé virtuel (VPC) et les politiques de contrôle des services (SCP) AWS Organizations.

La majorité des cas d'utilisation modernes dans Amazon S3 ne nécessitent plus l'utilisation des listes ACL ; nous vous recommandons de désactiver les listes ACL, sauf dans des circonstances inhabituelles où vous devez contrôler l'accès de chaque objet individuellement. Avec Object Ownership, vous pouvez désactiver les listes ACL et vous fier aux stratégies pour le contrôle des accès. Lorsque vous désactivez les listes ACL, vous pouvez facilement gérer un compartiment avec des objets téléchargés par différents Comptes AWS. En tant que propriétaire du compartiment, vous êtes propriétaire de tous les objets du compartiment et pouvez gérer l'accès à ces derniers au moyen de stratégies.

Object Ownership (Propriété de l'objet) dispose de trois paramètres que vous pouvez utiliser pour contrôler la propriété des objets téléchargés dans votre compartiment pour désactiver ou activer les listes ACL :

Listes ACL désactivées

  • Bucket owner enforced (Appliqué par le propriétaire du compartiment) (recommandé) – Les listes ACL sont désactivées, et le propriétaire du compartiment possède automatiquement tous les objets du compartiment et en a le contrôle total. Les listes ACL n'affectent plus les autorisations sur les données du compartiment S3. Le compartiment utilise des stratégies pour définir le contrôle des accès.

Listes ACL activées

  • Bucket owner preferred (Préféré par le propriétaire du compartiment) – Le propriétaire du compartiment possède les nouveaux objets que d'autres comptes écrivent dans le compartiment avec la liste ACL bucket-owner-full-control prête à l'emploi, et en a le contrôle total.

  • Object writer (default) (Rédacteur d'objets) [par défaut]) – Le Compte AWS qui télécharge un objet est propriétaire de l'objet, a un contrôle total sur celui-ci et peut en accorder l'accès à d'autres utilisateurs via des listes ACL.

Pour la majorité des cas d'utilisation modernes dans S3, nous vous recommandons de désactiver les ACL en choisissant le paramètre appliqué par le propriétaire du compartiment et d'utiliser votre stratégie de compartiment pour partager des données avec des utilisateurs extérieurs à votre compte, selon les besoins. Cette approche simplifie la gestion des autorisations et l'audit. Vous pouvez désactiver les listes de contrôle d'accès sur les compartiments nouvellement créés et déjà existants. Dans le cas d'un compartiment existant qui contient déjà des objets, une fois que vous avez désactivé les ACL, les listes ACL d'objet et de compartiment ne font plus partie d'une évaluation d'accès et l'accès est accordé ou refusé sur la base de stratégies. Pour les compartiments existants, vous pouvez réactiver les ACL à tout moment après les avoir désactivées, et vos listes ACL de compartiment et d'objets préexistantes sont restaurées.

Avant de désactiver les listes ACL, nous vous recommandons de revoir votre stratégie de compartiment pour vous assurer qu'elle couvre toutes les façons dont vous avez l'intention d'accorder l'accès à votre compartiment hors de votre compte. Vous devez réinitialiser la liste ACL de votre compartiment à la valeur par défaut (contrôle total du propriétaire du compartiment). Une fois que vous avez désactivé les listes ACL, votre compartiment accepte uniquement les demandes PUT qui ne spécifient pas de demande ACL ou PUT avec des listes ACL de contrôle total du propriétaire du compartiment, telles que la liste ACL bucket-owner-full-control prédéfinie ou des formes équivalentes de cette ACL exprimées en XML. Les applications existantes prenant en charge les listes ACL de contrôle total du propriétaire du compartiment n'ont aucun impact. Les demandes PUT qui contiennent d'autres listes ACL (par exemple, accordent des autorisations personnalisées à certains Comptes AWS) échouent et renvoient une erreur 400 avec le code d'erreur AccessControlListNotSupported.

En comparaison, un compartiment avec le paramètre préféré par le propriétaire du compartiment continue d'accepter et d'honorer les listes ACL de compartiment et d'objet. Avec ce paramètre, de nouveaux objets écrits avec la liste ACL bucket-owner-full-control prédéfinie sont automatiquement détenus par le propriétaire du compartiment plutôt que par l'auteur d'objets. Tous les autres comportements ACL restent en place. Pour exiger que toutes les opérations PUT Amazon S3 incluent la liste ACL bucket-owner-full-control prédéfinie, vous pouvez ajouter une politique de compartiment qui n'autorise que les chargements d'objets à l'aide de cette ACL.

Paramètres de la propriété de l'objet

Ce tableau montre l'impact de chaque paramètre de la propriété d'objet sur les listes ACL, les objets, la propriété des objets et les téléchargements d'objets.

Paramètre S'applique à Effet sur la propriété de l'objet Effet sur les listes ACL Chargements acceptés
Le propriétaire du compartiment est appliqué (recommandé) Tous les objets existants et nouveaux Le propriétaire du compartiment est propriétaire de chaque objet.

Les listes ACL sont désactivées et n'affectent plus les autorisations d'accès à votre compartiment. Les demandes de définition ou de mise à jour des listes ACL échouent. Cependant, les demandes de lecture de listes ACL sont prises en charge.

Le propriétaire du compartiment possède la propriété et le contrôle complets.

Le rédacteur d'objets n'a plus la propriété et le contrôle complets.

Chargements avec des listes ACL de contrôle total du propriétaire du compartiment ou des téléchargements qui ne spécifient pas de liste ACL
Propriétaire du compartiment préféré Nouveaux objets Si le chargement d'un objet inclut la liste ACL bucket-owner-full-control prédéfinie, le propriétaire du compartiment est propriétaire de l'objet.

Les objets téléchargés avec d'autres listes ACL appartiennent au compte d'écriture.

Les listes ACL peuvent être mises à jour et peuvent accorder des autorisations.

Si le chargement d'un objet inclut la liste ACL bucket-owner-full-control prédéfinie, le propriétaire du compartiment dispose d'un accès en contrôle total et l'enregistreur d'objets n'a plus d'accès de contrôle complet.

Tous les chargements
Graveur d'objets (par défaut) Nouveaux objets Le rédacteur d'objet possède l'objet.

Les listes ACL peuvent être mises à jour et peuvent accorder des autorisations.

Le rédacteur d'objet dispose d'un accès complet.

Tous les chargements

Les changements introduits par la désactivation des listes ACL

Lorsque vous appliquez le paramètre appliqué par le propriétaire du compartiment pour la propriété d'objet afin de désactiver les listes ACL, vous possédez automatiquement tous les objets du compartiment et prenez le contrôle total sans effectuer d'actions supplémentaires. Après avoir appliqué ce paramètre, trois modifications s'affichent :

  • Toutes les listes ACL de compartiment et les listes ACL d'objets sont désactivées, ce qui vous donne un accès complet, en tant que propriétaire du compartiment. Lorsque vous exécutez une demande ACL en lecture sur votre compartiment ou votre objet, vous verrez que l'accès complet n'est accordé qu'au propriétaire du compartiment.

  • Avec ce paramètre, en tant que propriétaire du compartiment, vous possédez automatiquement tous les objets de votre compartiment.

  • Les listes ACL n'affectent plus les autorisations d'accès à votre compartiment. Par conséquent, le contrôle d'accès à vos données est basé sur des stratégies, telles que les stratégies IAM, les stratégies de compartiment S3, les stratégies de point de terminaison d'un VPC et les politiques de contrôle des services (SCP) des organisations.


				Diagramme montrant ce qui se passe lorsque vous appliquez le paramètre appliqué par le propriétaire du compartiment pour désactiver les listes ACL.

Si vous utilisez la gestion des versions S3, le propriétaire du compartiment possède et contrôle total sur toutes les versions d'objets de votre compartiment. L'application du paramètre appliqué par le propriétaire du compartiment n'ajoute pas de nouvelle version d'un objet.

Les nouveaux objets peuvent être chargés dans votre compartiment uniquement s'ils utilisent des listes ACL de contrôle total du propriétaire du compartiment ou ne spécifient pas de liste ACL. Les téléchargements d'objets échouent s'ils spécifient une autre liste ACL. Pour plus d'informations, consultez Résolution des problèmes.

Étant donné que l'exemple suivant de l'opération PutObject utilise à l'aide de l'AWS Command Line Interface (AWS CLI) inclut la liste ACL bucket-owner-full-controlprédéfinie, l'objet peut être chargé dans un compartiment avec des listes ACL désactivées.

aws s3api put-object --bucket DOC-EXAMPLE-BUCKET --key key-name --body path-to-file --acl bucket-owner-full-control

Étant donné que l'opération PutObject suivante ne spécifie pas une liste ACL, elle réussit également pour un compartiment avec des listes ACL désactivées.

aws s3api put-object --bucket DOC-EXAMPLE-BUCKET --key key-name --body path-to-file
Note

Si d'autres Comptes AWS doivent accéder aux objets après le chargement, vous devez accorder des autorisations supplémentaires à ces comptes via des stratégies de compartiment. Pour plus d'informations, consultez Exemples de procédures : Gestion de l'accès à vos ressources Amazon S3.

Réactivation des listes ACL

Vous pouvez réactiver les listes ACL en passant du paramètre appliqué par le propriétaire du compartiment à un autre paramètre de propriété d'objet à tout moment. Si vous avez utilisé des listes ACL d'objet pour la gestion des autorisations avant d'appliquer le paramètre appliqué par le propriétaire du compartiment et que vous n'avez pas migré ces autorisations ACL d'objet vers votre stratégie de compartiment, après avoir réactivé les listes ACL, ces autorisations sont restaurées. De plus, les objets écrits dans le compartiment pendant que le paramètre appliqué par le propriétaire du compartiment a été appliqué appartiennent toujours au propriétaire du compartiment.

Par exemple, si vous passez du paramètre appliqué par le propriétaire du compartiment à un graveur d'objets, vous, en tant que propriétaire du compartiment, ne possédez plus et n'avez plus le contrôle total sur les objets qui appartenaient auparavant à d'autres Comptes AWS. Au lieu de cela, les comptes de chargement sont à nouveau propriétaires de ces objets. Les objets appartenant à d'autres comptes utilisent des listes ACL pour les autorisations. Vous ne pouvez donc pas utiliser de stratégies pour accorder des autorisations à ces objets. Cependant, en tant que propriétaire du compartiment, vous possédez toujours les objets qui été écrits dans le compartiment pendant que le paramètre appliqué par le propriétaire du compartiment a été appliqué. Ces objets ne sont pas détenus par le rédacteur d'objet, même si vous réactivez les listes ACL.

Conditions préalables à la désactivation des listes ACL

Avant de désactiver les listes ACL pour un compartiment existant, remplissez les prérequis suivants.

Examinez les listes ACL de compartiment et d'objet et migrez les autorisations ACL

Lorsque vous désactivez les listes ACL, les autorisations accordées par les listes ACL de compartiment et d'objets n'affectent plus l'accès. Avant de désactiver les listes ACL, vérifiez les listes ACL de votre compartiment et de vos objets. Si vos listes ACL de compartiment accordent des autorisations de lecture ou d'écriture à d'autres personnes hors de votre compte, vous devez migrer ces autorisations vers votre stratégie de compartiment avant de pouvoir appliquer le paramètre appliqué par le propriétaire du compartiment. Si vous ne migrez pas les listes ACL de compartiment qui accordent un accès en lecture ou en écriture hors de votre compte, votre demande d'application du paramètre appliqué par le propriétaire du compartiment échoue et renvoie le code d'erreur InvalidBucketAclWithObjectOwnership.

Par exemple, si vous souhaitez désactiver les listes ACL pour un compartiment qui reçoit les journaux d'accès au serveur, vous devez migrer les autorisations ACL du compartiment pour le groupe de mise à disposition des journaux S3 vers le principal du service de journalisation dans une stratégie de compartiment. Pour plus d'informations, consultez Accordez l'accès au groupe de mise à disposition des journaux S3 pour la journalisation de l'accès.

Si vous souhaitez que le rédacteur d'objets conserve le contrôle total de l'objet qu'il télécharge, le rédacteur d'objets est le meilleur paramètre de propriété d'objet pour votre cas d'utilisation. Si vous souhaitez contrôler l'accès au niveau de l'objet individuel, le propriétaire du compartiment préféré est le meilleur choix. Ces cas d'utilisation sont rares.

Pour consulter les listes ACL et migrer les autorisations ACL vers des stratégies de compartiment, consultez la section Conditions préalables à la désactivation des listes ACL.

Vérifiez et mettez à jour les stratégies de compartiment qui utilisent des clés de condition associées à ACL

Une fois que vous avez appliqué le paramètre appliqué par le propriétaire du compartiment pour désactiver les listes ACL, les nouveaux objets peuvent être téléchargés dans votre compartiment uniquement si la demande utilise des listes ACL de contrôle total du propriétaire du compartiment ou ne spécifie pas de liste ACL. Avant de désactiver les listes ACL, consultez votre stratégie de compartiment pour les clés de condition associées à la liste ACL.

Si votre stratégie de compartiment utilise une clé de condition associée à la liste ACL pour exiger la liste ACL bucket-owner-full-control prédéfinie (par exemple, s3:x-amz-acl), vous n'avez pas besoin de mettre à jour votre stratégie de compartiment. La stratégie de compartiment suivante utilise la s3:x-amz-acl pour exiger la liste ACL bucket-owner-full-control prédéfinie pour les demandes PutObject S3. Cette politique demande encore au rédacteur d'objets qu'il spécifie la liste ACL bucket-owner-full-control prédéfinie. Toutefois, les compartiments dont les listes ACL sont désactivées acceptent toujours cette liste ACL, de sorte que les demandes continuent d'aboutir sans modification côté client requise.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "Only allow writes to my bucket with bucket owner full control", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::111122223333:user/ExampleUser" ] }, "Action": [ "s3:PutObject" ], "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*", "Condition": { "StringEquals": { "s3:x-amz-acl": "bucket-owner-full-control" } } } ] }

Cependant, si votre stratégie de compartiment utilise une clé de condition associée à la liste ACL qui nécessite une liste ACL différente, vous devez supprimer cette clé de condition. Cet exemple de stratégie de compartiment nécessite la liste ACL public-read pour les demandes S3 PutObject et doit donc être mis à jour avant de désactiver les listes ACL.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "Only allow writes to my bucket with public read access", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::111122223333:user/ExampleUser" ] }, "Action": [ "s3:PutObject" ], "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*", "Condition": { "StringEquals": { "s3:x-amz-acl": "public-read" } } } ] }

Autorisations de propriété d'objet

Pour appliquer, mettre à jour ou supprimer un paramètre de propriété d'objet pour un compartiment, vous devez utiliser l'autorisation s3:PutBucketOwnershipControls. Pour renvoyer le paramètre propriété de l'objet d'un compartiment, vous devez utiliser l'autorisation s3:GetBucketOwnershipControls. Pour plus d'informations, consultez Définition de la propriété d'objet lors de la création d'un compartiment et Affichage du paramètre de propriété d'objet pour un compartiment S3.

Désactivation des listes ACL pour tous les nouveaux compartiments

Vous pouvez exiger que tous les nouveaux compartiments soient créés avec des listes ACL désactivées à l'aide de politiques IAM ou Organizations. Vous pouvez utiliser la clé de condition s3:x-amz-object-ownership dans une politique IAM ou Organizations pour exiger que le paramètre appliqué par le propriétaire du compartiment soit appliqué à tous les compartiments nouvellement créés. En exigeant le paramètre appliqué par le propriétaire du compartiment, vous vous assurez que les listes ACL sont désactivées pour tous les nouveaux compartiments de votre compte ou de votre organisation. Pour plus d'informations, consultez Désactivation des listes ACL pour tous les nouveaux compartiments (application du propriétaire du compartiment).

Réplication et propriété d'objet

Lorsque vous utilisez la réplication S3 et que les compartiments source et de destination appartiennent à des Comptes AWS différents, vous pouvez désactiver les ACL (avec le paramètre bucket owner enforced [propriétaire du compartiment imposé] pour Object Ownership [Propriété de l'objet]) pour transférer la propriété du réplica au Compte AWS qui possède le compartiment de destination. Ce paramètre imite le comportement de remplacement du propriétaire existant sans avoir besoin d'une autorisation s3:ObjectOwnerOverrideToBucketOwner. Tous les objets répliqués dans le compartiment de destination avec le paramètre bucket owner enforced (propriétaire du compartiment imposé) appartiennent au propriétaire du compartiment de destination. Pour plus d'informations sur l'option de remplacement du propriétaire pour les configurations de réplication, consultez Modification du propriétaire d'un réplica.

Si vous utilisez le paramètre de rédacteur d'objet par défaut pour la propriété de l'objet ou si vous appliquez le paramètre préféré de propriétaire de compartiment pour le compartiment de destination, vous pouvez utiliser l'option de remplacement du propriétaire de réplication S3 pour transférer la propriété des objets répliqués au propriétaire du compartiment de destination.

Définition de la propriété de l'objet

Vous pouvez appliquer un paramètre de propriété d'objet à l'aide de la console S3, de la AWS CLI, de l'AWS SDK, de l'API REST Amazon S3 ou de AWS CloudFormation. L'API REST suivante et les commandes AWS CLI prennent en charge la propriété d'objet :

API REST AWS CLI Description
PutBucketOwnershipControls put-bucket-ownership-controls Crée ou modifie le paramètre de propriété d'objet pour un compartiment S3 existant.
CreateBucket create-bucket Crée un compartiment à l'aide de l'en-tête de demande x-amz-object-ownership pour spécifier le paramètre de Propriété d'objet.
GetBucketOwnershipControls get-bucket-ownership-controls Extrait le paramètre de propriété d'objet pour un compartiment Amazon S3.
DeleteBucketOwnershipControls delete-bucket-ownership-controls Supprime le paramètre de propriété d'objet pour un compartiment Amazon S3.

Pour plus d'informations sur l'application et l'utilisation des paramètres de propriété d'objet, consultez les rubriques suivantes.