J'utilise un compartiment Amazon Simple Storage Service (Amazon S3) pour stocker du contenu pour mon site Web. Un utilisateur à partir d'un autre compte AWS a chargé un objet sur mon compartiment pour le site Web. Ma stratégie de compartiment est correcte, mais l'objet ne chargera pas sur le site Web. Comment résoudre ce problème ?

Si un autre compte AWS charge un objet sur votre compartiment, vous ne possédez l'objet par défaut, et il est possible que vous ne puissiez pas lire l'objet par défaut. Le compte du chargement doit explicitement vous (propriétaire du compartiment) accorder les autorisations concernant l'objet.

En outre, une stratégie de compartiment ne s'applique pas aux objets du compartiment qui sont la propriété d'autres comptes. C'est pourquoi la stratégie de compartiment qui accorde l'accès en lecture aux utilisateurs de votre site Web ne s'applique pas automatiquement aux objets chargés par un autre compte.

Pour résoudre le problème de chargement, modifiez la liste de contrôle d'accès (ACL) de l'objet à l'aide de l'une de ces méthodes :

  • Le propriétaire de l'objet accorde un accès en lecture public aux objets.
  • Le propriétaire de l'objet accorde au propriétaire du compartiment le contrôle total de l'objet. Ensuite, le propriétaire du compartiment copie l'objet et le remplace pour hériter de sa propriété.

Tenez compte des éléments suivants pour l'octroi de l'accès à un compartiment à un autre compte :

  • Les objets téléchargés vers un compartiment par un autre compte ne peuvent pas être lus par le compte du compartiment par défaut. Le compte qui a téléchargé l'objet doit explicitement mettre à jour la liste de contrôle d'accès (ACL) pour accorder des autorisations de lecture.
  • Les objets téléchargés vers un compartiment par un autre compte n'héritent pas automatiquement des autorisations définies dans la stratégie de compartiment. Le propriétaire du compartiment doit s'approprier l'objet pour appliquer la stratégie de compartiment.
  • Si vous souhaitez autoriser un autre compte à accéder à votre compartiment, nous vous recommandons d'utiliser une stratégie de compartiment, qui est une méthode centralisée et complète pour gérer les autorisations.
  • Si vous souhaitez autoriser un autre compte à télécharger des objets dans votre compartiment, nous vous recommandons de créer un rôle AWS Identity and Access Management (IAM) à partir de votre compte et que l'autre compte ne peut endosser. Lorsque l'autre compte utilise le rôle IAM pour charger des objets, votre compte devient propriétaire des objets, car le rôle lui appartient. Pour obtenir un exemple de configuration de plusieurs comptes à l'aide d'un rôle IAM, consultez Attribution par le propriétaire du compartiment d'autorisations entre comptes pour un objet qu'il ne possède pas.

Le propriétaire de l'objet accorde l'accès en lecture public de l'objet.

Le compte qui a téléchargé l'objet peut accorder l'accès en lecture public en exécutant cette commande de l'interface de ligne de commande AWS (CLI AWS) :

Remarque : pour la valeur --bucket, saisissez le nom du compartiment qui stocke le contenu de votre site Web.

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

Ensuite, si le trafic vers l'objet doit être restreint, le propriétaire du compartiment peut utiliser une stratégie de compartiment pour autoriser l'accès uniquement lorsque la demande est émise depuis certaines adresses IP ou d'un Amazon Virtual Private Cloud (VPC).

Par exemple, cette stratégie de compartiment refuse l'accès aux objets dans awsexamplebucket, sauf si la demande est émise depuis les adresses IP répertoriées en tant que « aws:SourceIp », ou depuis le VPC défini comme « aws:sourceVpc » :

{
    "Version": "2012-10-17",
    "Id": "Policy1415115909152",
    "Statement": [
        {
            "Sid": "Deny-Access-Except-For-Trusted-IPs-and-VPC",
            "Effect": "Deny",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::awsexamplebucket/*",
            "Condition": {
                "NotIpAddress": {
                    "aws:SourceIp": [
                        "1.1.1.1/32",
                        "2.2.2.2/32",
                        "3.3.3.3/32"
                    ]
                },
                "StringNotEquals": {
                    "aws:sourceVpc": "vpc-12345abc"
                }
            }
        }
    ]
}

Le propriétaire de l'objet accorde au propriétaire du compartiment le contrôle total de l'objet.

Le compte qui téléchargé l'objet peut accorder au propriétaire du compartiment le contrôle total de l'objet en exécutant la commande d'interface de ligne de commande AWS suivante :

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

Ensuite, le propriétaire du compartiment doit copier l'objet et le remplacer pour hériter de sa propriété. Le propriétaire du compartiment peut exécuter la commande suivante :

aws s3 cp s3://awsexamplebucket/example.jpg s3://awsexamplebucket/example.jpg --storage-class STANDARD

Le propriétaire du compartiment possède à présent l'objet, ce qui signifie que ce dernier hérite des autorisations définies dans la stratégie 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) à partir d'un autre compte accordent au propriétaire du compartiment le contrôle total de l'objet, vous pouvez utiliser une stratégie de compartiment similaire à ce qui suit :  

{
    "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:::awsexamplebucket/*",
            "Condition": {
                "StringEquals": {
                    "s3:x-amz-acl": "bucket-owner-full-control"
                }
            }
        }
    ]
}

Grâce à cette stratégie de compartiment, l'utilisateur peut effectuer des chargements sur le compartiment à partir de l'autre compte (111122223333) uniquement lorsqu'il spécifie que la liste de contrôle d'accès (ACL) de l'objet accorde au propriétaire du compartiment un contrôle total. L'utilisateur doit charger des objets à l'aide d'une commande similaire à celle qui suit :

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

Cette page vous a-t-elle été utile ? Oui | Non

Retour au Centre de connaissances AWS Support

Vous avez besoin d'aide ? Consultez le site du Centre AWS Support.

Date de publication : 19/03/2019