首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法访问GCP秘密管理器中的秘密

无法访问GCP秘密管理器中的秘密
EN

Stack Overflow用户
提问于 2020-04-18 00:22:26
回答 3查看 11.9K关注 0票数 14

我正在尝试将我的代码从使用存储在.env文件中的API密钥迁移到使用。我遵循了这里的指令,但是我遇到了一个错误,说我没有权限访问这个秘密。

代码语言:javascript
复制
import * as admin from "firebase-admin"
import { SecretManagerServiceClient } from "@google-cloud/secret-manager"

admin.initializeApp()
const secretClient = new SecretManagerServiceClient()

async function main() {
  async function getSecret(): Promise<string | null | undefined> {
    const [version] = await secretClient.accessSecretVersion({ name: "TELEGRAM_TOKEN" })

    return version.payload?.data?.toString()
  }

  const TELEGRAM_TOKEN = await getSecret()
  console.log(TELEGRAM_TOKEN)
}

main().catch(console.error)

这就是我得到的错误:

代码语言:javascript
复制
> node lib/app.js --telegram

{ Error: 7 PERMISSION_DENIED: Permission denied on resource project TELEGRAM_TOKEN.
    at Object.callErrorFromStatus (/Users/bartekpacia/dev/node/telegram-lang-enforcer/node_modules/@grpc/grpc-js/build/src/call.js:30:26)
    at Object.onReceiveStatus (/Users/bartekpacia/dev/node/telegram-lang-enforcer/node_modules/@grpc/grpc-js/build/src/client.js:174:52)
    at Object.onReceiveStatus (/Users/bartekpacia/dev/node/telegram-lang-enforcer/node_modules/@grpc/grpc-js/build/src/client-interceptors.js:340:141)
    at Object.onReceiveStatus (/Users/bartekpacia/dev/node/telegram-lang-enforcer/node_modules/@grpc/grpc-js/build/src/client-interceptors.js:303:181)
    at Http2CallStream.outputStatus (/Users/bartekpacia/dev/node/telegram-lang-enforcer/node_modules/@grpc/grpc-js/build/src/call-stream.js:114:27)
    at Http2CallStream.maybeOutputStatus (/Users/bartekpacia/dev/node/telegram-lang-enforcer/node_modules/@grpc/grpc-js/build/src/call-stream.js:153:22)
    at Http2CallStream.endCall (/Users/bartekpacia/dev/node/telegram-lang-enforcer/node_modules/@grpc/grpc-js/build/src/call-stream.js:140:18)
    at Http2CallStream.handleTrailers (/Users/bartekpacia/dev/node/telegram-lang-enforcer/node_modules/@grpc/grpc-js/build/src/call-stream.js:262:14)
    at ClientHttp2Stream.emit (events.js:198:13)
    at emit (internal/http2/core.js:265:8)
  code: 7,
  details: 'Permission denied on resource project TELEGRAM_TOKEN.',
  metadata:
   Metadata {
     internalRepr:
      Map {
        'google.rpc.help-bin' => [Array],
        'grpc-status-details-bin' => [Array],
        'grpc-server-stats-bin' => [Array] },
     options: {} },
  note:
   'Exception occurred in retry method that was not classified as transient' }

我确实创建了一个具有“所有者”权限的服务帐户,并下载了它并制作了export GOOGLE_APPLICATION_CREDENTIALS=/Users/...。我的服务帐户.json文件位置在我执行echo $GOOGLE_APPLICATION_CREDENTIALS时正确显示。

我真的不知道我做错了什么。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-04-18 14:55:03

当您访问一个秘密时,您需要指定项目:

代码语言:javascript
复制
await secretClient.accessSecretVersion({ name: "TELEGRAM_TOKEN" })

应该是

代码语言:javascript
复制
await secretClient.accessSecretVersion({ name: "projects/my-project/secrets/TELEGRAM_TOKEN/versions/latest" })
票数 24
EN

Stack Overflow用户

发布于 2020-09-16 13:48:55

我只是遇到了同样的问题,在秘密名称中指定了项目名称之后,我个人不得不添加/versions/latest

代码语言:javascript
复制
await secretClient.accessSecretVersion({
  name: "projects/my-project/secrets/TELEGRAM_TOKEN/versions/latest"
})
票数 8
EN

Stack Overflow用户

发布于 2021-02-23 12:11:58

这些答案指引着我,但我花了很长时间才开始工作。您需要输入PROJECT_ID而不是Project-Name

找到您的项目ID:

这里的第二列显示了项目ID:

现在使用它并运行脚本

代码语言:javascript
复制
await secretClient.accessSecretVersion({
  name: "projects/PROJECT_ID/secrets/SECRET_NAME/versions/latest"
})
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61282732

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档