繁体   English   中英

firebase function 部署上的谷歌云秘密权限被拒绝

[英]Permission denied to google cloud secret on firebase function deploy

我有一个 firebase 项目,谷歌云 function 是这样的:

export const myFun = functions.region("europe-west1")
    .runWith({ timeoutSeconds: 10, secrets: ['MY_SECRET'] })
    .https.onCall((data, context) => {/*doStuff()*/});

function 使用 MY_SECRET 访问数据库。 当我从我的本地机器构建和部署这个 function 到谷歌云时,一切都工作得很好。 我可以访问它并从数据库中获得结果,一切都很好。

但是,我设置了一个 github 操作来为我将这个 function 部署到云中。 为此,我将服务帐户设置为 github 秘密,这样我就可以在 github 操作中运行 npx firebase npx firebase-tools deploy 这一直有效,直到我将secrets: ['MY_SECRET']添加到云 function。

在本地我仍然可以成功部署,但 github 操作失败:

Error: Failed to validate secret versions:
- FirebaseError HTTP Error: 403, Permission 'secretmanager.versions.get' denied for resource 'projects/my-project/secrets/MY_SECRET/versions/latest' (or it may not exist).

我确保秘密确实存在于正确的谷歌云项目中,并且我在 github 中使用的服务帐户确实具有Secret Manager Secret Accessor角色,但我仍然收到错误消息。

不过我注意到的一件事是,当我在浏览器中将 go 转到秘密管理器并单击我的秘密时,我看到:

Resource ID projects/123456789/secrets/MY_SECRET

并且错误显示projects/my-project/secrets/MY_SECRET/versions/latest

所以在构建步骤中,使用了项目名称,在秘密管理器中我看到了项目 ID。 不确定这是否相关,只是我注意到的事情......

为什么这不起作用? 我试了几个小时,越来越绝望,请帮忙

...好的,在浪费了很多时间之后找到了解决方案...

原来Secret Manager Secret Accessor角色还不够,还需要Secret Manager Viewer角色! ♂️♂️♂️

Secret Accessor 是正确的角色,需要将其赋予函数 Runtime Service Account。 查看此答案: 无法从 Google Cloud 访问存储在 Secrets Manager 中的机密 Function

运行时服务帐户: https://cloud.google.com/functions/docs/concepts/iam#runtime_service_accounts

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM