我的目的是让我的静态网站文件(在React中,如果是这样的话)只能通过我的域访问,而不能直接通过S3 URL访问。它似乎可以在我自己的计算机上运行(尽管存储桶公开时可能是CloudFront缓存),但是其他客户端仅接收XML格式的S3消息。请求没有任何路径的域将给出响应。请求任何路径(例如/index.html,这是我的存储桶中的文件)都会给出带有代码NoSuchKey的响应。
我在做什么错?这是当前的配置。
编辑:我的存储桶策略(我需要添加其他操作吗?)
{
"Version": "2008-10-17",
"Id": "PolicyForCloudFrontPrivateContent",
"Statement": [
{
"Sid": "1",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity EZOBXXXXXXXXX"
},
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::subdomain.mydomain.com/*"
}
]
}
答案 0 :(得分:1)
两个更改使它运行良好。 感谢Michael的帮助。
sync
命令时引用了相同原始访问身份的规范用户ID。 在package.json脚本中:"deploy": "aws s3 sync build/ s3://subdomain.mydomain.com --delete --grants read=id=S3CANONICALIDOFORIGINACCESSIDENTITY"
/index.html
向我的CloudFront发行版发出无效消息,然后在我的应用程序似乎未更新时感到困惑。我认为这是因为尽管index.html
始终为用户服务,但从未明确请求它。我的路线看起来像/
或/dashboard
,但并未失效。 现在,我通过使/*
无效来清除CloudFront缓存。