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

如何在AWS CodeBuild中无需JSON文件认证gcloud CLI推送镜像至GCP Artifact Registry?

无需JSON文件认证GCP CLI并推送镜像到Artifact Registry的方案

首选方案:工作负载身份联合(无密钥认证)

这是最安全的方式,无需存储任何GCP服务账号密钥,通过AWS与GCP的身份联合实现认证:

  1. GCP侧配置

    • 创建工作负载身份池,添加AWS作为身份提供商,设置信任规则允许你的AWS CodeBuild执行角色(ARN)访问。
    • 创建具有Artifact Registry推送权限的GCP服务账号(绑定roles/artifactregistry.writer角色)。
    • 建立服务账号与AWS身份提供商的权限绑定,允许CodeBuild角色扮演该GCP服务账号。
  2. CodeBuild构建脚本(buildspec.yml)配置
    安装gcloud CLI后,直接通过无密钥方式认证:

    # 配置Docker与Artifact Registry的认证
    gcloud auth configure-docker [你的GCP区域]-docker.pkg.dev
    
    # 激活服务账号(无密钥)
    gcloud auth activate-service-account [GCP服务账号邮箱] \
      --no-key-file \
      --workload-identity-pool=[你的身份池ID] \
      --workload-identity-provider=[你的身份提供商ID]
    

备选方案:AWS Secrets Manager注入环境变量

如果暂时无法配置工作负载身份联合,可以将GCP服务账号密钥存储在AWS Secrets Manager中,直接通过管道传递给gcloud,无需落地JSON文件:

  1. 前期准备

    • 将GCP服务账号的JSON密钥内容以字符串形式存入AWS Secrets Manager。
    • 给CodeBuild执行角色添加secretsmanager:GetSecretValue权限,允许读取该密钥。
  2. CodeBuild构建脚本配置

    # 获取密钥并直接认证GCP CLI
    aws secretsmanager get-secret-value \
      --secret-id [你的密钥名称] \
      --query SecretString \
      --output text | gcloud auth activate-service-account --key-file=-
    
    # 配置Docker认证
    gcloud auth configure-docker [你的GCP区域]-docker.pkg.dev
    

方案对比

  • 工作负载身份联合:无密钥、无需维护密钥轮换、安全合规,是长期推荐的最佳实践。
  • Secrets Manager方案:实现简单,但需要存储和维护密钥,存在泄露风险,适合临时过渡场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 19:35:21