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

Google Secret Manager Permissions For Local Emulating of Functions

我已经为功能的服务帐户提供了必要的权限 ('Secret Manager Secret Accessor'),并且在部署时,firebase 功能能够毫无问题地访问机密。

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

Unhandled error Error: 7 PERMISSION_DENIED: Permission 'secretmanager.versions.access' denied for resource

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

感谢所有指点。干杯。

我自己找到了答案: 当函数在本地模拟时,默认情况下它们不会通过 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"

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

所以当我在正确的轨道上时,我导出了错误的服务帐户密钥,而不是允许 运行 访问 Secret Manager 的密钥。

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

  • "Secret Manager Secret Accessor" 到 您的帐户 用于通过 Firebase
  • 进行身份验证

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

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

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

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