Comment puis-je modifier la propriété d'objets détenus publiquement (de façon anonyme) dans mon compartiment Amazon S3 ?

Dernière mise à jour : 23/07/2021

Mon compartiment Amazon Simple Storage Service (Amazon S3) possède un objet avec la propriété publique (anonyme). Comment puis-je modifier la propriété de l'objet pour que mon compte AWS soit le propriétaire de l'objet ?

Brève description

Par défaut, un objet Amazon S3 appartient à l'identité qui a téléchargé l'objet. Autrement dit, les objets téléchargés par des utilisateurs publics (anonymes) sont détenus publiquement si vous autorisez un accès public en écriture à votre compartiment. Pour éviter les problèmes de sécurité, il est recommandé de bloquer l'accès public à votre compartiment.

Si un objet a déjà été téléchargé dans votre compartiment par un utilisateur anonyme et que vous souhaitez modifier la propriété d'un objet, modifiez l'ACL de l'objet. Modifiez l'ACL de l'objet pour accorder au propriétaire du compartiment (votre compte AWS) le contrôle total de l'objet.

Remarque : Vous pouvez également vous servir de la d'Amazon S3 Object Ownership pour le contrôle de la propriété des objets téléchargés par un autre compte AWS.

Solution

Suivez ces étapes pour remplacer la propriété de l'objet par le compte AWS qui possède le compartiment :

1.    Pour ajouter une liste ACL d'objet, exécutez la commande put-object-acl à l'aide de l'interface de ligne de commande AWS (AWS CLI). Incluez l'option --acl avec la valeur bucket-owner-full-control pour ajouter une liste ACL qui accorde au propriétaire du compartiment le contrôle de l'objet. Ensuite, incluez l'option --no-sign-request pour utiliser des informations d'identification anonymes pour la demande. La commande put-object-acl complète avec les options dont vous avez besoin ressemble à ceci :

aws s3api put-object-acl --bucket DOC-EXAMPLE-BUCKET --key awsexampleobject  --acl bucket-owner-full-control   --no-sign-request

Remarque : si vous recevez des erreurs lors de l'exécution de commandes depuis AWS CLI, assurez-vous que vous utilisez la version AWS CLI la plus récente.

2.    Pour appliquer le changement de propriété, vous devez copier l'objet sur lui-même. Pour ce faire, vous pouvez exécuter la commande cp, qui ressemble à ceci :

aws s3 cp s3://DOC-EXAMPLE-BUCKET/awsexampleobject  s3://DOC-EXAMPLE-BUCKET/awsexampleobject --storage-class STANDARD

Remarque : Modifiez la valeur --storage-class dans l'exemple de commande par la classe de stockage applicable à votre cas d'utilisation. En outre, assurez-vous d'inclure d'autres options de commande cp dont vous avez besoin pour votre objet.

3.    Pour vérifier le changement de propriété, exécutez la commande get-object-acl, qui ressemble à ceci :

aws s3api get-object-acl --bucket DOC-EXAMPLE-BUCKET --key awsexampleobject

La commande renvoie une sortie qui affiche le propriétaire de l'objet, et qui ressemble à ceci :

{
    "Owner": {
        "DisplayName": "jane",
        "ID": "75050348ef85628a0977bexamplebdbc3062ce76f35cb463345ae65c2608d099"
    },
    "Grants": [
        {
            "Grantee": {
                "DisplayName": "jane",
                "ID": "75050348ef85628a0977bexamplebdbc3062ce76f35cb463345ae65c2608d099",
                "Type": "CanonicalUser"
            },
            "Permission": "FULL_CONTROL"
        }]}

4.    Si la gestion des versions est activée sur le compartiment, vous devez également supprimer la version précédente de l'objet qui a été générée à partir de la commande cp à l'étape 2. La version précédente de l'objet a la propriété publique (anonyme). Pour supprimer cette version d'objet, exécutez d'abord la commande list-object-versions sur le compartiment. Incluez l'option --prefix de la commande pour filtrer les résultats sur l'objet qui avait la propriété publique :

aws s3api list-object-versions --bucket DOC-EXAMPLE-BUCKET --prefix example.txt

À partir de la sortie de la commande, copiez l'ID de version de la version de l'objet qui avait la propriété publique. Ensuite, exécutez la commande delete-object pour l'ID de version que vous souhaitez supprimer :

aws s3api delete-object --bucket DOC-EXAMPLE-BUCKET --key example.txt --version-id 'example.d6tjAKF1iObKbEnNQkIMPjj'

Avertissement : vérifiez attentivement l'ID de version pour vous assurer qu'il s'agit bien de celui de la version d'objet avec une propriété publique. Si vous supprimez une version d'objet, elle ne peut pas être récupérée.