我有一个s3存储桶,用于托管通过Cloudfront访问的静态站点。
我希望使用s3 <RoutingRules>
将任何404重定向到请求主机名的根。为此,我需要将cloudfront来源设置为使用s3“网站端点”。
但是,为了使Cloudfront能够通过“网站终结点”而非“ s3 REST API终结点”访问s3存储桶,我需要显式将存储桶公开,即使用以下策略规则: / p>
{
"Sid": "AllowPublicGetObject",
"Effect": "Allow",
"Principal": {
"AWS": "*"
},
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::dev.ts3.online-test/*"
},
{
"Sid": "AllowPublicListBucket",
"Effect": "Allow",
"Principal": {
"AWS": "*"
},
"Action": "s3:ListBucket",
"Resource": "arn:aws:s3:::dev.ts3.online-test"
}
一切都很好。有用。但是,AWS给了我一个很好的闪亮警告:
此存储桶具有公共访问权限。您已提供对此存储桶的公共访问权限。我们强烈建议您不要授予对S3存储桶的任何公开访问权限。
所以我有两个问题:
答案 0 :(得分:1)
关于警告的第一件事。
列表存储桶视图显示您的存储桶是否可公开访问。 Amazon S3将存储桶的权限标记如下:
公共–
对象可以是公共的–::
不公开的桶和物件–: -存储桶和对象没有任何公共访问权限。
此帐户的唯一授权用户–:
因此,由于第一个警告。以下是AWS针对s3静态网站推荐的政策。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "PublicReadGetObject",
"Effect": "Allow",
"Principal": "*",
"Action": [
"s3:GetObject"
],
"Resource": [
"arn:aws:s3:::example-bucket/*"
]
}
]
}
向网站存储桶添加存储桶策略,该策略授予所有人访问权限 到存储桶中的对象。当您将存储桶配置为 网站上,您必须公开制作要公开投放的对象 可读的。为此,您编写了一个桶策略,授予每个人 s3:GetObject权限。以下示例存储桶策略授权 每个人都可以访问示例存储桶中的对象。
BTW的公共访问权限只能是 GET ,而不能是其他任何东西,完全允许 GET 请求在S3上访问您的静态网站。