尝试将别名目标从 Route 53 设置为 S3 时没有可用的目标

Ami*_*ker 22 website alias amazon-s3 amazon-web-services amazon-route53

我试图建立一个简单的基于亚马逊AWS S3网站,如解释在这里

我已经设置了 S3 存储桶 (simples3websitetest.com),给了它(希望)正确的权限:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AddPerm",
            "Effect": "Allow",
            "Principal": {
                "AWS": "*"
            },
            "Action": [
                "s3:GetObject"
            ],
            "Resource": [
                "arn:aws:s3:::simples3websitetest.com/*"
            ]
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

我上传了 index.html,设置了网站访问,它可以通过http://simples3websitetest.com.s3-website-us-west-2.amazonaws.com/index.html访问

到目前为止一切顺利,现在我想设置 Amazon Route53 访问,这就是我卡住的地方。

我已经在我拥有的域 (resourcesbox.net) 上设置了一个托管区域,然后单击了“创建记录集”,然后进入了“设置别名”步骤,但是当我在 S3 网站端点下看到“没有可用的目标”时尝试设置别名目标。

我错过了什么??

Mic*_*bot 36

您创建的 A 记录别名必须与存储桶的名称相同,因为 S3 中存储桶的虚拟托管要求Host:浏览器发送的标头与存储桶名称匹配。确实没有另一种实用的方法可以实现存储桶的虚拟托管……存储桶必须通过某种机制进行识别,而该机制就是 http 标头。

为了在“example.com”域中为存储桶创建别名,存储桶名称还必须是您可以在该域内合法声明的主机名……Route 53 A-Record“testbucket.example例如,.com”只能作为名为“testbucket.example.com”的存储桶的别名……而没有其他存储桶。

在你的问题中,你打破了这个限制......但你只能在“simples3websitetest.com”域内部(和顶点)创建一个名为“simples3websitetest.com”的存储桶的别名。

这是设计使然,并不完全是 Route 53 或 S3 的限制。他们只是阻止你做一些不可能的事情。Web 服务器不知道任何别名或 CNAME 或 DNS 中的任何其他操作——它们只接收浏览器认为它正在尝试连接的原始主机名,在浏览器发送的 http 标头中......而 S3 使用这个用于标识虚拟托管请求适用的存储桶名称的信息。

Amazon S3 要求您为存储桶指定与域相同的名称。这样,当用户从您的网站请求内容时,Amazon S3 可以正确解析 Web 浏览器发送的主机标头。因此,我们建议您在支付注册域名费用之前在 Amazon S3 中为您的网站创建存储桶。

http://docs.aws.amazon.com/gettingstarted/latest/swh/getting-started-create-bucket.html#bucket-requirements

但请注意,此限制仅适用于您不在存储桶前使用 CloudFront 的情况。

使用 CloudFront,具有更大的灵活性,因为Host:可以在将请求传递到 S3 之前(由 CloudFront 本身)重写标头。您将 CloudFront 分配中的“源主机”配置为your-bucket.s3-website-xx-yyyy-n.amazonaws.com其中 xx-yyyy-n 是创建存储桶的 S3 的 AWS 区域。此端点显示在每个存储桶的 S3 控制台中。