Lorsque d'autres comptes AWS téléchargent des objets dans mon compartiment Amazon S3, comment puis-je exiger qu'ils me donnent le contrôle total des objets ?

Dernière mise à jour : 05/01/2021

Je souhaite que les utilisateurs d'autres comptes AWS puissent charger des objets dans mon compartiment Amazon Simple Storage Service (Amazon S3). Toutefois, je veux également exiger de ces utilisateurs qu'ils m'octroient le contrôle total de ces objets. Comment dois-je procéder ?

Résolution

Ajoutez une stratégie de compartiment qui oblige les utilisateurs à inclure la liste de contrôle d'accès ACL bucket-owner-full-control lorsqu'ils chargent des objets dans votre compartiment.

Par exemple, cette stratégie de compartiment spécifie que ExampleUser peut charger des objets vers DOC-EXAMPLE-BUCKET uniquement lorsque l'ACL de l'objet est configurée sur bucket-owner-full-control :

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

Après avoir ajouté cette stratégie de compartiment, les utilisateurs doivent inclure la liste ACL requise dans le cadre de la demande de téléchargement, comme suit :

aws s3 cp example.jpg s3://DOC-EXAMPLE-BUCKET --acl bucket-owner-full-control

Si les utilisateurs ne respectent pas cette condition de liste ACL dans leur demande de chargement, ils reçoivent le message d'erreur « An error occurred (AccessDenied) when calling the PutObject operation: Access Denied » (Une erreur s'est produite (AccessDenied) lors de l'appel de l'opération PutObject : Accès refusé).

Pour les objets existants du compartiment qui sont détenus par d'autres comptes, le propriétaire de l'objet peut exécuter une commande put-object-acl pour vous accorder le contrôle total :

aws s3api put-object-acl --bucket DOC-EXAMPLE-BUCKET --key example.jpg --acl bucket-owner-full-control

L’ACL du propriétaire du compartiment donne au propriétaire du compartiment un accès complet à un objet téléchargé par un autre compte, mais cette ACL seule ne confère pas la propriété de l'objet. Pour obtenir automatiquement la propriété des objets téléchargés à l'aide de la liste ACL de contrôle complet du seau, définissez la propriété d'objet S3 sur Propriétaire du compartiment préféré. Une fois que vous avez mis à jour la propriété d'objet S3, les nouveaux objets chargés avec la liste ACL bucket-owner-full-control sont automatiquement détenus par le compte du compartiment.