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

如何通过AWS CodePipeline跨账号部署项目至EC2实例

跨AWS账号从CodePipeline部署至EC2实例(无需CloudFormation)

核心实现逻辑

通过IAM跨账号角色信任打通权限,结合CodePipeline的脚本执行能力或CodeDeploy服务,直接完成跨账号部署,全程无需CloudFormation。

分步操作指南

1. 在Account B配置跨账号信任角色

  • 登录Account B的IAM控制台,创建新角色:
    • 信任实体选择「另一个AWS账户」,填入Account A的账号ID
    • 为角色附加最小权限:比如允许访问目标EC2的AmazonEC2ReadOnlyAccess、读取Account A部署包S3桶的AmazonS3ReadOnlyAccess(限定具体桶路径)、以及SSM命令执行权限AmazonSSMFullAccess(若用SSM部署)
    • 记录角色ARN,格式为 arn:aws:iam::ACCOUNT_B_ID:role/AccountADeployPermission

2. 在Account A配置CodePipeline部署环节

方案一:用CodeBuild执行跨账号部署脚本

  • 在Account A创建CodeBuild项目,配置环境变量存储Account B账号ID、目标EC2实例ID、步骤1的角色ARN
  • 编写buildspec.yml核心脚本:
    phases:
      build:
        commands:
          # 跨账号获取临时凭证
          ASSUME_ROLE_OUTPUT=$(aws sts assume-role --role-arn "arn:aws:iam::ACCOUNT_B_ID:role/AccountADeployPermission" --role-session-name "CrossAccountDeploy")
          # 导出临时凭证到环境变量
          export AWS_ACCESS_KEY_ID=$(echo $ASSUME_ROLE_OUTPUT | jq -r '.Credentials.AccessKeyId')
          export AWS_SECRET_ACCESS_KEY=$(echo $ASSUME_ROLE_OUTPUT | jq -r '.Credentials.SecretAccessKey')
          export AWS_SESSION_TOKEN=$(echo $ASSUME_ROLE_OUTPUT | jq -r '.Credentials.SessionToken')
          export AWS_DEFAULT_REGION="你的AWS区域"
          # 通过SSM执行部署命令(无需开放SSH端口)
          aws ssm send-command --instance-ids "TARGET_EC2_ID" --document-name "AWS-RunShellScript" --parameters commands="
            aws s3 cp s3://account-a-deploy-bucket/latest-code.zip /tmp/
            unzip /tmp/latest-code.zip -d /var/app/current
            systemctl restart your-service
          "
    
  • 在CodePipeline中添加「Build」阶段,关联该CodeBuild项目作为部署执行单元

方案二:用CodeDeploy完成部署(无需CloudFormation配置)

  • 在Account B的目标EC2上安装CodeDeploy代理,给EC2绑定带AWSCodeDeployRole权限的IAM角色
  • 在Account B提前创建CodeDeploy应用和部署组(手动创建,不用CloudFormation)
  • 在Account A的CodePipeline中添加「Deploy」阶段:
    • 选择CodeDeploy作为提供商,配置跨账号权限:给CodePipeline服务角色添加sts:AssumeRole权限,允许访问Account B的CodeDeploy部署角色
    • 指定Account B的CodeDeploy应用和部署组,部署包存储在Account A的S3桶中,确保Account B的CodeDeploy角色有权限读取该桶

3. 验证部署流程

  • 触发CodePipeline运行,检查CodeBuild日志或CodeDeploy部署记录
  • 登录Account B的EC2实例,确认代码已部署、服务正常运行

关键注意事项

  • 权限最小化:严格限定IAM角色的资源范围(比如指定具体S3桶、EC2实例ID),避免过度授权
  • 安全优先:优先用SSM Session Manager替代SCP/SSH,无需开放公网端口
  • 有效期控制:STS临时凭证默认有效期1小时,确保部署流程在时效内完成

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 15:07:31