使用@google-cloud/scheduler创建调度器 GCP虚拟机部署后报权限错误
错误说明
部署到GCP虚拟机后运行@google-cloud/scheduler相关代码触发权限不足报错,错误日志如下:
Error: 7 PERMISSION_DENIED: Request had insufficient authentication scopes. at Object.callErrorFromStatus (/app/node_modules/@grpc/grpc-js/build/src/call.js:31:26) at Object.onReceiveStatus (/app/node_modules/@grpc/grpc-js/build/src/client.js:180:52) at Object.onReceiveStatus (/app/node_modules/@grpc/grpc-js/build/src/client-interceptors.js:336:141) at Object.onReceiveStatus (/app/node_modules/@grpc/grpc-js/build/src/client-interceptors.js:299:181) at /app/node_modules/@grpc/grpc-js/build/src/call-stream.js:160:78 at processTicksAndRejections (internal/process/task_queues.js:79:11) { code: 7, details: 'Request had insufficient authentication scopes.', metadata: Metadata { internalRepr: Map { 'google.rpc.errorinfo-bin' => [Array], 'grpc-status-details-bin' => [Array], 'grpc-server-stats-bin' => [Array] }, options: {} }, statusDetails: [ ErrorInfo { metadata: [Object], reason: 'ACCESS_TOKEN_SCOPE_INSUFFICIENT', domain: 'googleapis.com' } ], reason: 'ACCESS_TOKEN_SCOPE_INSUFFICIENT', domain: 'googleapis.com', errorInfoMetadata: { service: 'cloudscheduler.googleapis.com', method: 'google.cloud.scheduler.v1.CloudScheduler.CreateJob' } }
该错误的核心成因是GCP虚拟机使用的身份凭证缺少调用Cloud Scheduler创建任务接口的授权,本地运行正常是因为本地使用的身份凭证(个人账号密钥、gcloud登录凭证等)已经具备对应权限,部署到虚拟机后默认使用虚拟机绑定的服务账号凭证,权限或访问范围不满足要求就会触发报错。
解决方案
- 首先确认虚拟机绑定的服务账号拥有
Cloud Scheduler Admin角色,或自定义包含cloudscheduler.jobs.create权限的角色,权限缺失的话在GCP IAM管理页面给对应服务账号授予对应权限。 - 停止当前运行的虚拟机,编辑虚拟机配置,在「访问权限范围」板块,将Cloud Scheduler对应的权限设置为允许完全访问所有Cloud API,也可以单独指定
https://www.googleapis.com/auth/cloud-scheduler访问范围,修改完成后重启虚拟机即可生效。 - 如果你没有使用虚拟机默认的服务账号,而是手动在代码中配置了服务账号密钥文件,确认该密钥对应的服务账号已经授予Cloud Scheduler相关操作权限,且代码中加载密钥文件的路径配置正确。
内容的提问来源于stack exchange,提问作者parag thakur
相关产品推荐
相关产品推荐

