Comment puis-je octroyer à certains objets de mon compartiment Amazon S3 l'accès public en lecture ?

Date de la dernière mise à jour : 15/04/2021

Je souhaite que certains objets de mon compartiment Amazon Simple Storage Service (Amazon S3) soient lisibles publiquement. Toutefois, je ne souhaite pas modifier les autorisations sur d'autres objets qui se trouvent dans le même compartiment. Comment dois-je procéder ?

Brève description

L'accès public en lecture peut être accordé de plusieurs manières :

  • Par la mise à jour de la liste de contrôle d'accès (ACL) de l'objet via la console Amazon S3
  • Par la mise à jour de la liste de contrôle d'accès (ACL) de l'objet via l'interface de ligne de commande AWS (AWS CLI)
  • Utiliser une stratégie de compartiment qui accorde un accès public en lecture à une balise d'objet spécifique
  • Utiliser une stratégie de compartiment qui accorde l'accès public en lecture à un préfixe spécifique

Solution

Important : avant de commencer, vérifiez que vous ne disposez pas de paramètres d'accès public bloqué au niveau du compte ou du compartiment. Vos paramètres ne doivent pas vous empêcher de rendre les objets publics. Par défaut, les paramètres de blocage d'accès public sont définis sur Vrai sur les nouveaux compartiments S3.

Mettre à jour la liste ACL de l'objet à l'aide de la console Amazon S3

Pour rendre publics plusieurs objets en même temps, procédez comme suit :

Attention : une fois que vous avez rendu plusieurs objets publics, vous ne pouvez pas annuler cette action pour plusieurs objets à la fois. Pour supprimer l'accès public, vous devez accéder à chaque objet de la console Amazon S3. Ensuite, à partir de l'onglet Autorisations de l'objet, modifiez Accès public. Vous devez le faire pour chaque objet pour lequel vous souhaitez annuler l'accès public que vous avez accordé. Veillez à bien vérifier la liste des objets avant de les rendre publics.

1.    Ouvrez la console Amazon S3.

2.    Dans la liste des compartiments, sélectionnez celui qui contient les objets à mettre à jour.

3.    Accédez au dossier contenant les objets.

4.    À partir de la liste des objets, sélectionnez tous les objets que vous souhaitez rendre publics.

5.    Choisissez Actions, puis Rendre public.

6.    Dans la boîte de dialogue Rendre public, vérifiez que la liste des objets est correcte.

7.    Choisissez Rendre public.

Pour rendre un seul objet public, procédez comme suit :

1.    Dans la console Amazon S3, sélectionnez le compartiment contenant l'objet à mettre à jour.

2.    Accédez au dossier qui contient l'objet.

3.    Ouvrez l'objet en sélectionnant le lien sur le nom de l'objet.

4.    Sélectionnez l'onglet Permissions (Autorisations).

5.    Sélectionnez Edit (Modifier).

6.    Dans la section Everyone (Tout le monde), sélectionnez Objects Read (Objets lus).

7.    Sélectionnez I understand the effects of these changes on this object (Je comprends les effets de ces modifications sur cet objet).

8.    Sélectionnez Save changes (Enregistrer les modifications).

Mettre à jour la liste ACL de l'objet à l'aide de l'interface de ligne de commande AWS

Pour un objet que vous avez déjà stocké dans Amazon S3, vous pouvez exécuter cette commande pour mettre à jour sa liste ACL pour un accès public en lecture :

aws s3api put-object-acl --bucket DOC-EXAMPLE-BUCKET --key exampleobject --acl public-read

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

Vous pouvez également exécuter cette commande pour accorder le contrôle complet sur l'objet au propriétaire du compte AWS et l'accès en lecture à tous les autres utilisateurs :

Remarque : pour la valeur de --grant-full-control, saisissez l'ID d'utilisateur canonique du compte.

aws s3api put-object-acl --bucket DOC-EXAMPLE-BUCKET --key exampleobject --grant-full-control id="008exampleA45666666668889999008853" --grant-read uri=http://acs.amazonaws.com/groups/global/AllUsers

Utiliser une stratégie de compartiment qui accorde un accès public en lecture à une balise d'objet spécifique

Important : avant de commencer, veillez à vérifier la tarification du balisage des objets S3.

Tout d'abord, ajoutez une stratégie de compartiment qui autorise l'accès public en lecture à tous les objets ayant une balise spécifique. Par exemple, cette stratégie autorise l'accès public en lecture pour tous les objets balisés avec la paire clé-valeur public=yes :

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*",
            "Condition": {
                "StringEquals": {
                    "s3:ExistingObjectTag/public": "yes"
                }
            }
        }
    ]
}

Ajoutez ensuite la balise aux objets que vous souhaitez rendre accessibles en lecture au public. Vous pouvez ajouter ou gérer des balises d'objet via la console Amazon S3. Vous pouvez également utiliser l'interface de ligne de commande AWS (AWS CLI).

Pour vérifier si un objet contient des balises existantes, exécutez la commande AWS CLI suivante :

aws s3api get-object-tagging --bucket DOC-EXAMPLE-BUCKET --key exampleobject

Pour ajouter une balise à un objet ne contenant aucune balise existante, exécutez la commande suivante :

Avertissement : Cette commande remplace toute balise d'objet existante.

aws s3api put-object-tagging --bucket DOC-EXAMPLE-BUCKET --key exampleobject --tagging 'TagSet={Key=public,Value=yes}'

Pour ajouter une balise à un objet contenant des balises existantes, exécutez la commande suivante : Veillez à inclure la nouvelle balise, ainsi que les balises existantes que vous souhaitez conserver.

aws s3api put-object-tagging --bucket DOC-EXAMPLE-BUCKET --key exampleobject --tagging 'TagSet=[{Key=public,Value=n},{Key=exampletag1,Value=one},{Key=exampletag2,Value=two}]'

Après avoir ajouté la balise d'objet, exécutez cette commande pour vérifier les balises de tous les objets :

aws s3api get-object-tagging --bucket DOC-EXAMPLE-BUCKET --key exampleobject

Utiliser une stratégie de compartiment qui accorde l'accès public en lecture à un préfixe spécifique

Avertissement : la stratégie de compartiment suivante accorde un accès public en lecture à tous les objets sous un préfixe spécifique. Avant d'utiliser cette stratégie de compartiment, vérifiez que votre cas d'utilisation prend en charge tous les objets lisibles publiquement dans le préfixe.

Pour accorder un accès public en lecture à un préfixe d'objet spécifique, ajoutez une stratégie de compartiment similaire à ce qui suit :

{
  "Version":"2012-10-17",
  "Statement":[
    {
      "Sid":"AddPerm",
      "Effect":"Allow",
      "Principal": "*",
      "Action":["s3:GetObject"],
      "Resource":["arn:aws:s3:::DOC-EXAMPLE-BUCKET/publicprefix/*"]
      }
  ]
}

Copiez ensuite les objets dans le préfixe avec un accès public en lecture. Vous pouvez copier un objet dans le préfixe en exécutant une commande similaire à ce qui suit :

aws s3 cp s3://DOC-EXAMPLE-BUCKET/exampleobject s3://DOC-EXAMPLE-BUCKET/publicprefix/exampleobject

Remarque : en fonction du préfixe de l'objet, il n'est pas nécessaire de copier celui-ci pour accorder un accès public en lecture.


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


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