Comment puis-je ajouter une liste ACL bucket-owner-full-control à mes objets dans Amazon S3 ?

Date de la dernière mise à jour : 2021-12-10

J'essaie d'ajouter la liste de contrôle d'accès (ACL, Access Control List) bucket-owner-full-control aux objets existants dans Amazon Simple Storage Service (Amazon S3). Comment dois-je procéder ?

Brève description

Par défaut, dans un scénario entre comptes dans lequel d'autres comptes AWS chargent des objets dans le compartiment Amazon S3, les objets restent la propriété du compte de chargement. Lors de l’ajout de laliste ACL bucket-owner-full-control, le propriétaire du compartiment a le contrôle total sur tous les nouveaux objets écrits par d'autres comptes.

Si le scripteur d'objets ne spécifie pas d'autorisations pour le compte de destination au niveau de la liste ACL d’un objet, le compte de destination ne peut supprimer que des objets.

Lors de l’ajout de la liste ACLbucket-owner-full-controlt, le propriétaire du compartiment a le contrôle total sur tous les nouveaux objets écrits par d'autres comptes AWS. Cette liste ACL est également requise si le compartiment de destination a activé la Propriété de l'objet S3. Lorsque la Propriété de l'objet S3 est activée, le propriétaire des nouveaux objets est mis à jour vers le compte de destination.

Important : L'octroi d'un accès entre comptes via des listes ACL d'objet et de compartiment ne fonctionne pas pour les compartiments dont la propriété de l'objet S3 est définie sur Propriétaire du compartiment appliqué. Dans la plupart des cas, les listes ACL ne sont pas obligatoires pour l'octroi des autorisations aux objets et aux compartiments. Utilisez plutôt les politiques AWS Identity Access and Management (IAM) et les politiques de compartiment S3 pour accorder des autorisations aux objets et aux compartiments.

Pour les objets existants, le propriétaire de l’objet peut accorder au propriétaire du compartiment le contrôle total de l'objet en mettant à jour la liste ACL de celui-ci. Lors de l'écriture de nouveaux objets, vous pouvez spécifier la liste ACL bucket-owner-full-control lors d'une opération PUT ou COPY.

Pour qu'un utilisateur du compte A accorde une liste ACL bucket-owner-full-control prête à l’emploi aux objets du compte B, les autorisations suivantes doivent être accordées :

  • Le rôle ou l’utilisateur IAM du compte A doit accorder l'accès au compartiment du compte B
  • Votre politique de compartiment du compte B doit accorder l'accès au rôle ou à l'utilisateur IAM du compte A

Vous pouvez accorder un accès bucket-owner-full-control aux objets des manières suivantes :

  • Listes ACL prêtes à l’emploi
  • Opérations par lot S3 (pour les opérations par lot à grande échelle)

Remarque : veillez à vérifier la politique de point de terminaison d’un VPC lorsque vous ajoutez la liste ACL bucket-owner-full-control prête à l’emploi aux objets S3.

Résolution

Le rôle ou l’utilisateur IAM du compte A doit accorder l'accès au compartiment du compte B

Remarque : Si l’utilisateur ou le rôle IAM doit mettre à jour la liste ACL de l’objet lors du chargement, l’utilisateur doit avoir les autorisations pour s3:PutObjectAcl dans la politique IAM.

Créer un rôle IAM du compte A. Accordez les autorisations de rôle/d'utilisateur pour exécuter PutObjectAcl sur des objets du compte B.

L'exemple de politique suivant accorde au rôle IAM du compte A l'accès pour exécuter les actions GetObject, PutObject et PutObjectAcl sur les objets du compte B :

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "s3:PutObject",
                "s3:PutObjectAcl"
            ],
            "Resource": "arn:aws:s3:::AccountB-Bucket/*"
        }
    ]
}

Votre politique de compartiment du compte B doit accorder l'accès à l'utilisateur ou au rôle IAM du compte A

Les politiques de compartiment peuvent varier en fonction de l’exigence de la liste ACL prête à l’emploi lors des chargements d'objets. Par exemple, ces deux politiques de compartiment accordent l'accès à l'utilisateur ou au rôle IAM du compte A de différentes manières :

  • Politique 1 : autorise l'accès à l'utilisateur ou au rôle IAM du compte A sans exiger que les opérations PUT d’Amazon S3 incluent la liste ACL bucket-owner-full-control prête à l’emploi.
  • Politique 2 : impose à toutes les opérationsPUT d’Amazon S3 d'inclure la liste ACL bucket-owner-full-control prête à l’emploi.

Politique 1 : autorise l'accès à l'utilisateur ou au rôle IAM du compte A sans exiger que les opérations PUT d’Amazon S3 incluent une liste ACL bucket-owner-full-control prête à l’emploi

