使用CLI创建ELB解决AWS中国区ACM集成问题

2020年3月AWS中国区正式上线ACM,用户可以申请由AWS颁发的公有证书用于自己的网站和服务,且ACM要求证书只能用于ELB、API Gateway、CloudFront等服务,不允许导出到其他地方部署。由于中国区上线后ELB集成ACM存在问题,在界面上无法直接看到新生成的证书,因此必须通过CLI创建ELB方可使用证书。

一、确认服务准备就绪

用命令行生成ELB之前,需要事先准备好一系列参数,包括:

  • 要使用的VPC子网ID
  • 安全规则组ID
  • ACM生成的证书ID
  • 已经存在的源服务器(EC2等)

确认要绑定的SSL证书在ACM中的ID。如下截图。

二、创建目标组

为简化操作,此步骤可以通过控制台(Console)的图形界面生成。

本例中,因为未进行备案80端口不能开放,因此特意将EC2上源服务器端口调整为50001。配置完毕后,注意复制下来目标组的ARN,下一步将要使用。如下截图。

稍后我们会将此目标组加入到ELB中。

三、创建一个空白的负载均衡器

确认好当前操作区域是宁夏还是北京,然后在CLI中,执行如下命令:

aws elbv2 create-load-balancer \
--name my-load-balancer \
--type application \
--ip-address-type ipv4 \
--subnets subnet-89a313e0 subnet-0a408a71 subnet-28c6f062 \
--security-groups sg-07c11b0da00880bbd

以上代码中,对应参数需要更换为第一个步骤已经准备好的子网ID、安全组ID。

创建完成,CLI返回结果如下截图。

创建完成后,通过控制台的图形界面可以看到,一个新的ELB创建好了,且在监听器部分是空白的状态。如下截图。

下一步将会通过CLI生成一个监听器,加入这个新生成的ELB。现在需要复制这个ELB的ARN,下一步操作将要输入。如下截图。

四、创建监听器并应用ACM证书

在命令行下执行如下代码:

aws elbv2 create-listener \
    --load-balancer-arn arn:aws-cn:elasticloadbalancing:cn-northwest-1:420029960748:loadbalancer/app/my-load-balancer/191c6933bde56dde \
    --protocol HTTPS \
    --port 50002 \
    --certificates CertificateArn=arn:aws-cn:acm:cn-northwest-1:420029960748:certificate/abc9615f-1ed1-4145-91c0-c27233ffb938 \
    --ssl-policy ELBSecurityPolicy-2016-08 \
    --default-actions Type=forward,TargetGroupArn=arn:aws-cn:elasticloadbalancing:cn-northwest-1:420029960748:targetgroup/ec2-50001/23f7a4aa254d40d3

在以上代码中,有三个部分需要替换,分别是 load-balancer-arn、CertificateArn和TargetGroupArn,需要替换为实际环境真实值。另外,因为本测试环境没有备案,因此使用了50002端口,而非443端口。生产环境中请自行替换端口。

替换后,在CLI执行结果如下截图。

现在回到图形界面查看。可以看到一个监听器被绑定成功了。如下截图。

五、验证ELB访问和证书

1、使用浏览器访问ELB对外暴露地址

首先使用ELB的对外暴露endpoint从互联网访问。本例中因为没有通过ICP备案,因此无法使用443端口,改为使用50002端口。使用Chrome浏览器访问效果如下。

这里提示ELB对外暴露的endpoint地址和证书地址域名不匹配。这是正常的,点击下方的继续访问链接,即可进入。

进入网站后,以Chrome浏览器为例,点击地址栏的证书 Not Secure 按钮。如下截图。

展开证书详情后,可以看到证书是Amazon签署的证书。如下截图。

至此ELB工作正常。

2、增加域名解析CNAME访问,解析名称与ACM证书地址一致

为了让浏览器正常识别证书,现在需要增加域名解析。域名解析必须用生成证书时候使用的名称完全一致,才能取得浏览器信任。

在本例中,ELB使用的外网Endpoint如下。

my-load-balancer-419289354.cn-northwest-1.elb.amazonaws.com.cn

现在去Route53 DNS服务,或者其他域名解析服务商,将ACM内生成证书使用使用的域名配置一个CNAME记录,并解析到如上ELB的Endpoint地址。

解析完毕后,用浏览器访问新的域名,可看到浏览器将直接信任,访问正常。如下截图。

六、现有ELB从外部证书更换为ACM证书

在一些场景下,客户可能已经有ELB正在运行,且使用的是外部购买的SSL证书,并在创建ELB时候,以手工方式复制粘贴证书密钥,将证书配置到ELB上。ACM上线后,客户可能需要给已经绑定自有证书的ELB更换为ACM生成的证书。

截止本文编写(2020年4月11日),修改ALB的监听器界面,ACM选项为灰色,不能选中。

这种场景下,可以按照本文的方式,通过CLI进行进行配置,创建一个全新的ELB,替换现有证书的ELB,然后切换流量入口,完成上线。另外,如果可以接受一定停机时间,还可以从第四步开始,直接删除原有的监听器,然后增加新的监听器,并在新的监听器上应用证书,然后完成更换。

七、参考文档

AWS ELB CLI文档

本文完。