如何在 AWS Opsworks App 上使用在 AWS Certificate Manager 上购买的证书?

Posted

技术标签:

【中文标题】如何在 AWS Opsworks App 上使用在 AWS Certificate Manager 上购买的证书?【英文标题】:How to use on AWS Opsworks App a certificate bought on AWS Certificate Manager? 【发布时间】:2017-10-01 00:43:51 【问题描述】:

我在 AWS Opsworks 上部署了一个 Rails 应用程序。 我最近关联了一个购买了 AWS SES 的域,并且我在 AWS Certificate Manager 中获得了该域的证书。

根据documentation,支持的服务有:

弹性负载平衡 Amazon CloudFront AWS Elastic Beanstalk 亚马逊 API 网关

我想出的第一个解决方案是将 Elastic Load Balancing 添加到我的层,并将域和证书与其弹性 IP 相关联。

有没有人遇到过同样的挑战?您能提出更好的解决方案吗?

例如有没有办法从 ACM 获取 SSL 证书和 SSL 证书密钥,以便将其添加到我在 Opsworks 中的应用程序设置中?

【问题讨论】:

【参考方案1】:

您无法获取ACM生成的SSL证书密钥,因为您说它仅供AWS提供的4种服务使用。

您可以尝试的一种解决方案是将 ACM 证书关联到 ELB 并在 ELB 级别执行 SSL 卸载,因此基本上您的侦听器配置将是 443 TCP 到实例中的某个非安全端口(将 ELB 关联到层)。

【讨论】:

感谢您的建议。我在 EC2 中使用我的 Opsworks 实例创建了一个负载均衡器和一个目标组。在 Route53 中,我设法将我的域与 ELB 别名相关联,并且我还关联了证书。 但是,当我强制使用 Rails 5 config.force_ssl=true 时,我无法重定向流量,因为实例已在目标组中使用端口 80 注册,并且如果不提供证书密钥。此外,目标组中我的实例的健康检查返回不健康,错误为 302 @mabe02 看起来您正在使用应用程序负载均衡器,在 ALB 中,您还必须使用 HTTPS(443) 注册您的目标组,并从下拉列表中选择 SSL 证书,然后将流量路由到您的实例。通过在 ALB 级别执行 SSL 卸载,您可以确保没有 SSL 流量到达您的实例,因此您不需要在实例级别强制使用 ssl。 感谢您的评论。我实际上忘了关闭这个话题,因为我找到了我刚刚发布的答案中描述的解决方案。我使用了经典的负载均衡器而不是 ALB,但我想行为应该几乎相同【参考方案2】:

实际上经过一些尝试,我设法按照以下步骤实现了它:

在 EC2 中添加负载平衡 将 LB 指向 Opsworks 实例 将证书添加到LB 在安全组中正确设置监听器配置 在 Route53 的托管区域中创建新的 RecordSet 将 LB 的 RecordSet 添加为 Alias Target

我在LinkedIn Pulse写了一篇文章,里面放了一些截图和详细的解释。

【讨论】:

以上是关于如何在 AWS Opsworks App 上使用在 AWS Certificate Manager 上购买的证书?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 AWS OpsWorks 上调试 Ruby On Rails?

如何在 AWS Opsworks 上设置 EC2 标签

如何在 AWS Lambda 中运行 AWS SDK Opsworks 命令?

在 aws opsworks 中运行自定义食谱

AWS+OpsWorks:如何使用 OpsWorks 启用 EC2 实例的详细监控

AWS opsworks deploy 在实例加入域后永远运行