如何通过 Cloudformation 在 Beanstalk 实例上获取 SSL 证书
Posted
技术标签:
【中文标题】如何通过 Cloudformation 在 Beanstalk 实例上获取 SSL 证书【英文标题】:How do you get an SSL cert on a Beanstalk instance via Cloudformation 【发布时间】:2018-04-08 12:41:23 【问题描述】:根据 AWS 示例,我正在使用带有 https 直通的 ELB,因为我们需要在实例处终止 SSL。根据 AWS 的指南,我有一个现有的 .ebextensions YAML 文件,其中包含 files 密钥。这很好用,直到我想为不同的环境使用不同的证书。
我的问题是我希望能够通过 Cloudformation 上传不同的 SSL 证书,具体取决于我部署到的环境。例如,test 和 dev 获得测试证书,production 获得生产证书。
我知道如何使用映射,所以这不是问题,但我不知道如何从 Cloudformation 将文件上传到 Elastic Beanstalk 环境。
我尝试在 CloudFormation YAML 的各个位置添加以下代码 sn-p,但它没有上传文件。代码 sn-p 有什么问题,还是我遗漏了其他东西?我尝试添加 EC2::Instance 部分,但这会在 Beanstalk 之外创建一个新的 EC2 实例,这是我不想要的。
Metadata:
AWS::CloudFormation::Authentication:
S3Auth:
type: "s3"
buckets: ["s3-bucket"]
roleName: aws-elasticbeanstalk-ec2-role
AWS::Cloudformation:Init:
config:
files:
/etc/pki/tls/certs/server.crt:
mode: "000400"
owner: root
group: root
authentication: "S3Auth"
source: !FindInMap [Certificates, crt-file, !Ref Environment]
/etc/pki/tls/certs/server.key:
mode: "000400"
owner: root
group: root
authentication: "S3Auth"
source: !FindInMap [Certificates, key-file, !Ref Environment]
感谢您的帮助。
【问题讨论】:
【参考方案1】:您可以使用 Elastic Beanstalk 的normal file creation method。在名为.ebextensions
的文件夹中创建一个名为certs.conf
的文件并将其放入其中:
Resources:
AWSEBAutoScalingGroup:
Metadata:
AWS::CloudFormation::Authentication:
S3Auth:
type: "s3"
buckets: ["s3-bucket"]
roleName: aws-elasticbeanstalk-ec2-role
files:
"/etc/pki/tls/certs/server.crt":
mode: "000400"
owner: root
group: root
authentication: "S3Auth"
source: !FindInMap [Certificates, crt-file, !Ref Environment]
"/etc/pki/tls/certs/server.key":
mode: "000400"
owner: root
group: root
authentication: "S3Auth"
source: !FindInMap [Certificates, key-file, !Ref Environment]
如果!FindInMap
在该部分不起作用,您总是可以在调用eb deploy
之前使用一个小的构建脚本来放置正确的证书。
【讨论】:
太棒了。最后,我传入了一个环境变量,并编写了一个简单的 bash 脚本,其中 if env = x 然后复制 y,否则复制 z。它有效,但不够优雅。以上是关于如何通过 Cloudformation 在 Beanstalk 实例上获取 SSL 证书的主要内容,如果未能解决你的问题,请参考以下文章
如何通过 CloudFormation 在 Cognito 中要求电子邮件验证?
如何通过 Cloudformation 在 Beanstalk 实例上获取 SSL 证书
如何通过 CloudFormation 配置“预令牌生成”触发器?