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

时间:2017-12-06 05:31:02

标签: google-cloud-platform google-cloud-functions

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

3 个答案:

答案 0 :(得分:5)

自发表评论以来,我发现了一种相对简单的方法 - 提供一个config .json文件。这是我根据他们的Slack函数示例一起攻击的一个例子:

index.js 相同的目录中的

config.json 文件:

{
  "foo": "bar"
}

<强> index.js

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

exports.envTest = (req, res) => {
  res.status(200).send(config.foo);
};

部署该功能并转到该网址时,您应该收到回复bar

利弊:

优点:

  1. 易于在IDE中进行设置和配置
  2. 配置文件可以放入.gitignore以确保您的秘密不会结束回购
  3. 文件本身可以存储在安全的位置,仅供负责部署功能的个人使用
  4. 缺点:

    1. 与适当的秘密管理相比笨拙
    2. 需要注意确保档案不落入坏人之手
    3. 通过查看功能来源,可以在Google云端控制台中以纯文本阅读文件
    4. 总的来说,它与真正的机密管理系统相去甚远,但它足以阻止我,直到这个功能最终进入云功能核心。

答案 1 :(得分:5)

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

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

Add secret permissions

答案 2 :(得分:3)

您应该使用Cloud Key Management Service(KMS)
请勿通过文件或环境变量将纯粹的机密推送到Cloud Functions。

以下是一种解决方案:

  1. 在Cloud KMS上创建密钥
  2. 使用该密钥加密机密文件
  3. 将加密的机密文件上传到Google Cloud Storage(GCS)(可由指定用户访问)
  4. 在Cloud Function Execution中,从GCS获取上传的秘密文件,解密并使用

[Ref] Secret management using the Google Cloud Platform