我正在尝试创建一个可以由任何人配置的 Cloudformation 堆栈(基本上我想在市场上共享它,或者在 GitHub 上公开它),其中包括一组位于 ALB 后面的 EC2 实例(没有自动扩展,而是固定数量的实例)。
我想为 ALB 创建一个侦听器,该侦听器在使用 HTTPS 的非默认端口(假设为 9999)上进行侦听。为了做到这一点,ALB 强制我使用 SSL 证书。我只关心加密,而不关心 CA 验证(因为这适用于内部流量。)我想要做的是在客户端和负载均衡器之间启用加密,例如:https://my-loadbalancer-1234567890.us-west-2.elb.amazonaws.com:9999
。这是一个 rest api,所以我不关心浏览器弹出的“您的连接不是私密的”提示
我不能依赖域名,因为我想共享此模板,所以我不指望每个人都拥有域名。我能想到 3 种解决方案,但我不喜欢其中任何一种(我甚至不知道它们是否可行):
在用户数据脚本上生成自签名证书。将此证书推送到 ACM。然后从 ALB 使用此证书。
缺点:如果堆栈被破坏,这可能需要手动删除证书,因为证书不是从 cloudformation 创建的,而是从 ec2 bootstrap 创建的。在用户数据脚本上生成自签名证书,但不是推送到 ACM,而是将其安装在 ec2 alb 上(使用 haproxy/nginx 之类的工具)。
缺点:我们没有获得 aws alb 的好处。- 让最终用户预先创建一个子域(myrestapi.example-domain.com),并从 cloudformation 堆栈中使用该域生成证书。
缺点:需要用户采取额外步骤,并触及他们现有的基础设施。
答案1
选项 3是个仅有的有效的。让用户预先创建 Route53 域和 ACM 证书,并提供域名和证书 ARN 作为CloudFormation 模板的参数。
向您的 GitHub 存储库提供README.md
如何执行此操作的说明。ACM 证书是免费的,没有理由不使用它们。
希望有帮助:)