You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过CloudFormation为ALB自动挂载SSL证书并获取AWS账号ID

实现方案

完全可以在CloudFormation栈内闭环完成SSL证书的全生命周期管理,不需要硬编码AWS账号ID、证书ARN,也不需要依赖栈外手动创建证书的流程。

无需硬编码获取账号/区域信息

CloudFormation 内置了原生伪参数,部署时会自动从当前运行上下文拉取对应值,完全不需要手动配置:

  • AWS::AccountId:自动解析为当前栈所属的AWS账号ID
  • AWS::Region:自动解析为当前栈的部署区域
    常规资源引用场景下甚至不需要主动调用这些伪参数,直接通过资源引用就能拿到合法的ARN,从根源上避免硬编码。

栈内自动创建并验证SSL证书

首先删除模板中原有带硬编码默认值的Certificate参数,替换为域名、托管区相关的入参,再通过ACM资源自动完成证书申请和DNS验证:

Parameters:
  VPC:
    Type: AWS::EC2::VPC::Id
  SubnetA:
    Type: AWS::EC2::Subnet::Id
  SubnetB:
    Type: AWS::EC2::Subnet::Id
  DomainName:
    Type: String
    Description: 服务对应的主域名,例如 mydomain.com
  SubDomainPrefix:
    Type: String
    Default: staging-api
    Description: 服务子域名前缀,最终访问地址为 <SubDomainPrefix>.<DomainName>
  Route53HostedZoneId:
    Type: AWS::Route53::HostedZone::Id
    Description: 对应域名在Route53的托管区ID

在Resources块中定义ACM证书资源,配置DNS验证后,CloudFormation会自动在对应Route53托管区写入验证CNAME记录,等待ACM完成域名所有权校验后才会继续后续资源创建,不会出现证书不存在的部署错误:

Resources:
  # 自动申请并验证SSL证书
  ServiceSSLCertificate:
    Type: AWS::CertificateManager::Certificate
    Properties:
      DomainName: !Sub "${SubDomainPrefix}.${DomainName}"
      ValidationMethod: DNS
      DomainValidationOptions:
        - DomainName: !Sub "${SubDomainPrefix}.${DomainName}"
          HostedZoneId: !Ref Route53HostedZoneId
      Tags:
        - Key: Name
          Value: !Sub "${SubDomainPrefix}-${DomainName}-ssl-cert"

证书签发后,ACM会自动在到期前完成续期,只要验证CNAME记录存在,全程不需要人工操作。

负载均衡器自动关联证书

配置ALB的HTTPS监听器时,直接引用刚才创建的证书资源即可,不需要手动拼接证书ARN:

# ALB HTTPS监听器配置示例
  ServiceALBHttpsListener:
    Type: AWS::ElasticLoadBalancingV2::Listener
    Properties:
      LoadBalancerArn: !Ref ServiceALB # 替换为你模板中已定义的ALB资源名
      Port: 443
      Protocol: HTTPS
      SslPolicy: ELBSecurityPolicy-TLS13-1-2-2021-06
      DefaultActions:
        - Type: forward
          TargetGroupArn: !Ref FargateServiceTargetGroup # 替换为你模板中已定义的Fargate目标组
      Certificates:
        - CertificateArn: !Ref ServiceSSLCertificate

特殊场景说明

  • 如果你的Route53托管区属于其他AWS账号,只需要提前给当前部署账号授予托管区的记录编辑权限即可,验证流程和同账号场景一致。
  • 如果你需要为CloudFront分配us-east-1区域的证书,可以把证书资源单独部署在us-east-1区域的嵌套栈/独立栈中,通过CloudFormation跨栈导出引用证书ARN,同样不需要硬编码任何固定值。
  • 后续需要更换服务域名时,只需要修改对应域名参数重新部署,CloudFormation会自动完成新证书申请、监听器绑定切换、旧证书清理的全流程。

内容的提问来源于stack exchange,提问作者Igor Shmukler

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 02:36:15