AWS Elastic Beanstalk 负载均衡器在哪里寻找认证?
Posted
技术标签:
【中文标题】AWS Elastic Beanstalk 负载均衡器在哪里寻找认证?【英文标题】:Where does AWS Elastic Beanstalk Load Balancer look for certifications? 【发布时间】:2016-07-26 14:26:15 【问题描述】:我正在设置 AWS Elastic Beanstalk 应用程序,我希望它的流量是 HTTPS。
我创建了一个与 beanstalk url 匹配的 DNS CNAME 记录,并在 AWS Certificate Manager 中为该 DNS 名称创建并批准了一个证书。
现在我转到 Elastic Beanstalk 环境 --> 配置 --> 网络层/负载均衡器(下图),以便将“安全侦听器端口”从关闭设置为 443 并选择我的证书。
但我的证书没有可供选择! 所以我的问题是如何让我的证书或证书进入该选择列表,或者这是 AWS 中的一个错误?
注意 - 我在访问 EC2/负载均衡器时能够看到我的证书,并且能够将负载均衡器从 HTTP 更改为 HTTPS 并在那里选择我的证书。 但这并没有反映仍然显示端口 80 的 Elastic Beanstalk 负载均衡器配置。使用 HTTPS 到 beanstalk 并不能以这种方式工作。
救命!
【问题讨论】:
【参考方案1】:目前无法通过控制台将您在证书管理器中创建的证书分配给您的 Beanstalk 环境。
为了完成此操作,您需要使用 AWS CLI。我能够做到这一点,幸运的是,这很容易。
简而言之,您需要:
创建一个 elb-acm.json 文件并将其放在您的 Web 根目录中的某个位置。我将注意力直接放在应用程序的 Web 根目录中。 转到证书管理器并获取证书的 arn ID 使用update environment
命令将您的证书应用到您的环境中
aws elasticbeanstalk update-environment --environment-name Your-Environment --option-settings file://PATH-TO-JSON/elb-acm.json
对我来说,路径只是 file://elb-ecm.json
,因为(我相信原因是因为)我在 Web 根目录中运行命令,并且文件位于同一目录中 This article goes into detail(并且为我工作)。祝你好运!
请注意,尽管可以,但您不应直接通过负载均衡器控制台(EC2 > 负载均衡器)分配证书,因为每当您重建 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);
【讨论】:
为此发送。关于 aws cli - 我们是在谈论 'awsebcli' 还是只是 'aws' cli?我很快就会去检查那个程序。与此同时,我实际上设法通过更改 EC2 > 负载均衡器来设置它,以至于你提到这将在升级时被替换。 很确定它是主要的“aws”cli。我链接到 Anand Capur 的那篇文章非常好。【参考方案2】: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"'
证书的 arn 可以在 AWS > Certificate Manager 中找到。 打开证书并复制 ARN 编号(在右下角)。
我保存了配置,等待环境更新就可以了。
【讨论】:
以上是关于AWS Elastic Beanstalk 负载均衡器在哪里寻找认证?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 AWS 中为 Elastic Beanstalk 设置应用程序负载均衡器
AWS Elastic Beanstalk - 将负载均衡器追溯添加到应用程序
AWS Elastic Beanstalk 负载均衡器 SSL/HTTPS 不起作用
是否可以将负载均衡器添加到没有负载均衡器的现有 AWS Elastic Beanstalk 应用程序?
AWS Elastic Beanstalk 环境的静态 IP,带有用于 Tableau 可信身份验证的负载均衡器
无法为在 Elastic Beanstalk AWS 上运行 ASP.NET 的网站强制使用 HTTPS(使用经典负载均衡器)