我如何处理Google Cloud Functions中的秘密?

stk*_*flw 9 google-cloud-platform google-cloud-functions

这里的常见做法是什么?似乎没有提供任何工具gcloud.我现在正在从本地机器部署功能,所以我可以硬编码秘密,但这似乎不合适.那么,CI/CD怎么样?在这种情况下,我需要将秘密作为环境变量传递.这甚至可能是atm吗?

Mat*_*hew 11

您可以为此使用Secret Manager。按照链接上的说明添加密钥。

我发现的唯一 GOTCHA 是默认情况下服务帐户没有对机密的读取访问权限,您必须手动授予权限,如下所示:

添加秘密权限


Art*_*rov 5

自发表评论以来,我发现了一种相对简单的方法-提供配置.json文件。这是一个基于Slack函数示例的示例:

config.json文件位于与index.js相同的目录中:

{
  "foo": "bar"
}
Run Code Online (Sandbox Code Playgroud)

index.js

const config = require('./config.json');

exports.envTest = (req, res) => {
  res.status(200).send(config.foo);
};
Run Code Online (Sandbox Code Playgroud)

部署功能并转到URL时,您应该得到response bar

利弊:

优点:

  1. 易于在IDE中轻松设置和配置
  2. 可以放入配置文件.gitignore以确保您的机密不会成为存储库的一部分
  3. 文件本身可以存储在安全的位置,并且仅提供给负责部署功能的个人

缺点:

  1. 与适当的秘密管理相比笨拙
  2. 需要注意以确保文件不会落入错误的人手中
  3. 通过查看函数源,可以在Google Cloud控制台中以纯文本格式读取文件

总体而言,它与真实的机密管理系统相去甚远,但是它足以使我坚持下去,直到该功能最终使其成为Cloud Functions核心。

  • 我不同意,你可以严格控制谁可以访问云控制台。这是可以访问机密的整个开发人员群与被指定运行 GCP 门户的人员之间的区别。不,这并不理想,但任何东西都比硬编码秘密要好。 (3认同)
  • 如果秘密仅可以在云控制台或存储代码的存储桶中以纯文本格式查看。我不知道这种解决方案是否真的提供了很多价值。可能还对您的存储库中的秘密进行硬编码。 (2认同)