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

基于CodePipeline实现跨账号CodeCommit部署故障求助

解决方案:AWS跨账号CodePipeline访问DevOps账号CodeCommit仓库

核心问题定位

CodePipeline默认会在流水线所在账号(Dev/QA/Prod)内查找CodeCommit资源,跨账号访问必须通过双向角色信任+资源权限配置实现,仅填写ARN或单角色配置无法解决账号隔离问题。


1. DevOps账号侧配置(共享CodeCommit资源)

创建跨账号访问角色

在DevOps账号中创建IAM角色(例如命名为CodePipelineCrossAccountSourceRole),信任Dev/QA/Prod三个账号的根用户:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": [
          "arn:aws:iam::<Dev账号ID>:root",
          "arn:aws:iam::<QA账号ID>:root",
          "arn:aws:iam::<Prod账号ID>:root"
        ]
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

附加CodeCommit访问权限

给上述角色绑定权限策略,允许访问目标CodeCommit仓库:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "codecommit:GetBranch",
        "codecommit:GetCommit",
        "codecommit:GitPull",
        "codecommit:ListBranches"
      ],
      "Resource": "arn:aws:codecommit::<区域>:<DevOps账号ID>:<目标仓库名>"
    }
  ]
}

KMS密钥权限补充(如果启用加密)

若使用DevOps账号的KMS密钥加密流水线 artifacts,需给上述角色添加KMS解密权限,同时给Dev/QA/Prod的CodePipeline角色添加加密权限。


2. Dev/QA/Prod账号侧配置(流水线访问授权)

给CodePipeline服务角色添加角色扮演权限

找到当前账号的CodePipeline服务角色(通常命名为AWSCodePipelineServiceRole-<区域>-<流水线名>),添加以下权限策略:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "sts:AssumeRole",
      "Resource": "arn:aws:iam::<DevOps账号ID>:role/CodePipelineCrossAccountSourceRole"
    }
  ]
}

配置CodePipeline源阶段

创建/编辑流水线的源阶段时:

  • 选择CodeCommit作为源提供商
  • Repository Name字段填写完整的DevOps账号CodeCommit ARN(例如arn:aws:codecommit:<区域>:<DevOps账号ID>:<目标仓库名>)
  • Role ARN字段填写DevOps账号中创建的跨账号角色ARN(arn:aws:iam::<DevOps账号ID>:role/CodePipelineCrossAccountSourceRole)

3. VPC与安全组验证

因为流水线在EKS集群VPC内执行,需确保:

  • VPC已创建CodeCommit的VPC端点(com.amazonaws.<区域>.codecommit)
  • 流水线所在资源的安全组允许访问该VPC端点的443端口
  • VPC路由表已配置端点的路由规则,避免走公网访问CodeCommit

4. 快速排查步骤

  • 用aws sts assume-role命令在Dev/QA/Prod账号测试能否成功扮演DevOps的跨账号角色,再执行aws codecommit get-branch --repository-name <仓库名> --branch-name <分支名>验证访问权限
  • 查看CodePipeline执行日志,定位具体错误(是AccessDenied还是ResourceNotFound,前者是权限问题,后者是ARN拼写错误)

内容的提问来源于stack exchange,提问作者Math.Random

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 16:51:23