公共Amazon S3存储桶的URL

59

我有一个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/

我更喜欢第二个URL,但它显示“访问被拒绝”。

如何更改我的策略以允许第二个URL?

1个回答

63
你所提到的URL结构被称为REST端点,而非网站端点。
注意:自此答案原写作时起,S3已在REST端点上推出了双栈支持,使用新的主机名,同时保留现有主机名。下面提供的信息已经整合了这一点。
如果您的AWS存储桶真的位于us-east-1区域,S3文档曾称之为“美国标准”区域,但后来正式更名为“美国东部(北弗吉尼亚)区域”,那么http://s3-us-east-1.amazonaws.com/bucket/并不是该终端节点的正确格式,尽管它看起来应该是这样的。该区域的正确格式是http://s3.amazonaws.com/bucket/http://s3-external-1.amazonaws.com/bucket/。¹
您正在使用的格式适用于所有其他S3区域,但不适用于美国标准美国东部(北弗吉尼亚)[us-east-1]。
S3现在也有双栈终端点主机名用于REST终端点,与原始终端点主机名不同,这些名称在各个地区都具有一致的格式,例如s3.dualstack.us-east-1.amazonaws.com。这些终端点支持IPv4和IPv6连接以及DNS解析,但在其他方面与现有的REST终端点功能等效。
如果您的权限和配置已设置使网站终端点正常工作,则REST终端点也应该可以正常工作。
然而...这两个终端点并不提供相同的功能。
粗略地说,REST终端点更适合机器访问,而网站终端点更适合人类访问,因为网站终端点提供友好的错误消息、索引文档和重定向,而REST终端点则不提供。另一方面,REST终端点提供HTTPS和签名URL支持,而网站终端点则不提供。
选择正确的终端点类型(REST或网站)用于您的应用程序:

http://docs.aws.amazon.com/AmazonS3/latest/dev/WebsiteEndpoints.html#WebsiteRestEndpointDiff


¹ s3-external-1.amazonaws.com 被称为“北弗吉尼亚端点”,与“全球端点”s3.amazonaws.com形成对比。如果使用“s3-external-1”主机名,可以在该地区的新对象上获得读后写一致性,因为这会将您发送到可能提供该功能的物理端点的子集。现在此端点已正式支持此行为,因此在许多应用程序中,这可能是更好的选择。以前,s3-external-2被称为美国标准的“太平洋西北端点”,但现在它是s3-external-1的DNS CNAME,因此s3-external-2似乎没有任何目的,除了向后兼容。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接