Google cloud platform 我如何处理谷歌云功能中的秘密?

Google cloud platform 我如何处理谷歌云功能中的秘密?,google-cloud-platform,google-cloud-functions,Google Cloud Platform,Google Cloud Functions,这里的惯例是什么?gcloud似乎没有提供任何工具。我现在正在从本地机器部署函数,所以我可以硬编码机密,但这似乎不合适。还有,CI/CD呢?在这种情况下,我需要将秘密作为环境变量传递。这甚至可能是atm吗?自从发表我的评论以来,我找到了一种相对简单的方法来实现这一点-提供一个config.json文件。下面是我根据其Slack函数示例拼凑的一个示例: config.json文件位于与index.js相同的目录中: { "foo": "bar" } index.js const config

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

自从发表我的评论以来,我找到了一种相对简单的方法来实现这一点-提供一个config
.json
文件。下面是我根据其Slack函数示例拼凑的一个示例:

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

{
  "foo": "bar"
}
index.js

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

exports.envTest = (req, res) => {
  res.status(200).send(config.foo);
};
当您部署该函数并转到URL时,应该会得到响应
bar

优点和缺点:

优点:

  • 易于在IDE中设置和配置
  • 配置文件可以放在
    .gitignore
    中,以确保您的机密不会以repo结束
  • 文件本身可以存储在安全的位置,并且只能提供给负责部署功能的个人
  • 缺点:

  • 与适当的秘密管理相比,笨重
  • 需要注意确保文件不会落入坏人手中
  • 通过查看函数源,可以在谷歌云控制台中以明文形式读取文件
  • 总的来说,它与真正的秘密管理系统相去甚远,但它的可用性足以让我坚持下去,直到这个功能最终进入云功能核心

    您应该使用。
    不要使用文件或环境变量将纯机密推送到云函数

    一种解决方案如下:

  • 在云KMS上创建密钥
  • 用那个密钥加密秘密文件
  • 将加密的秘密文件上载到谷歌云存储(GCS)(可由指定用户访问)
  • 在云函数执行中,从GCS获取上传的秘密文件,解密并使用它
  • [Ref]

    您可以使用。按照链接上的说明添加秘密

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


    不,很遗憾,这是不可能的。像谷歌这样的公司推出的产品不可能有这么简单的功能,这真是太疯狂了,但我们只能勉强凑合。希望在云功能推出测试版后,他们会添加此功能。如果这些机密可以在云控制台或存储代码的存储桶中以纯文本形式查看的话。我不知道这个解决方案是否真的提供了很多价值。我不同意,你可以严格控制谁有权访问云控制台。这是您的整个开发人员群都可以访问这些秘密,而一个人被指定运行GCP门户之间的区别。不,这并不理想,但任何东西都比硬编码好。是的,它比源代码控制中的硬编码更好。如果你的函数是供私人使用的,那么你可以加密文件,并将解密密钥作为头或帖子正文传递。这与某种类型的嵌入密钥可以结合起来解密文件并泄露秘密。但是,如果您的函数被其他人公开调用,那么使其工作起来就更加困难。这在一定程度上实现了静态加密和模糊安全。同样,这不是最优的,但比其他解决方案更好。p、 你也可以使用firebase函数:config:set-api\u-key=“whatever”,请看这里:信任你的开发者。如果黑客访问了你的GCP帐户,他们无论如何都可以窃取所有的秘密。你能详细说明一下上述答案吗?一篇简短的文章可能对每个人都有帮助。我建议使用这种方法,但使用环境变量,而不是GCS。这将使访问和更新机密变得更加容易,但同样安全,因为您仍然使用KMS进行加密/解密。