Pour autoriser l'accès au rôle IAM du compte A sans exiger qu'une liste ACL crée une politique de compartiment du compte B (dans lequel les objets sont chargés). Cette politique de compartiment doit accorder l'accès au rôle ou à l'utilisateur IAM du compte A. La politique de compartiment suivante permet au rôle du compte A d'exécuter les actionsGetObject, PutObject et PutObjectAcl sur les objets du compte B :

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::AccountA:role/AccountARole"
            },
            "Action": [
                "s3:GetObject",
                "s3:PutObject"
            ],
            "Resource": [
                "arn:aws:s3:::AccountB-Bucket/*"
            ]
        }
    ]
}

Politique 2 : impose à toutes les opérations PUT d’Amazon S3 d'inclure la liste ACL bucket-owner-full-control prête à l’emploi

La politique de compartiment suivante spécifie qu'un utilisateur ou un rôle du compte A peut charger des objets dans un compartiment du compte B (dans lequel les objets doivent être chargés). Les chargements ne peuvent être effectués que lorsque la liste ACL de l'objet est définie sur « bucket-owner-full-control ». Par exemple :

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "Only allow writes to my bucket with bucket owner full control",
            "Effect": "Allow",
            "Principal": {
                "AWS": [
                    "arn:aws:iam::AccountA:role/AccountARole"
                ]
            },
            "Action": [
                "s3:PutObject"
            ],
            "Resource": "arn:aws:s3:::AccountB-Bucket/*",
            "Condition": {
                "StringEquals": {
                    "s3:x-amz-acl": "bucket-owner-full-control"
                }
            }
        }
    ]
}

Remarque : Lorsque la politique de compartiment précédente est appliquée, l'utilisateur doit inclure la liste ACL bucket-owner-full-control prête à l’emploi lors de l'opérationPutObject. Dans le cas contraire, l'opération échoue, entraînant ainsi une erreur Accès refusé. Pour plus d'informations sur l’activation de la propriété de l’objet d'autres comptes AWS par Amazon S3, consultez la section Contrôle de la propriété des objets chargés à l'aide de la propriété de l’objet S3.

Fourniture d'un accès bucket-owner-full-control

Listes ACL prêtes à l’emploi

Pour accorder la liste ACL bucket-owner-full-control prête à l’emploi lors du chargement d'un objet, exécutez la commande put-object à partir du compte A (compte du propriétaire de l'objet) :

aws s3api put-object --bucket accountB-bucket --key example.txt --acl bucket-owner-full-control

Pour accorder la liste ACLbucket-owner-full-control prête à l’emploi lors d'une opération de copie, exécutez la commande copy-object à partir du compte A (compte du propriétaire de l'objet) :

aws s3api copy-object --copy-source accountA-bucket/example.txt --key example.txt --bucket accountB-bucket --acl bucket-owner-full-control

Vous pouvez également exécuter la commande cp à partir du compte A pour accorder la liste ACL bucket-owner-full-control prête à l’emploi :

aws s3 cp s3://accountA-bucket/test.txt s3://accountB-bucket/test2.txt --acl bucket-owner-full-control

Pour une opération de copie de plusieurs objets, le propriétaire de l'objet (compte A) peut exécuter la commande suivante :

aws s3 cp s3://accountA-bucket/ s3://accountB-bucket/ --acl bucket-owner-full-control --recursive

Si l'objet se trouve dans un compartiment d'un autre compte (compte B), le propriétaire de l'objet peut accorder l’accès au propriétaire du compartiment à l’aide de cette commande :

aws s3api put-object-acl --bucket accountB-bucket --key example.txt --acl bucket-owner-full-control

Opérations par lot S3

Pour ajouter une liste ACL bucket-owner-full-control prête à l’emploi sur un grand nombre d'objets Amazon S3, utilisez les Opérations par lot S3. Les Opérations par lot S3 peuvent effectuer une seule opération sur une liste d'objets que vous spécifiez. Vous pouvez même utiliser les Opérations par lot S3 pour définir des listes ACL sur un grand nombre d'objets. Les Opérations par lot S3 prennent en charge les listes ACL personnalisées et prêtes à l’emploi fournies par Amazon S3 avec un ensemble prédéfini d'autorisations d'accès.

Remarque : l'opérationReplace access control list (ACL) (Remplacer la liste de contrôle d'accès [ACL]) remplace les ACL Amazon S3 pour chaque objet répertorié dans le manifeste.

Considération supplémentaire

Accès autorisé par une politique de point de terminaison d'un VPC

Si un rôle IAM charge des objets sur S3 à l'aide d'une instance acheminée via un point de terminaison d'un Virtuel Private Cloud (VPC), vérifiez la politique de point de terminaison d'un VPC. Par exemple, si un objet est chargé sur S3 à l'aide d'une instance Amazon Elastic Compute Cloud (Amazon EC2) dans un VPC, vous devez consulter la politique de point de terminaison d’un VPC. Assurez-vous que la politique de point de terminaison accorde l'accès à l'action PutObjectAcl, de la manière suivante :

{
    "Statement": [
        {
            "Sid": "Access-to-specific-bucket-only",
            "Principal": "*",
            "Action": [
                "s3:PutObject",
                "s3:PutObjectAcl"
            ],
            "Effect": "Allow",
            "Resource": "arn:aws:s3:::AccountB-Bucket/*"
        }
    ]
}

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


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