【发布时间】:2019-11-17 01:34:30
【问题描述】:
我知道这是一个常见问题,但我没有通过他们的解决方案获得成功。
我在 S3 上托管了两个网站:
- bucket.ca(允许
*.bucket.ca) - dev.bucket.ca(允许
dev.bucket.ca)
它们可以公开访问,但我不希望任何人访问他们的 S3 网址。所以我用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 导致访问被拒绝,我可以访问其任何子路径 dev.bucket.ca/*。所以我为bucket.ca复制了这个配置,但结果总是403。
查看dev.bucket.ca,我无法再访问它的子路径。 dev.bucket.ca/404 结果为 403。
是否有可靠的方法来测试 S3 和 Cloudfront 配置?每次编辑 Cloudfront 时,更改的更新速度都很慢。我是否应该每次都清除浏览器缓存并重新打开隐身模式以获得更可靠的结果?
【问题讨论】:
-
我探索了这种方法。根据文档,它不适用于托管在 S3 上的静态网站。我也不明白为什么,所以很高兴知道。
-
@Dan 我认为这是因为通过 S3 端点的访问是直接的并且在 IAM 的控制下,而通过 S3 Web HTTP 端点的访问是像任何其他的公共 HTTP 访问一样,阻止 IAM 能够确定它们是否来自给定的 AWS 服务。
标签: reactjs amazon-web-services amazon-s3 amazon-cloudfront