【问题标题】:How do you get an SSL cert on a Beanstalk instance via Cloudformation如何通过 Cloudformation 在 Beanstalk 实例上获取 SSL 证书
【发布时间】: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]

感谢您的帮助。

【问题讨论】:

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


    【解决方案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。它有效,但不够优雅。
    猜你喜欢
    • 2018-11-14
    • 1970-01-01
    • 2016-09-13
    • 2016-02-04
    • 2017-07-20
    • 2020-05-16
    • 2015-06-14
    • 2013-09-06
    • 2020-10-31
    相关资源
    最近更新 更多