sev*_*hts 4 firebase google-cloud-platform google-cloud-functions google-secret-manager
我已经为这些函数的服务帐户授予了必要的权限(“Secret Manager Secret Accessor”),并且在部署后,Firebase 函数能够毫无问题地访问机密。
但是,在使用firebase serve或firebase 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。
另请注意,文件名以点开头。
我自己找到了答案:当函数在本地模拟时,它们不会默认运行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他们还获得了访问秘密管理器的权限。
因此,虽然我走在正确的轨道上,但我导出了错误的服务帐户密钥,而不是允许运行访问秘密管理器的密钥。
“[...]您可以通过设置.secret.local文件来覆盖机密值。这使您可以轻松地在本地测试您的函数,特别是当您无权访问机密值时。”
https://firebase.google.com/docs/functions/config-env#secrets_and_credentials_in_the_emulator
一步步:
firebase-tools安装了最新版本,因为此功能相对较新。.secret.local在 firebase 项目的根目录中创建一个名为的文件(.firebaserc以及firebase.json.env。例如MY_SECRET_1=foo
MY_SECRET_2=bar
Run Code Online (Sandbox Code Playgroud)
firebase emulators:startprocess.env.MY_SECRET_1请注意,据我所知,这些秘密仅在函数处理程序的块范围内可用。你无法在你的函数 JS 代码的根范围内访问它们(如果有人找到一种方法来做到这一点,请在这里评论,因为我也很想知道)
| 归档时间: |
|
| 查看次数: |
3533 次 |
| 最近记录: |