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

gcloud auth的访问范围是什么?为何Cloud Shell与本地机器存在差异

问题1:scope定义和与IAM角色的关联

  • OAuth scope是Google OAuth2访问令牌的访问范围限制标识,用于指定该令牌允许调用哪些类别的Google API,是令牌层面的权限边界。
  • 它和IAM角色是双重校验关系:操作需要同时满足两个条件才能成功:
    1. 你使用的访问令牌的scope包含对应服务的API访问权限(比如Artifact Registry的操作只要包含https://www.googleapis.com/auth/cloud-platform就已满足)
    2. 你登录的账号本身被分配了对应资源的IAM角色权限,角色是账号层面的权限边界。
      你的本地令牌已经包含了cloud-platform全量scope,所以scope不足并不是你本次报错的原因。

问题2:Cloud Shell与本地scope差异原因,以及本地访问Artifact Registry的解决方案

scope差异原因

Cloud Shell作为Google官方托管的云终端,默认登录时会自动申请覆盖所有常用GCP服务的scope,而本地执行gcloud auth login时默认仅申请基础的常用scope,因此两者的scope列表长度有差异,但你的本地scope已经包含访问Artifact Registry所需的范围,所以无需调整scope。

你本次报错的真实原因

你使用了sudo执行docker push命令:
你执行gcloud auth configure-docker时用的是当前普通用户,凭证配置写入了当前用户的~/.docker/config.json,而加sudo运行docker时,系统会切换到root用户执行命令,读取的是root用户家目录下的/.docker/config.json,不存在你配置的gcloud凭证助手,因此认证失败触发权限报错。

解决方案(任选其一即可)

  1. 【推荐】将当前用户加入docker用户组,后续无需加sudo执行docker命令:
# 把当前用户加入docker组
sudo usermod -aG docker $USER
# 执行后退出当前终端重新登录,再直接执行push命令即可
docker push us-central1-docker.pkg.dev/<你的项目ID>/quickstart-docker-repo/quickstart-image:tag1
  1. 给root用户也配置docker凭证助手:
sudo gcloud auth configure-docker us-central1-docker.pkg.dev
sudo docker push us-central1-docker.pkg.dev/<你的项目ID>/quickstart-docker-repo/quickstart-image:tag1
  1. 执行sudo时指定HOME目录为当前用户的家目录:
sudo HOME=$HOME docker push us-central1-docker.pkg.dev/<你的项目ID>/quickstart-docker-repo/quickstart-image:tag1

权限验证方法

如果修改后还是报错,可以先执行以下命令验证账号本身的权限是否正常:

gcloud artifacts repositories list --location=us-central1

如果该命令能正常返回仓库列表,说明账号IAM权限没有问题,问题依然出在docker的凭证配置环节;如果该命令也报错,才需要检查对应账号是否被分配了roles/artifactregistry.writer之类的对应角色。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 00:45:00