尝试将路径53的别名目标设置为S3时,没有可用的目标


21

我试图建立一个简单的基于亚马逊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/*"
            ]
        }
    ]
}

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

到目前为止一切顺利,现在我想设置Amazon Route53访问权限,这就是我遇到的问题。

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

我错过了什么??


从2012年10月开始,Amazon引入了一个处理S3存储桶重定向的功能(HTTP 301)。您可以在这里阅读我以前的回复。stackoverflow.com/a/24218895/1160780
Alberto Spelta 2014年

Answers:


33

您创建的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.comxx-yyyy-n是创建存储桶的S3的AWS区域。S3控制台中为每个存储桶显示了此端点。


1
这确实是问题所在,我创建了一个名为resourcesbox.net的存储桶,它确实显示了。谢谢!快速跟进问题:这意味着如果我要为该域使用不同的存储桶,则必须具有适合每个存储桶的子域吗?有没有办法解决?
阿米尔·祖克

我不确定您所说的“我必须拥有子域”是什么意思。您需要在Route 53中创建一个A记录,其主机名与您要用于在S3中托管网站的每个存储桶相匹配,是的。
Michael-sqlbot

1
@oberstet,此问题alias与指向启用了网站托管的S3存储桶的Route 53 记录有关,这导致DNS解析为网站终结点,而不是REST终结点。网站端点根本不支持SSL ; 只有REST端点可以。另外,所有通配符证书最多最多支持一个, *并且只能出现在最左边的主机名组件中,因此这实际上不是S3的限制。
Michael-sqlbot 2015年

1
@oberstet 6.4.3.1客户端不应尝试匹配显示的标识符,在该标识符中,通配符包含最左边的标签以外的其他标签。因此,没有多层通配符。无论如何,你的博托问题在“呼叫格式”选项的问题显然被正确实现。每个存储桶都可以通过https访问,其中存储桶名称是该存储桶正确区域的S3 URL下的第一个路径元素,例如。错误的区域端点=重定向错误。https://s3-us-west-2.amazonaws.com/my-bucket.with-dots.in-us-west-2/key
Michael-sqlbot 2015年

1
@MartinLyne谢谢。我添加了对S3文档的引用,有关存储桶名称和域名必须相同,并使用CloudFront提到了已使用的存储桶名称的解决方法。在us-east-1和us-west-2区域以及其他地区,使用CloudFront的成本微不足道,甚至可以节省一点,因为在某些边缘,CF下载的带宽比S3直接便宜0.005美元/ GB位置。
Michael-sqlbot 2015年

0

假设您有一个托管区域abc.com。并且您创建了一个存储桶abc.com(该路由不会显示在路由别名的列表中)-您可能会认为它是。名称之后-您无法用其命名桶

也尝试一下。因为我是第一次使用正确的名称创建存储桶,但仍然无法正常工作。相信我,我有强迫症,所以我没有错过句号或逗号。

  1. 创建另一个具有相同名称abc.com的托管区域
  2. 现在,您将看到两个相同的托管区域(abc.com和abc.com)。
  3. 删除新的
  4. 返回旧的托管区域abc.com
  5. 您可能能够看到s3端点即将出现-这可能是Route53中的问题

这对我来说几乎可以尝试所有事情-我看到的一些建议是注销并登录以清除某种缓存-不确定

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.