如何为 Amazon S3 存储桶配置 SSL

Posted

技术标签:

【中文标题】如何为 Amazon S3 存储桶配置 SSL【英文标题】:How to Configure SSL for Amazon S3 bucket 【发布时间】:2012-06-27 09:58:39 【问题描述】:

我正在使用 Amazon S3 存储桶通过我的 .NET 应用程序上传和下载数据。现在我的问题是:我想使用 SSL 访问我的 S3 存储桶。是否可以为 Amazon s3 存储桶实施 SSL?

【问题讨论】:

可能有帮助:Implementing SSL on Amazon S3 Static Websites 【参考方案1】:

您可以像这样通过 SSL 访问您的文件:

https://s3.amazonaws.com/bucket_name/images/logo.gif

如果您为存储桶使用自定义域,您可以将 S3 和 CloudFront 与您自己的 SSL 证书一起使用(或通过 Amazon Certificate Manager 生成免费证书):http://aws.amazon.com/cloudfront/custom-ssl-domains/

【讨论】:

这并不完全正确。您可以使用不带点的存储桶名称:this-is-my-awesome-bucket.s3.amazonaws.com Amazon 具有通配符证书。由于您不能使用点,因此您不能让 CNAME 域指向您的存储桶。 注意包含句点的存储桶名称! SSL 无法在 ios 设备上运行,但在 Chrome 中运行良好。见***.com/questions/3048236/… Amazon CloudFront 将为您完成这项工作。 @Docunext 问题是没有点的存储桶名称使得使用自定义 DNS 域变得困难。见***.com/questions/32714351/… 要具有点符号存储桶名称(因此您可以使用 Route 53 别名)并且您希望通过 REST 将对象放入,请确保主机名与区域匹配。例如,我的存储桶在us-west-2,所以主机名实际上是s3-us-west-2.amazonaws.com,否则会出错。【参考方案2】:

今天刚刚添加了自定义域 SSL 证书,价格为 600 美元/证书/月。在下面注册您的邀请: http://aws.amazon.com/cloudfront/custom-ssl-domains/

更新:SNI 客户免费提供证书are now available。比 600 美元/月便宜得多,而且 XP 几乎被淘汰,它应该适用于大多数用例。

@skalee AWS 有一种机制可以实现发帖人的要求,“为 Amazon s3 存储桶实现 SSL”,它被称为 CloudFront。我将“实现”读作“使用我的 SSL 证书”,而不是“只是在 HTTP URL 上放一个 S,我确信 OP 可以推测出来。

由于 CloudFront 的成本与 S3 完全相同(0.12 美元/GB),但在 SSL 方面有大量附加功能,并且允许您免费添加自己的 SNI 证书,因此它是“实施 SSL”的明显解决方案你的域名。

【讨论】:

CloudFront 不是 S3。 @skalee 正确,但是如果您想通过具有自定义 SSL 证书的域访问它,作为 OP 请求,您可以通过这种方式设置自定义 CNAME SSL 证书并通过 CF 访问它。 我暂时设置了两个CNAME:static-s3和static-cf,第一个直接指向我的S3,第二个指向CF。首先不能支持 SSL,其次可以,但它是 CF 而不是 S3,正如 skalee 指出的那样。这是我认为目前我们能做的最好的事情。 哇,我想他们必须以某种方式弥补越来越便宜的存储成本。至少它是按比例分配的。如果您在一个月内仅使用 SSL 证书 1 小时,则只需 20 美元;-) @Elegant.Scripting 如果您有专用的 SSL 证书(不是 SNI 证书),那么该机器需要一个专用 IP,这会产生费用。对于 S3 托管数据的全球每个位置,您可能都需要一个专用 IP。所以这加起来了。但我认为主要是帖子的人不需要它,他们可以为那些需要它的人抬高价格。如果不需要支持 IE6,那么 CloudFront 下的 SNI 证书应该没问题。【参考方案3】:

我发现您可以通过 Cloud Flare 服务轻松做到这一点。

设置一个存储桶,在该存储桶上启用网络托管,并通过 Cloudflare 将所需的 CNAME 指向该端点……当然还要为服务付费……但 5-20 美元 VS 600 美元更容易接受。

这里有完整的细节: https://www.engaging.io/easy-way-to-configure-ssl-for-amazon-s3-bucket-via-cloudflare/

【讨论】:

在这里试试我的指南:engaging.io/…【参考方案4】:

如果您真的需要它,请考虑重定向。

例如,根据assets.my-domain.example.com/path/to/file 的请求,您可以执行 301 或 302 重定向到 my-bucket-name.s3.amazonaws.com/path/to/files3.amazonaws.com/my-bucket-name/path/to/file(请记住,在第一种情况下,my-bucket-name 不能包含任何点,否则将不匹配*.s3.amazonaws.com, s3.amazonaws.com 在 S3 证书中声明)。

未经测试,但我相信它会起作用。但是,我看到的问题很少。

第一个非常明显,是获取此重定向的附加请求。而且我怀疑您是否可以使用您的域名注册商提供的重定向服务器——您必须以某种方式在那里上传正确的证书——因此您必须使用自己的服务器。

第二个是您可以在页面源代码中使用您的域名的网址,但是当例如用户在单独的选项卡中打开图片时,地址栏将显示目标网址。

【讨论】:

我不确定,但我认为这可能会导致 CORS 问题。【参考方案5】:

直接使用 S3 是不可能的,但您可以从您的存储桶创建 Cloud Front 分配。然后转到证书管理器并请求证书。亚马逊免费提供。您已成功确认认证的人,将其分配给您的 Cloud Front 分配。还要记住将规则设置为将 http 重定向到 https。

我在 Amazon S3 上托管了几个静态网站,例如我已为其分配 SSL 证书的个人网站,因为它们具有 Cloud Front 分发版。

【讨论】:

你是如何分配域名的? 先去证书管理器申请新证书。在此处添加您的域,并在此处添加子域(如有必要)。把子域放在那里并没有什么坏处,所以不妨把 example.com 和 *.example.com 放在那里。【参考方案6】:

如前所述,您无法为 S3 存储桶创建免费证书。但是,您可以创建 Cloud Front 分配,然后为 Cloud Front 分配证书。您为您的域请求证书,然后将其分配给 Cloud Front 设置中的 Cloud Front 分发。我已经使用这种方法通过 SSL 提供静态网站以及提供静态文件。

对于创建静态网站,亚马逊是首选。使用 SSL 获得静态网站真的很实惠。

【讨论】:

对于使用 google 访问这里的每个人:请记住在弗吉尼亚北部地区创建您的 AWS 证书(也)。否则你将无法在你的 CF 发行版中选择它

以上是关于如何为 Amazon S3 存储桶配置 SSL的主要内容,如果未能解决你的问题,请参考以下文章

将 Amazon S3 存储桶和 Cloudfront 与 SSL Wordpress 站点一起使用不会提供静态文件

如何为 Heroku 应用程序配置带有 SSL 的 Amazon Route

Amazon S3 存储桶策略引用

Amazon S3 存储桶中缺少 Access-Control-Allow-Origin 标头

如何为 s3 存储桶指定子域?

如何为“无服务器”部署创建一个 s3 存储桶?