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,尽管这对我来说也不起作用。

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

我遇到了同样的问题,并尝试了从pureth的答案到添加本地重写的解决方案,但没有成功。对我来说有效的是在functions目录中创建.secret.local文件,而不是在项目根目录中。

我的项目结构如下:

/
|- .firebaserc
|- firebase.json
|- package.json
|- /* ... */
|- functions/
|- .secret.local
|- package.json
|- /* ... */

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

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

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

App Engine default service account需要一个密钥,该密钥可以在谷歌云的服务帐户设置中创建,然后我必须进入

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

在终端中。通过运行firebase emulators:start,他们还获得了访问Secret Manager的权限。

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

"[…]您可以通过设置.secret.local文件来覆盖机密值。这使您可以轻松地在本地测试您的函数,尤其是在您无法访问机密值的情况下">

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

循序渐进:

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

注意,据我所知,机密仅在函数处理程序的块范围内可用。你不能在你的函数JS代码的根范围内访问它们(如果有人找到了这样做的方法,请在这里评论,因为我也想知道(

为了从使用本地模拟器运行的Firebase应用程序访问Secret Manager,您需要添加以下角色:

  • ">密钥管理器密钥访问器";您的帐户用于通过Firebase进行身份验证

您可以通过在本地CLI中运行:firebase login来验证它。

如果您已经登录,它应该以Already logged in as [email address]进行响应。

此电子邮件地址是您需要将角色添加到的主体帐户。

正如你在问题中提到的;firebase adminsdk";服务帐户权限用于生产部署,但不用于本地部署,除非您使用export GOOGLE_APPLICATION_CREDENTIALS="path/to/key.json"指定它

相关内容

  • 没有找到相关文章

最新更新