AWS CloudFront通过OAC访问S3返回access Denied



我有一个托管在S3桶上的静态网站。最初,我将桶完全公开,并将其设置为静态网站托管,同时测试cloudfront,一切都很好,我通过我的备用域名完美地访问了网站。然而,我现在想限制S3文件的可访问性,只允许通过cloudfront访问,但在遵循各种教程后,我被拒绝访问。

所以我遵循:https://repost.aws/knowledge-center/cloudfront-serve-static-website这也遵循了其他一些教程,我已经读过,他们都说同样的事情为OAC进程,但我得到访问拒绝时,试图访问我的网站。

我有我与公共访问S3 bucket现在完全禁用和静态网站禁用,我做了一个cloudfront起源与"征兆"请求访问控制设置和S3起源类型,在我cloudfront起源我选择了S3 bucket从原点域,选择来源访问控制和选择从列表中我起源访问刚刚创建,我离开使起源盾残疾,复制S3政策选择创建并保存更改。然后转到我从该原点选择的S3桶,并将其粘贴到policy字段中。所以它看起来像这样(用虚拟数据替换了我的帐户信息,但在实际的策略中,我已经确认它是正确的):

{
"Version": "2008-10-17",
"Id": "PolicyForCloudFrontPrivateContent",
"Statement": [
{
"Sid": "AllowCloudFrontServicePrincipal",
"Effect": "Allow",
"Principal": {
"Service": "cloudfront.amazonaws.com"
},
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::examplebucketid/*",
"Condition": {
"StringEquals": {
"AWS:SourceArn": "arn:aws:cloudfront::11736596049:distribution/E1OS67E245W70W"
}
}
}
]
}

如果我转到cloudfront origins选项卡,我可以看到原始域是我的S3桶,原始访问是我刚刚设置的访问控制的id。

在S3上,我有对象所有权- Bucket所有者强制执行,静态网站托管被禁用,我确实有CORS设置,但我也尝试过没有它们。仅供参考,尽管它们目前是:

[
{
"AllowedHeaders": [
"*"
],
"AllowedMethods": [
"GET",
"HEAD"
],
"AllowedOrigins": [
"*"
],
"ExposeHeaders": [],
"MaxAgeSeconds": 3000
}
]

它的默认行为选择S3桶作为源,并将HTTP重定向到HTTPS。发行版的默认根对象也是/index.html,它被正确地上传到S3桶中,并且在将S3设置为私有之前正常工作。

我已经环顾四周并遵循教程,甚至尝试了从新鲜的S3和cloudfront分发实例,但我得到了相同的结果访问拒绝。我也尝试使用OAI,让CloudFront自己更新我的S3策略,但仍然被拒绝访问。在测试之前,我也会等待任何云前端的更改被完全部署,但结果是一样的。

有什么我需要更改或可以检查的吗?我已经找了几个小时,我看到的每个教程或其他帖子都来自旧版本的AWS界面,其中选项不一样,或者只是显示我遵循的内容,除了他们的工作。

以前我有默认的根对象作为/index.html,所以我认为这将保持不变,因为它在S3设置为静态网站主机时起作用,但将其更改为index.html解决了这个问题。我猜权限设置是正确的,只是默认的根对象设置不正确。

最新更新