0

如何将非默认 Google 服务帐户凭据传递到Google Cloud Function 生产环境SecretManagerService或在其中传递?文档在这里SecretManagerServiceClient

在本地运行时,我可以使用from google.oauth2.service_account import Credentials然后credentials = Credentials.from_service_account_file("some-file.json")最后secret_client = SecretManagerServiceClient(credentials)但是在部署到 GCP 时,我不希望凭据文件存储为源代码旁边的 json/txt 文件。

如果我为 App Engine 默认服务帐户提供 Secret Accessor 角色并SecretManagerServiceClient()在不使用参数的情况下使用,则脚本可以访问部署中的机密,但它是通过默认服务帐户进行的。我想使用范围有限的非默认帐户 Secret Manager Secret Accessor 仅用于进一步的安全性。

我发现这是一个相关的答案,但对googleapis.dev的快速搜索却一无所获SecretManagerServiceClientBuilder

4

2 回答 2

0

我不知道您案件的所有细节,但我不确定是否要从代码内部完成。

如果您知道执行云功能的服务账户,您可能希望分配(至少)一个Secret Manager Secret Accessor IAM 角色,以便您的服务账户可以读取所需的密钥值。

如果您更喜欢使用控制台 - 可以从列出和编辑机密权限的页面完成。

理想情况下(从我的角度来看)它应该在 CICD 管道中完成,当您的云功能与所有其他相关资源一起部署时。

于 2022-02-21T09:34:44.563 回答
0

您必须在云功能中使用ADC(应用程序默认凭据)并且不提供服务帐户密钥文件。

实际上,Cloud Functions 的默认服务帐户是使用的 App Engine 默认服务帐户。要使用另一个服务帐户,您可以选择更改云功能身份并将秘密访问者权限仅授予该服务帐户

于 2022-02-21T10:25:47.647 回答