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

GCP Cloud Build权限错误:调用者无权限或资源不存在

解决Cloud Build推送镜像到Artifact Registry的权限问题

我正尝试将单体仓库(monorepo)中的NestJS应用通过GCP Cloud Build API部署,目前已能成功构建镜像,但推送至Artifact Registry时失败,收到**"Caller does not have permission or the resource may not exist"**错误。

我的cloudbuild.yaml内容如下:

steps:
  - name: 'gcr.io/cloud-builder/docker'
    args:
      [
        'build',
        '-t',
        'europe-west1-docker.pkg.dev/driven-atrium-414021/reservations/production',
        '-f',
        'apps/reservations/Dockerfile',
        '.',
      ]
  - name: 'gcr.io/cloud-builder/docker'
    args:
      [
        'push',
        'europe-west1-docker.pkg.dev/driven-atrium-414021/reservations/production',
      ]

  - name: 'gcr.io/cloud-builder/docker'
    args:
      [
        'build',
        '-t',
        'europe-west1-docker.pkg.dev/driven-atrium-414021/auth/production',
        '-f',
        'apps/auth/Dockerfile',
        '.',
      ]
  - name: 'gcr.io/cloud-builder/docker'
    args:
      [
        'push',
        'europe-west1-docker.pkg.dev/driven-atrium-414021/auth/production',
      ]

  - name: 'gcr.io/cloud-builder/docker'
    args:
      [
        'build',
        '-t',
        'europe-west1-docker.pkg.dev/driven-atrium-414021/notifications/production',
        '-f',
        'apps/notifications/Dockerfile',
        '.',
      ]
  - name: 'gcr.io/cloud-builder/docker'
    args:
      [
        'push',
        'europe-west1-docker.pkg.dev/driven-atrium-414021/notifications/production',
      ]

  - name: 'gcr.io/cloud-builder/docker'
    args:
      [
        'build',
        '-t',
        'europe-west1-docker.pkg.dev/driven-atrium-414021/payments/production',
        '-f',
        'apps/payments/Dockerfile',
        '.',
      ]
  - name: 'gcr.io/cloud-builder/docker'
    args:
      [
        'push',
        'europe-west1-docker.pkg.dev/driven-atrium-414021/payments/production',
      ]

已执行过gcloud auth configure-docker gcr.io命令,且我的账号拥有管理员/所有者角色,Artifact Registry中的目标仓库也已确认存在,但问题仍未解决。


排查与解决方案

1. 检查Cloud Build服务账号权限

Cloud Build默认使用[PROJECT_NUMBER]@cloudbuild.gserviceaccount.com服务账号执行构建,而非你本地的用户账号,这是新手常忽略的点。需为该账号添加Artifact Registry权限:

  • 进入GCP控制台的IAM与管理员页面
  • 搜索并定位Cloud Build服务账号
  • 添加以下角色之一:
    • Artifact Registry Writer:仅镜像推送权限,遵循最小权限原则
    • Artifact Registry Administrator:全权限,适合快速测试

2. 补充配置Artifact Registry域名的Docker认证

你推送的仓库域名为europe-west1-docker.pkg.dev,但仅执行了gcr.io的配置,需补充执行:

gcloud auth configure-docker europe-west1-docker.pkg.dev

3. 核对仓库地址的准确性

确认cloudbuild.yaml中的仓库地址与Artifact Registry实际配置完全一致:

  • 地域是否为europe-west1
  • 仓库名称(reservations、auth等)是否与控制台创建的一致
  • 镜像标签(production)是否符合Artifact Registry命名规则

4. 本地手动测试推送

在本地环境执行推送命令,验证是否能正常推送:

docker push europe-west1-docker.pkg.dev/driven-atrium-414021/reservations/production

若本地能推送,说明问题出在Cloud Build服务账号权限;若本地也失败,检查本地Docker认证配置或网络连接。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 03:53:12