使用AWS证书管理器(ACM证书)与弹性Beanstalk

12

如果您通过AWS证书管理器颁发了域名证书,如何将该证书应用于弹性Beanstalk应用程序。

是的,弹性Beanstalk应用程序是负载均衡的,并且确实与ELB相关联。

我知道我可以直接将其应用于ELB。但是,我想通过Elastic Beanstalk应用它,以便环境配置保存在Cloud Formation模板中。

4个回答

15

我发现,你无法通过elastic beanstalk控制台来完成此操作(至少目前还不行)。但是你仍然可以通过eb cli或aws cli进行设置。

使用EB CLI

我们基本上要做的是更新aws:elb:listener设置,您可以在通用选项文档中查看可能的设置。

使用EB CLI非常简单。假设我们已经为项目设置了awsebcli工具,我们可以使用eb config命令。

它将打开您的默认终端编辑器,并允许您更改以YAML文件编写的设置。当您进行更改并保存后,eb config cmd将自动更新您的Elastic Beanstalk环境的设置。

您需要将以下设置添加到配置文件中:

aws:elb:listener:443:
  InstancePort: '80'
  InstanceProtocol: HTTP
  ListenerEnabled: 'true'
  ListenerProtocol: HTTPS
  PolicyNames: null
  SSLCertificateId: CERTIFICATE_ARN_HERE

CERTIFICATE_ARN_HERE 的值更改为您的 AMC 证书 ARN。您可以在 AWS 证书管理器控制台中找到它:

输入图像描述

重要提示:您的 aws:elb:listener:443 设置必须放在 aws:elb:listener:80 设置之前。否则,环境配置更新将出错。


使用 AWS CLI

您也可以使用通用的 aws cli 工具通过 update-environment 命令来完成相同的操作。

aws elasticbeanstalk update-environment \
--environment-name APPLICATION_ENV --option-settings \
Namespace=aws:elb:listener:443,OptionName=InstancePort,Value=80 \
Namespace=aws:elb:listener:443,OptionName=InstanceProtocol,Value=HTTP \
Namespace=aws:elb:listener:443,OptionName=ListenerProtocol,Value=HTTPS \
Namespace=aws:elb:listener:443,OptionName=SSLCertificateId,Value=CERTIFICATE_ARN_HERE

注意:当您通过上述任一方法更新时,Elastic Beanstalk控制台不会显示启用了HTTPS。但负载均衡器会显示,并且它也将应用于Cloudformation模板,并保存到EB配置中。


1
我已经尝试使用 eb cli,并通过在 .ebextensions 下添加配置文件,但它始终显示“未找到密钥的服务器证书...”。 http://egscr.com/JpcAa8 - Max
@KirillFuchs 通过AWS CLI选项,ec2的语法是否相同? - Jeboy
@Jeboy 不,直接将其添加到负载均衡器的命令是不同的。 - Kirill Fuchs
@KirillFuchs 好的,我也尝试了这种方法,因为我在使用 ACM 证书时遇到了问题。我按照 http://docs.aws.amazon.com/elasticloadbalancing/latest/classic/elb-create-https-ssl-load-balancer.html 中所述的步骤设置了 AWS 经典负载均衡器,并使用 ACM 证书设置了 HTTPS 监听器,但浏览器拒绝连接。http://stackoverflow.com/questions/40929255/aws-acm-certificate-not-valid - Jeboy
1
@Jordan 如果更新没有出错,那么一切都很好 :). 但是我应该指出,现在你可以通过控制台向弹性 Beanstalk 添加 ACM 证书。 - Kirill Fuchs
显示剩余2条评论

2
我发现最简单的方法是通过用户控制台更改EB负载均衡器。点击“更改”并选择新的ACM证书。 enter image description here 当您查看EB配置时,它不会显示出来,但已经设置好了。

0

您可以纯粹使用CloudFormation来完成此操作;然而,与Elastic Beanstalk的个别组件相比,配置选项在文档中似乎更难找到。这里有相关信息:

http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/command-options-general.html#command-options-general-elbloadbalancer

但基本上你需要做的是将证书的创建添加到你的模板中,然后在 AWS::ElasticBeanstalk::ConfigurationTemplateOptionSettings 中引用它:

"Certificate" : {
      "Type": "AWS::CertificateManager::Certificate",
      "Properties": {
        "DomainName": "example.com",
      }
    },
// ...
"ElasticbeanstalkTemplate": {
      "Type": "AWS::ElasticBeanstalk::ConfigurationTemplate",
      "Properties": {
        "SolutionStackName": "MyEBStack",
        "ApplicationName": "MyAppName",
        "Description": "",
        "OptionSettings": [{
          "Namespace": "aws:elb:listener:443",
          "OptionName": "InstancePort",
          "Value": "80"
        }, {
          "Namespace": "aws:elb:listener:443",
          "OptionName": "InstanceProtocol",
          "Value": "HTTP"
        }, {
          "Namespace": "aws:elb:listener:443",
          "OptionName": "ListenerProtocol",
          "Value": "HTTPS"
        }, {
          "Namespace": "aws:elb:listener:443",
          "OptionName": "SSLCertificateId",
          "Value": {
            "Ref": "Certificate"
          }
        }, /*More settings*/]

0

检查您创建证书的区域是否与弹性 Beanstalk 区域匹配。我将它们放在不同的区域,所以它无法工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接