Pourquoi m'est-il impossible de charger le contenu du site web présent dans mon compartiment Amazon S3 depuis un autre compte AWS ?

Lecture de 6 minute(s)
0

J'utilise un compartiment Amazon Simple Storage Service (Amazon S3) pour stocker le contenu de mon site web. L'utilisateur d'un autre compte AWS a chargé un objet destiné au site web dans mon compartiment. Ma politique de compartiment est correcte, mais l'objet ne se charge pas sur le site web.

Brève description

Lorsque des listes de contrôle d'accès (ACL) sont activées dans votre compartiment, vous n'êtes pas propriétaire des objets que d'autres comptes AWS chargent dans votre compartiment, et ce par défaut. Par conséquent, il se peut que vous ne puissiez pas lire l'objet. Le compte qui a chargé l'objet doit explicitement vous accorder, au titre de propriétaire du compartiment, des autorisations sur cet objet.

De plus, une politique de compartiment ne s'applique pas aux objets du compartiment qui appartiennent à d'autres comptes. Par conséquent, la politique de compartiment qui accorde un accès en lecture aux utilisateurs de votre site web ne s'applique pas automatiquement aux objets chargés par d'autres comptes.

Pour résoudre ce problème, appliquez l'une des méthodes suivantes :

  • Désactivez les ACL sur votre compartiment S3 (bonne pratique).
  • Demandez au propriétaire de l'objet d'accorder un accès public en lecture à l'objet.
  • Demandez au propriétaire de l'objet de vous accorder le contrôle total de l'objet.

Résolution

Désactiver les ACL sur le compartiment S3 (bonne pratique)

Pour désactiver les ACL sur votre compartiment Amazon S3, sélectionnez le paramètre Propriétaire du compartiment appliqué, un paramètre de propriété d'objets. L'application de ce paramètre désactive l'ACL. Vous devenez alors automatiquement propriétaire de tous les objets de votre compartiment et vous en avez le contrôle total. Même pour les objets chargés entre comptes, la propriété de ces objets appartient au propriétaire du compartiment. Le propriétaire du compartiment contrôle également la politique de compartiment qui accorde l'accès en lecture et qui s'applique à ces objets.

Conditions préalables

Avant de désactiver les ACL, consultez l'article Conditions préalables à la désactivation des ACL.

Désactiver les ACL

  1. Ouvrez la console Amazon S3.
  2. Sélectionnez Compartiments, puis le nom du compartiment auquel vous souhaitez appliquer un paramètre Propriété d'objet S3.
  3. Cliquez sur l'onglet Autorisations.
  4. Sous Propriété de l'objet, sélectionnez Modifier.
  5. Sous Propriété de l’objet, sélectionnez Propriétaire du compartiment appliqué.
  6. Cliquez sur Enregistrer.

Si votre cas d'utilisation ne vous permet pas de désactiver les ACL, utilisez l'une des méthodes alternatives ci-après.

Demander au propriétaire de l'objet d'accorder un accès public en lecture à l'objet

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

Le compte qui a chargé l'objet peut accorder à l'objet un accès public en lecture. Pour ce faire, exécutez cette commande de l'interface de la ligne de commande AWS (AWS CLI) :

aws s3api put-object-acl --bucket docexamplebucket --key example.jpg --acl public read

Remarque : remplacez --bucket par le nom du compartiment qui stocke le contenu de votre site web.

Demander au propriétaire de l'objet de vous en accorder le contrôle total

Les propriétaires d'objets peuvent automatiquement accorder le contrôle total d'un objet au propriétaire du compartiment. Pour ce faire, activez Propriétaire de l'objet S3 sur le compartiment de destination. Cela confère au propriétaire du compartiment le contrôle lorsque le propriétaire de l'objet charge un objet, et inclut la liste ACL prédéfinie bucket-owner-full-control.

Une fois que le propriétaire du compartiment a configuré sa propriété d'objet S3 avec le paramètre Propriétaire du compartiment préféré, le propriétaire du compartiment peut ajouter une autre politique de compartiment. Cette politique de compartiment supplémentaire doit exiger que toutes les opérations PUT d'Amazon S3 incluent la liste ACL prédéfinie bucket-owner-full-control. Cette liste ACL accorde au propriétaire du compartiment le contrôle total des nouveaux objets.

Pour accorder au propriétaire du compartiment le contrôle total de l'objet, le compte qui a chargé ce dernier doit utiliser la syntaxe de l'interface de la ligne de commande lors du chargement de l'objet :

aws s3api put-object --bucket docexamplebucket --key example.jpg --acl bucket-owner-full-control

Le propriétaire du compartiment est désormais propriétaire de l'objet qui hérite, quant à lui, du jeu d'autorisations défini dans la politique de compartiment.

Pour un objet existant chargé avant l'activation de Propriétaire de l'objet S3, le propriétaire de l'objet doit accorder au propriétaire du compartiment des autorisations sur cet objet. Le propriétaire du compartiment doit ensuite répliquer l'objet lui-même.

Pour accorder au propriétaire du compartiment le contrôle total de l'objet, le compte qui a chargé ce dernier doit utiliser la syntaxe de la CLI :

aws s3api put-object-acl --bucket docexamplebucket --key example.jpg --acl bucket-owner-full-control

Pour hériter de la propriété de l'objet, le propriétaire du compartiment doit répliquer l'objet lui-même :

aws s3 cp s3://docexamplebucket/example.jpg s3://docexamplebucket/example.jpg --acl bucket-owner-full-control

Le propriétaire du compartiment est désormais propriétaire de l'objet qui hérite, quant à lui, du jeu d'autorisations défini dans la politique de compartiment.

Exiger que les chargements inter-comptes accordent au propriétaire du compartiment le contrôle total de l'objet

Pour exiger que tous les chargements (s3:PutObject) depuis un autre compte accordent au propriétaire du compartiment le contrôle total des objets, utilisez une politique de compartiment semblable à celle qui est indiquée dans cet exemple :

{
  "Id": "Policy1541018284691",
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "RequireBucketOwnerFullControlOnPuts",
      "Principal": {
        "AWS": [
          "arn:aws:iam::111122223333:user/iam_user"
        ]
      },
      "Action": [
        "s3:PutObject"
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:s3:::docexamplebucket/*",
      "Condition": {
        "StringEquals": {
          "s3:x-amz-acl": "bucket-owner-full-control"
        }
      }
    }
  ]
}

Avec cette politique de compartiment, l'utilisateur de l'autre compte (111122223333) ne peut effectuer de chargement vers le compartiment que s'il spécifie l'ACL de l'objet. L'ACL de l'objet doit accorder un contrôle total au propriétaire du compartiment. L'autre utilisateur du compte doit ensuite charger les objets, comme dans cette commande :

aws s3 cp path/to/local/file s3://docexamplebucket --acl bucket-owner-full-control

Informations connexes

Autorisation des demandes dans Amazon S3

Consignes relatives à la stratégie d'accès

Définition des autorisations pour l’accès à un site web

Contrôle de l'accès à un compartiment avec des stratégies d'utilisateur

AWS OFFICIEL
AWS OFFICIELA mis à jour il y a 8 mois