将 AWS Certificate Manager(ACM 证书)与 Elastic Beanstalk 一起使用
Posted
技术标签:
【中文标题】将 AWS Certificate Manager(ACM 证书)与 Elastic Beanstalk 一起使用【英文标题】:Using AWS Certificate Manager (ACM Certificate) with Elastic Beanstalk 【发布时间】:2016-05-12 09:09:48 【问题描述】:当您拥有通过 AWS Certificate Manager 颁发的域证书时,如何将该证书应用于 Elastic Beanstalk 应用程序。
是的,Elastic Beanstalk 应用程序是负载平衡的,并且确实有一个与之关联的 ELB。
我知道我可以将它直接应用到我自己的 ELB。但我想通过 Elastic Beanstalk 应用它,以便将 env 配置保存到 Cloud Formation 模板中。
【问题讨论】:
【参考方案1】:我发现,您无法通过弹性 beantalk 控制台执行此操作(至少目前还没有)。但是您仍然可以通过 eb cli 或 aws cli 进行设置。
使用 EB CLI
基本上我们要做的是更新aws:elb:listener
设置,您可以在general options 文档中查看可能的设置。
使用 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 Certificate Manager 控制台中找到它:
重要提示:您的aws:elb:listener:443
设置必须置于aws:elb:listener:80
设置之上。否则环境配置更新会报错。
使用 AWS CLI
同样可以通过update-environment 命令使用通用aws cli
工具来完成。
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 的配置中。
【讨论】:
我已经通过 eb cli 尝试过,并通过在 .ebextensions 下添加配置文件,它总是说“找不到密钥的服务器证书......”egscr.com/JpcAa8 @Max 您没有在 .ebextensions 文件夹中添加配置文件。当您创建更改时,eb cli 将下载配置文件并将其重新上传回弹性 beanstalk。 IT 与添加 ebextension 不同。 @KirillFuchs 使用 AWS CLI 选项,ec2 的语法是否相同? @Jeboy 不,直接将其添加到负载均衡器的命令会有所不同。 @Jordan 如果更新没有出错,那么你们都很好:)。但我应该注意,您现在可以通过控制台将 ACM 证书添加到弹性 beanstalk。【参考方案2】:我发现最简单的方法是通过用户控制台更改 EB 负载均衡器。单击更改并选择新的 ACM 证书。
查看EB配置时不会出现,但会设置
【讨论】:
【参考方案3】:您可以完全使用 CloudFormation 来做到这一点;但是,与 Elastic Beanstalk 似乎很常见的配置选项相比,在文档中找到配置选项比在组成 Elastic Beanstalk 的各个组件中要难得多。信息在这里:
http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/command-options-general.html#command-options-general-elbloadbalancer
但基本上您需要做的是将证书的创建添加到您的模板中,然后在OptionSettings
中的AWS::ElasticBeanstalk::ConfigurationTemplate
中引用它:
"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*/]
【讨论】:
【参考方案4】:检查您在哪个区域创建了证书,以及它是否与 Elastic Beanstalk 区域匹配。我把它们放在不同的区域,所以它不起作用。
【讨论】:
以上是关于将 AWS Certificate Manager(ACM 证书)与 Elastic Beanstalk 一起使用的主要内容,如果未能解决你的问题,请参考以下文章
如何在 AWS Opsworks App 上使用在 AWS Certificate Manager 上购买的证书?
AWS Certificate Manager 和 Elastic Beanstalk:创建没有域名的 SSL
AWS Certificate Manager 中处于待处理状态的证书
AWS Certificate Manager,无法获取子域的 https