【问题标题】:Creating an S3 bucket policy that allows access to Cloudfront but restricts access to anyone else创建允许访问 Cloudfront 但限制其他任何人访问的 S3 存储桶策略
【发布时间】:2014-05-05 06:37:05
【问题描述】:

我有以下政策:

{
        "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/*"
            }
        ]
    }

但是,这会拒绝所有请求者的请求,包括 Cloudfront。这样做的正确方法是什么?

问题是对象是由具有公共读取的客户端创建的。我目前无法立即控制客户端来更改此设置。所以我想要的是有一个覆盖单个对象 ACL 的策略。所以这里的默认拒绝是行不通的。

【问题讨论】:

    标签: amazon-s3 amazon-cloudfront


    【解决方案1】:

    S3 策略如下所示:

    {
    "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/*"
        }
     ]
    }
    

    但是,我没有手动生成这个。当您在云端添加源 (S3) 时,您可以选择“限制存储桶访问” - 在此处选择“是”并继续前进。 Cloudfront 配置会自动为您完成其余的工作。

    这里有详细信息:Using an Origin Access Identity to Restrict Access to Your Amazon S3 Content - Amazon CloudFront

    【讨论】:

    • 我遇到了同样的问题。 AWS 手册页很难阅读。对我来说,添加身份后我错过了Origins 选项卡和Yes, Update Bucket Policy
    【解决方案2】:

    这就是你要找的。将 XXXXXXXXXXXXXXX 替换为您的原始访问 ID

    {
    "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/*"
        }
    ]
    }
    

    【讨论】:

    • 如果您仍然收到基于 XML 的 AccessDenied 错误,请确保在 CloudFront 分配中的“常规”选项卡下指定您的默认根对象。
    • 在将策略添加到 S3 存储桶后,通过 CloudFront 域访问我的 S3 存储桶时,我仍然遇到拒绝访问。
    猜你喜欢
    • 2018-05-29
    • 2018-10-27
    • 2020-12-18
    • 1970-01-01
    • 2019-04-13
    • 1970-01-01
    • 2021-06-28
    • 2019-10-07
    • 1970-01-01
    相关资源
    最近更新 更多