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

Central账户CodePipeline跨账号部署CloudFormation到Dev并同步输出到参数存储是否可行

跨账号CodePipeline同步Dev资源输出到Central账户SSM的实现方案

方案可行性结论

该方案完全可以实现,你当前编写的CloudFormation模板无法直接生效的核心原因是:单个CloudFormation栈默认只能部署到单个AWS账户,无法在同一份模板内同时向两个不同AWS账户创建资源。

可行实现思路

  • 第一步:拆分CloudFormation模板
    首先把原有模板拆为两份:

    1. Dev账户S3栈模板:仅包含S3存储桶定义,新增Outputs段导出S3的DomainName属性,示例如下:
    # 部署到Dev账户的S3栈模板 dev-s3-stack.yaml
    Resources:
      DeployDevAccountBucket:
        Type: AWS::S3::Bucket
        Properties: 
          BucketName: "dev-bucket"
          AccessControl: Private
          BucketEncryption: 
            ServerSideEncryptionConfiguration: 
              - ServerSideEncryptionByDefault:
                  SSEAlgorithm: AES256
          VersioningConfiguration:
            Status: "Enabled"
    Outputs:
      S3BucketDomainName:
        Value: !GetAtt DeployDevAccountBucket.DomainName
        Export:
          Name: DevAccountS3DomainName
    
    1. (可选)Central账户SSM参数模板:仅包含SSM Parameter定义,通过模板参数接收S3域名值,示例如下:
    # 部署到Central账户的SSM参数模板 central-ssm-stack.yaml
    Parameters:
      DevS3DomainName:
        Type: String
        Description: 从Dev账户S3栈获取的域名
    Resources:
      BucketNameParameter: 
        Type: AWS::SSM::Parameter
        Properties: 
          Name: "dev-account-s3-domainname"
          Type: String
          Value: !Ref DevS3DomainName
    
  • 第二步:配置跨账号访问权限

    1. 在Dev账户创建专用部署角色,信任Central账户的CodePipeline服务角色,同时授予CloudFormation部署、S3资源创建的必要权限
    2. 给Central账户的CodePipeline服务角色添加sts:AssumeRole权限,允许其代入Dev账户的部署角色
    3. 给后续写入SSM的动作角色(CodeBuild角色或Central账户的CFN部署角色)授予SSM参数的写权限
  • 第三步:编排CodePipeline阶段
    Pipeline全程部署在Central账户,按以下顺序设置阶段:

    1. 源阶段:拉取存储上述两份CFN模板的代码仓库(CodeCommit/GitHub等)
    2. Dev资源部署阶段:添加CloudFormation部署动作,角色ARN填写Dev账户的部署角色ARN,部署dev-s3-stack.yaml到Dev账户,开启动作的「将栈输出导出为Pipeline变量」配置
    3. SSM参数写入阶段,二选一实现即可:
    • 方案1:使用CodeBuild动作,直接读取上一步导出的S3域名Pipeline变量,执行aws ssm put-parameter命令写入Central账户的Parameter Store
    • 方案2:添加CloudFormation部署动作(默认使用Central账户权限),将上一步导出的S3域名作为参数传入central-ssm-stack.yaml,部署到Central账户完成参数创建

注意事项

  • 所有权限遵循最小原则,避免授予超出必要范围的权限
  • 若存储的参数为敏感值,可将SSM参数类型设置为SecureString,使用KMS密钥加密存储
  • 如果需要同步多个Dev账户资源的输出,可统一在Pipeline中添加变量收集和批量写入SSM的逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 23:27:04