TL;DR - 如何https://s3-eu-west-1.amazonaws.com/BUCKET-NAME/FILE.EXT
在允许来自 CloudFront 的请求的同时阻止请求?
我遵循了 AWS 文档“ Restricting Access to Amazon S3 Content by Using an Origin Access Identity ”,这似乎已经过测试并且工作得几乎完美(在我的情况下使用备用域名集),但是当我尝试使用 URL 时......
https://s3-eu-west-1.amazonaws.com/BUCKET-NAME/index.html
...返回 index.html 文档!更糟糕的是,我可以按照这个约定访问存储桶中的任何对象。我的理解是这不应该发生,只有 CloudFront URL 应该返回对象。
S3 存储桶的静态网站托管已禁用。访问 S3 端点 URL 会http://BUCKET-NAME.s3-website-eu-west-1.amazonaws.com/index.html
返回 404(代码为“NoSuchWebsiteConfiguration”),这是预期的结果。有人可以解释为什么其他链接有效,而不是返回 403 或 404 错误吗?
当我设置 CloudFront 分配时,对于“授予对存储桶的读取权限”选项,我选择了“是,更新存储桶策略”,这产生了现在使用的 S3 存储桶策略:
{
"Version": "2008-10-17",
"Id": "PolicyForCloudFrontPrivateContent",
"Statement": [
{
"Sid": " Grant a CloudFront Origin Identity access to support private content",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity XXXXXXXXXXXXXX"
},
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::BUCKET-NAME/*"
}
]
}
如果您在上传对象时将对象设置为公开(或随后设置为公开),这将是预期的结果。如果它们是公开的,那么它们就是公开的,所以 S3 允许它们被访问。
原始访问身份实际上并不“限制访问”。它们允许通过 CloudFront 访问非公共对象。
您引用的文档页面中提到了这一点。
这话不好说。这就是它的实际含义。