我正在设置AWS Elastic Beanstalk应用程序,我希望它的流量为HTTPS。
我创建了一个与beanstalk网址匹配的DNS CNAME记录,并在AWS Certificate Manager中创建并批准了该DNS名称的证书。
现在我去了Elastic Beanstalk环境 - >配置 - >网络层/负载均衡器(下图)为了将“安全监听端口”从OFF设置为443并选择我的证书。
但我的证书不适合选择! 所以我的问题是如何将我的证书或证书纳入选择列表,或者这是AWS中的错误?
注意 - 我在转到EC2 / Load平衡器时能够看到我的证书,并且能够将负载均衡器从HTTP更改为HTTPS并在那里选择我的证书。 但这并没有反映出仍然显示端口80的Elastic Beanstalk负载均衡器配置。对beanstalk使用HTTPS并不是这样的。
帮助!
答案 0 :(得分:1)
通过控制台,目前无法将您在证书管理器中创建的证书分配给Beanstalk环境。
为了实现此目的,您需要使用AWS CLI。我能够做到这一点,幸运的是,这很容易。
简而言之,您需要:
update environment
命令将证书应用于您的环境 aws elasticbeanstalk update-environment --environment-name Your-Environment --option-settings file://PATH-TO-JSON/elb-acm.json
对我而言,路径只是file://elb-ecm.json
,因为(我相信原因是因为)我在网络根目录中运行命令而文件位于同一目录This article goes into detail中(并且为我)。祝你好运!
请注意,尽管可以,但您不应直接通过Load Balancer控制台(EC2> Load Balancers)分配证书,因为每当您重建Beanstalk环境时,负载均衡器都会被吹走并重新创建。
此外,在将其应用到Beanstalk环境之前,请确保已按照自己的意愿设置证书。例如,如果您希望* .mydomain.com和裸mydomain.com都是安全的,请确保首先完全配置,因为一旦您运行这些命令,没有简单的方法将您的证书与您的环境“取消关联” (如果我在这种情况下没有弄错的话,你基本上需要完全终止你的环境并创建一个新环境。)
此外,您需要在应用中设置一些重定向代码,以便在您设置证书后对任何非安全请求执行301重定向。要执行重定向,您需要在传入请求中查找X-Forwarded-Proto
标头。如果它不安全,您应该重定向到安全端口。例如,以下是我的应用程序代码的外观:
// in production, only allow secure requests (https)
public function performSecureRedirect(rc) {
// based on domain comparison
var isLive = myEnvironmentData.isLive;
// setting up the health check url is important for smooth beanstalk deployments
// beanstalk issues this healthcheck request via a non-secure port
var isAmazonHealthcheckUrl = rc.event eq "system.healthcheck";
if (isLive and not isAmazonHealthcheckUrl) {
var headerData = getHTTPRequestData().headers;
// x-forwarded-proto is a special header
// setup by Amazon ELB (Elastic Load Balancer)
var requestProtocol = getHttpRequestData().headers['x-forwarded-proto'];
var isSecureRequest = requestProtocol eq "https";
if (not isSecureRequest) {
location("https://" & cgi.server_name & cgi.path_info, false, 301);
}
}
}
答案 1 :(得分:0)
Brian FitzGerald和this blog的答案帮助我找到了一种简单的方法(在Elastic beanstalk负载均衡器上设置https并为其使用CRM证书)。
使用AWS Elastic Beanstalk CLI( eb )简化解决方案。正确设置环境后,可以使用eb config
命令。
打开编辑窗口时,向下滚动到aws:elb:loadbalancer
部分。
将负载均衡器部分修改为(在我的情况下,我完全删除了端口80,您可能希望保留它):
aws:elb:loadbalancer:
CrossZone: 'true'
LoadBalancerHTTPPort: 'OFF'
LoadBalancerHTTPSPort: '443'
LoadBalancerPortProtocol: HTTP
LoadBalancerSSLPortProtocol: HTTPS
SSLCertificateId: PLACE HERE THE CRM CERTIFICATE ARN
SecurityGroups: '{"Fn::GetAtt":["AWSEBLoadBalancerSecurityGroup","GroupId"]},{"Ref":"AWSEBLoadBalancerSecurityGroup"}'
可以在AWS>中找到证书的arn。证书经理。 打开证书并复制ARN号码(在右下角)。
我保存了配置,等待环境得到更新,就是这样。