我看过一些指南,允许aws用户将bucket设为私有,但通过cloudfront服务其中的一些对象。我一直试图做同样的一个完整的静态站点托管在s3桶,似乎没有什么工作。但我找不到任何明确的证据告诉我这是不可能的。
是否可以在私有bucket中使用S3静态网站托管功能?用户是否只能通过cloudfront分发访问站点,而不能通过s3桶URL的适当访问?
首先,当您使用S3静态网站功能时,OAI不起作用。
最好的方法是在cloudfront中添加一个自定义标题。生成一个复杂的长字符串,就像它是一个密码一样,并在引用头中传递它。
然后添加一个桶策略,允许每个人(principal: "*")执行一个geobject,但条件是指定了一个特定的头。
桶策略示例:
{
"Version":"2012-10-17",
"Statement":[
{
"Sid":"Allow get requests originating from your Cloudfront distribution.",
"Effect":"Allow",
"Principal":"*",
"Action":["s3:GetObject","s3:GetObjectVersion"],
"Resource":"arn:aws:s3:::YOUR_BUCKET_NAME/*",
"Condition":{
"StringLike":{"aws:Referer": "9vzeMAVjTKCWXjbBNFsCnNRsPKqMYk6achgLXu5S"}
}
}
]
}
不要忘记在bucket上禁用S3公共访问块功能。
您可以在这里找到更完整的指南:https://aws.amazon.com/premiumsupport/knowledge-center/cloudfront-serve-static-website/?nc1=h_ls