如何通过Cloudformation在Beanstalk实例上获得SSL证书

时间:2017-10-27 01:14:32

标签: amazon-web-services elastic-beanstalk amazon-cloudformation

我根据AWS示例使用带有https passthrough的ELB,因为我们需要在实例处终止SSL。根据AWS的指南,我有一个现有的.ebextensions YAML文件,其中包含文件键。这很有效,直到我想为不同的环境使用不同的证书。

我的问题是我希望能够通过Cloudformation上传不同的SSL证书,具体取决于我部署到哪个环境。例如,test和dev获得测试证书,生产获得生产证书。

我知道如何使用映射,因此这不是问题,但我无法解决如何从Cloudformation将文件上传到Elastic Beanstalk环境。

我尝试在CloudFormation YAML的各个位置添加以下代码段,但它没有上传文件。这是代码片段中的错误,还是我错过了其他内容?我尝试添加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 个答案:

答案 0 :(得分:0)

您可以使用Elastic Beanstalk的normal file creation method。在名为certs.conf的文件夹中创建名为.ebextensions的文件并将其放入其中:

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之前放置正确的证书。

相关问题