Lorsque d'autres comptes AWS chargent des objets dans mon compartiment Amazon S3, comment puis-je exiger qu'ils me concèdent la propriété de ces objets ?

Date de la dernière mise à jour : 26/04/2019

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 procéder ? 

Résolution

Ajoutez une stratégie de compartiment qui autorise les utilisateurs à charger des objets dans votre compartiment à condition de vous (le propriétaire du compartiment) octroyer un contrôle total des objets.

Par exemple, cette stratégie de compartiment spécifie que ExampleUser peut charger des objets dans awsexamplebucket uniquement lorsque la liste de contrôle d'accès (ACL) de l'objet est définie 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:::awsexamplebucket/*",
            "Condition": {
                "StringEquals": {
                    "s3:x-amz-acl": "bucket-owner-full-control"
                }
            },
            "Principal": {
                "AWS": [
                    "arn:aws:iam::111122223333:user/ExampleUser"
                ]
            }
        }
    ]
}

Une fois cette stratégie de compartiment ajoutée, les utilisateurs doivent définir la liste de contrôle d'accès (ACL) des objets sur bucket-owner-full-control lors de la demande de chargement, comme suit :

aws s3 cp example.jpg s3://awsexamplebucket --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 awsexamplebucket --key example.jpg --acl bucket-owner-full-control