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

如何在eu-west-1区域的CloudFormation栈中跨区域引用us-east-1区域的CloudFront专用ACM证书?

跨区域引用CloudFront ACM证书ARN的实用方案

CloudFormation的!ImportValue确实不支持跨区域引用,不想硬编码证书ARN的话,这几个办法都能解决问题:

方法1:用SSM参数存储传递ARN(最推荐)

这个方案简单易维护,成本也低,具体这么做:

  1. 在us-east-1的证书栈里把ARN存进SSM
    给你的us-east-1栈加一个SSM参数资源,把ACM证书的ARN存进去,参数名称可以设成/cloudfront/certificate/arn这种容易识别的:
AWSTemplateFormatVersion: '2010-09-09'
Resources:
  CloudFrontCertificate:
    Type: AWS::CertificateManager::Certificate
    Properties:
      DomainName: 'bla.bla.com'
      ValidationMethod: DNS

  CertificateSSMParam:
    Type: AWS::SSM::Parameter
    Properties:
      Name: /cloudfront/certificate/arn
      Type: String
      Value: !Ref CloudFrontCertificate
      Description: ARN of CloudFront ACM cert from us-east-1
  1. 同步ARN到eu-west-1的SSM(或直接跨区域读取)
    SSM参数是区域级的,你可以部署完us-east-1栈后,用AWS CLI把ARN同步到eu-west-1的SSM:
# 获取us-east-1栈的证书ARN
CERT_ARN=$(aws cloudformation describe-stacks --stack-name your-us-east-1-cert-stack --region us-east-1 --query "Stacks[0].Outputs[?OutputKey=='CertificateArn'].OutputValue" --output text)
# 存入eu-west-1的SSM参数
aws ssm put-parameter --name /cloudfront/certificate/arn --value $CERT_ARN --type String --region eu-west-1 --overwrite

如果需要自动化,也可以写个Lambda函数完成同步,手动CLI命令足够应付大多数场景。

  1. 在eu-west-1的CloudFront栈里引用参数
    现在直接用!GetParameter就能拿到ARN了:
Distribution:
  Type: AWS::CloudFront::Distribution
  Properties:
    DistributionConfig:
      # 你的其他配置...
      ViewerCertificate:
        AcmCertificateArn: !GetParameter /cloudfront/certificate/arn
        SslSupportMethod: sni-only

方法2:用Secrets Manager存ARN

和SSM类似,但Secrets Manager支持跨区域访问(只要权限配置对),适合需要更严格权限控制的场景:

  1. 在us-east-1的栈里把ARN存进Secrets Manager
CertificateSecret:
  Type: AWS::SecretsManager::Secret
  Properties:
    Name: cloudfront-certificate-arn
    SecretString: !Sub '{"certArn": "${CloudFrontCertificate}"}'
  1. 在eu-west-1的栈里直接引用
    用CloudFormation的!SecretsManager解析函数就能获取ARN:
Distribution:
  Type: AWS::CloudFront::Distribution
  Properties:
    DistributionConfig:
      # 其他配置...
      ViewerCertificate:
        AcmCertificateArn: !SecretsManager '{{resolve:secretsmanager:cloudfront-certificate-arn:SecretString:certArn}}'
        SslSupportMethod: sni-only

记得给eu-west-1的栈执行角色加上secretsmanager:GetSecretValue权限。

方法3:用Lambda自定义资源跨区域拉取栈输出

如果想完全自动化,不用手动同步参数,可以写个Lambda函数帮你跨区域获取us-east-1栈的输出:

  1. 创建Lambda函数
    函数逻辑很简单:接收CloudFormation的请求,调用AWS SDK查询us-east-1目标栈的输出,返回证书ARN。

  2. 在eu-west-1的栈里添加自定义资源

CertArnRetriever:
  Type: Custom::CertArnRetriever
  Properties:
    ServiceToken: !GetAtt CertRetrieverLambda.Arn
    TargetStackName: your-us-east-1-cert-stack
    TargetRegion: us-east-1

Distribution:
  Type: AWS::CloudFront::Distribution
  Properties:
    DistributionConfig:
      # 其他配置...
      ViewerCertificate:
        AcmCertificateArn: !GetAtt CertArnRetriever.CertificateArn
        SslSupportMethod: sni-only

这个方式全程自动化,适合CI/CD流水线场景。

总结

个人最推荐方法1,配置简单,上手快,日常维护也方便。只要同步一次ARN,之后eu-west-1的栈就能直接引用,完全不用硬编码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 06:54:06