Google Secret Manager 本地模拟功能的权限

sev*_*hts 4 firebase google-cloud-platform google-cloud-functions google-secret-manager

我已经为这些函数的服务帐户授予了必要的权限(“Secret Manager Secret Accessor”),并且在部署后,Firebase 函数能够毫无问题地访问机密。

但是,在使用firebase servefirebase emulators:start --only functions本地开发时,出现以下错误

未处理的错误错误:7 PERMISSION_DENIED:资源的权限“secretmanager.versions.access”被拒绝

我在文档中发现export GOOGLE_APPLICATION_CREDENTIALS=pathtoserviceaccount.json需要在终端中输入设置,尽管这对我来说也不起作用。

我将感谢所有的指点。干杯。

小智 7

我遇到了同样的问题,并尝试了从 pureth 的答案中添加本地覆盖的解决方案,但它不起作用。对我有用的是.secret.local在函数目录中创建文件,而不是在项目根目录中。

我的项目结构如下:

/
|- .firebaserc
|- firebase.json
|- package.json
|- /* ... */
|- functions/
   |- .secret.local
   |- package.json
   |- /* ... */
Run Code Online (Sandbox Code Playgroud)

因此,该.secret.local文件需要放置在函数所在的目录中,而不是文件所在的目录中.firebaserc

另请注意,文件名以点开头。


sev*_*hts 5

我自己找到了答案:当函数在本地模拟时,它们不会默认运行App Engine default service account,这也需要启用。所以我必须遵循本教程https://firebase.google.com/docs/functions/local-shell

需要App Engine default service account一个可以在 Google Cloud 的服务帐户设置中创建的密钥,然后我必须输入

export GOOGLE_APPLICATION_CREDENTIALS="path/to/key.json"

在终端中。通过运行,firebase emulators:start他们还获得了访问秘密管理器的权限。

因此,虽然我走在正确的轨道上,但我导出了错误的服务帐户密钥,而不是允许运行访问秘密管理器的密钥。


pur*_*eth 5

“[...]您可以通过设置.secret.local文件来覆盖机密值。这使您可以轻松地在本地测试您的函数,特别是当您无权访问机密值时。”

https://firebase.google.com/docs/functions/config-env#secrets_and_credentials_in_the_emulator

一步步:

  1. 确保您firebase-tools安装了最新版本,因为此功能相对较新。
  2. .secret.local在 firebase 项目的根目录中创建一个名为的文件(.firebaserc以及firebase.json
  3. 将您的机密添加到文件中,其格式与常规文件相同.env。例如
MY_SECRET_1=foo
MY_SECRET_2=bar
Run Code Online (Sandbox Code Playgroud)
  1. 运行模拟器firebase emulators:start
  2. 在您的 firebase 函数中,访问进程对象上的秘密。例如process.env.MY_SECRET_1

请注意,据我所知,这些秘密仅在函数处理程序的块范围内可用。你无法在你的函数 JS 代码的根范围内访问它们(如果有人找到一种方法来做到这一点,请在这里评论,因为我也很想知道)