You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 08:06:03