使用gcloud服务账号执行services list --available遇权限拒绝问题求助
gcloud services list --available权限错误排查 问题描述
我使用服务账号通过gcloud排查API Gateway端点故障时遇到权限问题,操作流程及错误信息如下:
- 设置服务账号凭证环境变量:
export GOOGLE_APPLICATION_CREDENTIALS=/path/to/credential/fils/PROJECTNAME-hash.json - 运行命令:
gcloud services list --available
终端返回错误:
ERROR: (gcloud.services.list) User [
@ .iam.gserviceaccount.com] does not have permission to access projects instance [ ] (or it may not exist): Permission denied to list services for consumer container [projects/ ]
Help Token:
- '@type': type.googleapis.com/google.rpc.PreconditionFailure
violations:
- subject: ?error_code=110002&service=cloudresourcemanager.googleapis.com&permission=serviceusage.services.list&resource=projects/
type: googleapis.com- '@type': type.googleapis.com/google.rpc.ErrorInfo
domain: serviceusage.googleapis.com
metadata:
permission: serviceusage.services.list
resource: projects/
service: cloudresourcemanager.googleapis.com
reason: AUTH_PERMISSION_DENIED
我已为该服务账号配置了对应权限(附权限截图),需明确错误原因及解决方法,让服务账号能成功执行该命令。
可能原因
- 权限未生效或绑定错误:IAM权限变更存在1-5分钟的生效延迟,若刚添加权限可能未全局同步;或服务账号未被正确授予包含
serviceusage.services.list权限的角色。 - 权限不匹配:执行该命令需要
serviceusage.services.list权限,对应默认IAM角色为Service Usage Viewer(roles/serviceusage.serviceUsageViewer),若服务账号无此角色或含该权限的其他角色(如Project Viewer),会触发报错。 - 项目上下文错误:gcloud命令可能未在目标项目上下文执行,或凭证所属服务账号不属于报错中的项目。
- 凭证无效:
GOOGLE_APPLICATION_CREDENTIALS指向的JSON文件路径错误、文件损坏,或密钥已过期/被撤销。
解决步骤
确认权限配置
登录Google Cloud控制台进入IAM页面,找到目标服务账号,检查是否已分配Service Usage Viewer、Project Viewer或包含serviceusage.services.list权限的自定义角色。若无,直接添加Service Usage Viewer角色。等待权限生效
添加权限后等待1-5分钟,让IAM权限全局同步,再重新执行命令测试。锁定项目上下文
确保gcloud命令在正确的项目下执行:gcloud config set project <MY PROJECT ID>执行完成后再次运行
gcloud services list --available。验证凭证有效性
- 检查
GOOGLE_APPLICATION_CREDENTIALS指向的JSON文件路径是否正确、文件未损坏。 - 执行以下命令激活服务账号,验证凭证是否有效:
若激活失败,重新生成该服务账号的密钥文件。gcloud auth activate-service-account --key-file=$GOOGLE_APPLICATION_CREDENTIALS
- 检查
确认项目存在性
核实projects/<MY PROJECT NAME>项目确实存在,且服务账号所属项目与目标项目一致(跨项目访问需额外配置权限)。
内容的提问来源于stack exchange,提问作者ChristianOConnor

