我有一个Amazon S3存储桶,我公开了这样的政策
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Allow Public Access to All Objects",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::bucket/*"
}
]
}
我的水桶现在可见了 http://bucket.s3-website-us-east-1.amazonaws.com/
我看到其他人将他们的桶称为 http://s3-us-east-1.amazonaws.com/bucket/
我更喜欢第二个网址,但它会拒绝访问。
如何更改我的政策以允许第二个网址?
答案 0 :(得分:38)
您引用的URL结构称为REST端点,而不是Web站点端点。
注意:由于最初编写此答案,S3已使用新主机名在REST端点上推出双栈支持,同时保留现有主机名。现已将其集成到下面提供的信息中。
如果您的存储桶确实位于AWS的us-east-1区域 - which the S3 documentation formerly referred to as the "US Standard" region, but was subsequently officially renamed to the "U.S. East (N. Virginia) Region" - 那么http://s3-us-east-1.amazonaws.com/bucket/
不是该端点的正确形式,即使它看起来应该是。该区域的正确格式为http://s3.amazonaws.com/bucket/
或http://s3-external-1.amazonaws.com/bucket/
。¹
您使用的格式适用于所有其他S3区域,但不适用于 US Standard US East(N。Virginia)[us-east-1]。
S3现在对于REST端点也有dual-stack endpoint hostnames,与原始端点主机名不同,这些端口的名称在不同区域具有一致的格式,例如s3.dualstack.us-east-1.amazonaws.com
。这些端点支持IPv4和IPv6连接以及DNS解析,但在功能上与现有REST端点等效。
如果设置了权限和配置以使网站端点正常工作,那么REST端点也应该可以正常工作。
然而......两个端点不提供相同的功能。
粗略地说,REST端点更适合于机器访问,并且网站端点更适合人工访问,因为网站端点提供友好的错误消息,索引文档和重定向,而REST端点不会吨。另一方面,REST端点为签名URL提供HTTPS和支持,而网站端点则不提供。
为您的应用选择正确类型的端点(REST或网站):
http://docs.aws.amazon.com/AmazonS3/latest/dev/WebsiteEndpoints.html#WebsiteRestEndpointDiff
¹s3-external-1.amazonaws.com
has been referred to作为“北弗吉尼亚终点”,与“全球终点”s3.amazonaws.com
形成鲜明对比。如果使用“s3-external-1”主机名,则非正式地可以在此区域中的新对象上获得写后读写一致性,因为这会将您发送到可提供该功能的可能物理端点的子集。此端点现在正式支持此行为,因此这可能是许多应用程序中更好的选择。以前,s3-external-2
had been referred to是美国标准的“太平洋西北端点”,虽然它现在是s3-external-1
的DNS中的CNAME,因此s3-external-2
似乎没有任何目的向后兼容。