无法在GCP VM实例内部创建TPU,报PERMISSION_DENIED错误如何解决?
GCP VM内创建TPU权限报错排查步骤
1. 优先确认gcloud活跃身份(核心坑点)
你配置的GOOGLE_APPLICATION_CREDENTIALS是应用默认凭证(ADC)的环境变量,仅被GCP客户端SDK调用,gcloud命令本身不会读取该变量获取身份,所以之前的配置无效。
在VM内执行如下命令查看当前gcloud使用的账号:gcloud config get-value account
如果返回的不是你本地使用的有权限的账号/服务账号,执行以下命令激活你上传的服务账号密钥:gcloud auth activate-service-account --key-file=$HOME/.credentials/service-account.googleapis.com.json
激活后重新执行TPU创建命令测试。
2. 校验VM实例访问范围
你提到的「授予所有云API的完全访问权限」是VM实例的访问范围(Access Scope)配置,该配置会限制VM上的身份可调用的API范围:
- 执行命令查看当前VM的访问范围:
gcloud compute instances describe [你的VM实例名] --zone [VM所在可用区] --format="value(serviceAccounts[].scopes)" - 如果返回结果中没有
https://www.googleapis.com/auth/cloud-platform,需要先关闭VM,将实例的访问范围修改为「允许对所有Cloud API的完全访问」,重启后再测试。
3. 确认服务账号本身的IAM权限
访问范围只是API调用的放行开关,服务账号本身需要具备TPU创建权限才能操作:
- 先确认当前gcloud使用的服务账号邮箱,执行命令查看该账号已被授予的角色:
gcloud projects get-iam-policy $PROJECT_NAME --filter="bindings.members:serviceAccount:[你的服务账号邮箱]" --format="value(bindings.role)" - 如果返回结果中没有
roles/tpu.admin或roles/tpu.editor角色,执行以下命令授权:gcloud projects add-iam-policy-binding $PROJECT_NAME --member="serviceAccount:[你的服务账号邮箱]" --role="roles/tpu.admin"
授权后等待1-2分钟权限生效,再执行TPU创建命令。
4. 校验项目变量配置
执行echo $PROJECT_NAME确认VM内的项目变量值和你本地使用的项目ID完全一致,避免因变量指向错误项目导致权限报错。
内容的提问来源于stack exchange,提问作者dragon18456
相关产品推荐
相关产品推荐

