无法使HTTPS与S3上的静态托管站点一起使用

时间:2019-01-17 22:44:19

标签: amazon-web-services ssl amazon-s3 amazon-cloudfront

我无法使用S3上托管的静态网站设置HTTPS。我遵循了官方文档以及一些教程,但是仍然无法对其进行故障排除。我的设置如下。

首先,我通过AWS Certificate Manager请求SSL证书。实际上,我已经请求了其中两个,但是它们都不有助于HTTPS正常工作。 SSL证书域如下所示。我已验证状态为issued

  • *。mydomain.com
  • sub.mydomain.com

请注意,我的域名已在Google Domains中注册。我有3个CNAME条目,如下所示。

  • 一个用于* .mydomain.com
  • 一个用于sub.domain.com
  • 一个用于将HTTP返回到S3存储桶

然后在CloudFront上创建一个发行版。起源和起源组是

  • 原始域名和路径= sub.mydomain.com.s3.amazonaws.com
  • 来源ID = S3-sub.mydomain.com
  • 来源类型= S3 Origin

行为是

  • 路径模式= Default(*)
  • 起源或起源组= S3-sub.mydomain.com
  • 查看器协议策略= Redirect HTTP to HTTPS

在不同的教程网站上,我看到推荐的Viewer Protocol Policy是任何值之一(例如HTTP and HTTPSRedirect HTTP to HTTPSHTTPS Only)。我尝试了所有3个值,但并没有达到预期的效果(修补每个修补程序的成本很高,因为每次更改都需要15分钟以上才能部署。)

在CloudFront发行版的状态为Status = {Deployed和State = Enabled之后,我尝试通过HTTPS转到我的站点,但是它挂起并超时。 HTTP访问仍然可以正常工作,这与我对Viewer Protocol Policy = Redirect HTTP to HTTPS的理解背道而驰。

对我在这里做错的任何想法吗?许多教程建议使用端到端AWS服务(例如DNS)来简化设置,但是我已经在Google上注册了我的域。

请注意,this post是关于仅具有VPN访问权限的HTTPS,而this post建议使用全AWS方法。第二篇文章很有趣,因为一个用户建议输入A记录。目前,我的子域只有CNAME条记录。如果要创建A记录,我将指向何处?

更新:我进入Google Domains,删除了指向S3存储桶URL的sub的CNAME条目。然后,我添加了一个新的CNAME,其中sub指向CloudFront URL。当我尝试使用HTTPS时,我可以找到一些东西,但是我得到了AccessDenied的XML。

<Error>
 <Code>AccessDenied</Code>
 <Message>Access Denied</Message>
 <RequestId>186A2418C76E7526</RequestId>
 <HostId>
  somelongstring
 </HostId>
</Error>

1 个答案:

答案 0 :(得分:0)

通过另外做2件事,我就能使一切正常工作。

在Google Domains上,我创建了一个B2指向CloudFront网址的CNAME。

在CloudFront上,为避免出现BEGIN DECLARE @ids TABLE (@id UNIQUEIDENTIFIER); INSERT INTO dbo.CHRIS_BASE (B1, B2) SELECT B1, B2 FROM INSERTED OUTPUT id INTO @ids; INSERT INTO dbo.CHRIS_CUSTOM (ID, C1, C2) SELECT ids.id, i.C1, i.C2 FROM INSERTED i JOIN @ids ids ON i.B1 = ids.B1 AND i.B2 = ids.B2; END; 消息,我将sub设置为AccessDenied。显然,来自S3的索引文档设置已与CloudFront分离。