web-dev-qa-db-fra.com

Création d'une stratégie de compartiment S3 qui autorise l'accès à Cloudfront mais restreint l'accès à toute autre personne

J'ai la politique suivante:

{
        "Version": "2008-10-17",
        "Id": "PolicyForCloudFrontPrivateContent",
        "Statement": [
            {
                "Sid": "Stmt1395852960432",
                "Action": "s3:*",
                "Effect": "Deny",
                "Resource": "arn:aws:s3:::my-bucket/*",
                "Principal": {
                    "AWS": [
                        "*"
                    ]
                }
            },
            {
                "Sid": "1",
                "Effect": "Allow",
                "Principal": {
                    "AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity E1IYJC432545JN"
                },
                "Action": "s3:GetObject",
                "Resource": "arn:aws:s3:::my-bucket/*"
            }
        ]
    }

Cependant, cela refuse les demandes de tous les demandeurs, même Cloudfront. Quelle est la bonne façon de procéder?

Le problème est que les objets sont créés par le client avec une lecture publique. Je n'ai actuellement aucun contrôle immédiat sur le client pour modifier ce paramètre. Donc, ce que je veux, c'est avoir une politique qui remplace l'ACL d'objet individuel. Donc refus par défaut ici ne fonctionne pas.

19
Snowman

La politique S3 ressemblera à quelque chose comme ceci:

{
"Version": "2008-10-17",
"Id": "PolicyForCloudFrontPrivateContent",
"Statement": [
    {
        "Sid": "1",
        "Effect": "Allow",
        "Principal": {
            "AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity XXXXXXXXXXX"
        },
        "Action": "s3:GetObject",
        "Resource": "arn:aws:s3:::YYYYYYYYYYYYY.com/*"
    }
 ]
}

Mais, je ne l'ai pas généré manuellement. Lorsque vous ajoutez une origine (S3) dans cloudfront, vous avez la possibilité de "restreindre l'accès au compartiment" - dites "oui" ici et continuez. La configuration Cloudfront fera le reste automatiquement pour vous.

Détails ici: tilisation d'une identité d'accès d'origine pour restreindre l'accès à votre contenu Amazon S3 - Amazon CloudFront .

20
Sony Kadavan

Voilà ce que vous recherchez. Remplacez XXXXXXXXXXXXXX par votre identifiant d'accès d'origine

{
"Version": "2012-10-17",
"Statement": [
    {
        "Sid": "AddPerm",
        "Effect": "Deny",
        "NotPrincipal": {
            "AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity XXXXXXXXXXXXXX"
        },
        "Action": "s3:GetObject",
        "Resource": "arn:aws:s3:::your.bucket.com/*"
    },
    {
        "Sid": "2",
        "Effect": "Allow",
        "Principal": {
            "AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity XXXXXXXXXXXXXX"
        },
        "Action": "s3:GetObject",
        "Resource": "arn:aws:s3:::your.bucket.com/*"
    }
]
}
9