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

Date de la dernière mise à jour : 23/12/2020

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 S3 appartient à l'identité qui a chargé l'objet. Autrement dit, les objets 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 est déjà chargé dans votre compartiment par un utilisateur anonyme et que vous souhaitez que votre compte AWS soit propriétaire de l'objet, vous devez modifier la liste de contrôle d'accès (ACL) de l'objet. Modifiez la liste ACL de l'objet pour accorder au propriétaire du compartiment (votre compte) le contrôle total de l'objet.

Ré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 : veillez à modifier 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 le contrôle de version est activé 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.


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


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