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

Date de la dernière mise à jour : 20/10/2020

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

Ré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 qui vous empêchent 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 :

Avertissement : après avoir rendu plusieurs objets publics, il n'y a aucune option pour 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 le compartiment contenant 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 Autorisations.
  5. Sous Accès public, choisissez Tout le monde.
  6. Dans la boîte de dialogue Tout le monde, pour Accès à l'objet, sélectionnez Lire l'objet.
  7. Sélectionnez Enregistrer.

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 de commandes AWS CLI, assurez-vous d'utiliser la version la plus récente de l'interface de ligne de commande AWS (AWS CLI).

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 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

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


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