首页 > 解决方案 > 限制 S3 静态网站对 Cloudfront 的访问

问题描述

我知道这是一个常见问题,但我对他们的解决方案没有成功。

我在 S3 上托管了两个网站:

它们可以公开访问,但我不希望任何人访问他们的 S3 url。所以我用StringEquals.

每个桶一个:

arn:aws:s3:::bucket.ca/* arn:aws:s3:::dev.bucket.ca/*

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "PublicReadForGetBucketObjects",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::dev.bucket.ca/*",
            "Condition": {
                "StringEquals": {
                    "aws:UserAgent": "random-hash"
                }
            }
        }
    ]
}

这是令人沮丧的部分。每次我对 Cloudfront 进行更改或对存储桶进行更改时,行为都是高度不一致的。

dev.bucket.ca似乎在其 S3 url 导致 Access Denied 的情况下按预期工作,并且我可以访问它的任何子路径dev.bucket.ca/*。所以我复制了这个配置bucket.ca,但结果总是 403。

检查回来dev.bucket.ca,我不再能够访问它的子路径。dev.bucket.ca/404结果为 403。

是否有可靠的方法来测试 S3 和 Cloudfront 配置?每次编辑 Cloudfront 时,更改的更新速度都很慢。我是否应该每次都擦除浏览器缓存并重新打开隐身模式以获得更可靠的结果?

标签: reactjsamazon-web-servicesamazon-s3amazon-cloudfront

解决方案


为了调试这个问题,我恢复了允许所有公开的策略:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "PublicReadForGetBucketObjects",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::dev.bucket.ca/*",
        }
    ]
}

该政策完全适用于bucket.cadev.bucket.ca。所以看起来这是我的条件问题。

"aws:UserAgent": "random-hash"

事实证明,自定义标题需要是User-Agent而不是UserAgent. 所以 Cloudfront 应该使用User-Agent它的自定义标头和 S3 策略来使用UserAgent.

我在部署 Cloudfront 后对此进行了测试,两个网站都正常运行。S3 存储桶也无法访问,这很棒。


工作方针:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "PublicReadForGetBucketObjects",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::dev.bucket.ca/*",
            "Condition": {
                "StringEquals": {
                    "aws:UserAgent": "RandomHash"
                }
            }
        }
    ]
}

使用以下云端设置:

Header Name: User-Agent

Value: MatchingRandomHash


推荐阅读