使用Google Colab在GCP App Engine创建应用遇权限拒绝问题
问题背景
无法安装本地Google Cloud SDK,通过Google Colab操作GCP:
- 已用具备Owner角色的账号完成认证
- 执行
!gcloud services enable appengine.googleapis.com无报错 - 运行
!gcloud app create时,触发服务启用请求却返回PERMISSION_DENIED,提示无serviceusage.services.enable权限
执行代码及关键输出
%pip install google-cloud-language>=2.9.1 PROJECT_ID = "myprojectXXX" from google.colab import auth auth.authenticate_user(project_id=PROJECT_ID)
✔️ Authenticated
!gcloud services enable appengine.googleapis.com !gcloud auth list
Credentialed Accounts
ACTIVE ACCOUNT
- XXXXXXXXXX@gmail.com
!gcloud projects get-iam-policy $PROJECT_ID
bindings:
....
- members:
- user:XXXXXXXXXX@gmail.com
role: roles/owner
...
!gcloud app create
API [appengine.googleapis.com] not enabled on project [522309567947]. Would you like to enable and retry (this will take a few minutes)? (y/N)? y
Enabling service [appengine.googleapis.com] on project [522309567947]...
ERROR: (gcloud.app.create) PERMISSION_DENIED: Permission denied to enable service [appengine.googleapis.com]
...
'@type': type.googleapis.com/google.rpc.ErrorInfo
domain: serviceusage.googleapis.com
metadata:
permission: serviceusage.services.enable
resource: '522309567947'
service: serviceusage.googleapis.com
reason: AUTH_PERMISSION_DENIED
可能的原因
- Colab临时凭证的权限限制:
auth.authenticate_user()获取的是短期OAuth凭证,虽然账号拥有Owner角色,但部分细粒度服务权限(如serviceusage.services.enable)可能未被包含在凭证的权限范围内。 - 组织策略约束:若项目隶属于GCP组织,组织级策略(如
constraints/serviceuser.services)可能禁止启用App Engine服务,或限制了服务启用的权限主体,Owner角色也会受此约束。 - 服务启用的异步延迟:之前执行的
!gcloud services enable appengine.googleapis.com是异步操作,可能尚未完成生效,gcloud app create触发的二次启用请求因状态不一致导致权限检查失败。 - 项目结算状态异常:项目关联的结算账号若处于欠费、暂停或未激活状态,即使拥有Owner权限,也无法启用新的GCP服务。
解决步骤
确认服务启用状态并等待生效
在Colab中执行以下命令,检查App Engine服务是否已启用:!gcloud services list --enabled | grep appengine若未返回结果,执行异步启用命令并等待5-10分钟:
!gcloud services enable appengine.googleapis.com --async之后再尝试
!gcloud app create。检查组织策略限制
登录GCP控制台,进入项目的「IAM与管理员」→「组织策略」,搜索serviceuser.services约束:- 确认约束是否允许启用
appengine.googleapis.com - 若存在禁止规则,联系组织管理员调整策略
- 确认约束是否允许启用
验证项目结算状态
进入GCP控制台「结算」页面,确认项目的结算账号处于活跃状态,无欠费或暂停记录。使用项目字符串ID而非数字ID
确保PROJECT_ID变量设置为项目的字符串ID(如myprojectXXX),而非命令输出中的数字项目ID,重新执行认证后再尝试命令:PROJECT_ID = "myprojectXXX" from google.colab import auth auth.authenticate_user(project_id=PROJECT_ID)直接在控制台创建App Engine应用
若Colab的权限问题无法快速解决,直接登录GCP控制台,进入「App Engine」→「创建应用」完成初始化,之后回到Colab即可执行后续操作。
内容的提问来源于stack exchange,提问作者M. D.

