Node.js本地使用service-account.json访问Google Secret Manager报错求助
问题排查与正确配置方案
错误根因梳理
- Secret Manager API未在对应项目中启用:报错提示的项目ID 123456789012未开通Secret Manager服务,或你当前使用的服务账号所属项目与报错项目不匹配
- 密钥版本名称参数格式错误:调用
accessSecretVersion时传入的name参数不符合要求,仅写latest无法定位到对应密钥 - 服务账号权限不足:API开通后,服务账号没有对应密钥的访问权限也会触发权限报错
分步解决方法
第一步:开通Secret Manager API
访问对应项目的Google Cloud控制台,进入API和服务管理页,搜索Secret Manager API并启用服务,启用后等待2-5分钟待配置生效。
第二步:修正代码配置
你可以直接在初始化Secret Manager客户端时传入服务账号配置,无需依赖环境变量,稳定性更高:
// ./index.js (async() => { const { SecretManagerServiceClient } = require('@google-cloud/secret-manager'); // 直接引入本地service account文件 const serviceAccount = require('./service-account.json'); // 初始化客户端时显式传入凭证和项目ID const client = new SecretManagerServiceClient({ credentials: serviceAccount, projectId: serviceAccount.project_id }); // 注意name参数必须为完整格式:projects/[项目ID]/secrets/[你的密钥名称]/versions/latest const [SOME_APIKEY] = await client.accessSecretVersion({ name: `projects/${serviceAccount.project_id}/secrets/替换为你的实际密钥名称/versions/latest` }); // 提取密钥明文内容 const keyValue = SOME_APIKEY.payload.data.toString('utf8'); console.log('key:', keyValue); })();
第三步:配置服务账号访问权限
进入Google Cloud控制台的IAM管理页,给当前使用的服务账号my-secrets-email@test-dev-project.iam.gserviceaccount.com分配至少Secret Manager Secret Accessor角色,确保账号具备密钥读取权限。
可选:环境变量配置方案(替代代码内传参)
如果你更倾向使用环境变量的配置方式,注意PowerShell设置环境变量后需在同一个终端窗口执行启动命令,不可新开窗口操作:
# 先设置凭证路径环境变量 $env:GOOGLE_APPLICATION_CREDENTIALS="./service-account.json" # 同一窗口内直接启动应用 node index.js
内容的提问来源于stack exchange,提问作者SeriousLee
相关产品推荐
相关产品推荐

