如何在 CI 管道中存储多个客户端的机密文件?

Posted

技术标签:

【中文标题】如何在 CI 管道中存储多个客户端的机密文件?【英文标题】:How to store secrets files for multiple clients in a CI pipeline? 【发布时间】:2021-12-28 15:55:57 【问题描述】:

我正在开发的产品需要为不同的客户部署单独的应用实例。 我必须处理一些包含秘密令牌的 YAML 配置文件,每个客户端都有一个单独的 YAML 文件,其中包含自己的秘密。目前这些文件只存在于我的计算机上,当我手动部署时,我可以访问这些文件。

我们想为我们的部署引入 CI 管道。问题是我检查的所有提供程序都只支持键值对作为机密,因此将整个文件内容复制为像CLIENT_NAME_SECRET=<yaml file contents> 这样的机密是不方便的。像这样,我总是必须在我的编辑器中复制秘密编辑并重新上传到 CI。我的另一个想法是我将它们存储在一个私有 git 存储库中,并且只有 SSH 访问是可能的,所以只有 CI 和开发人员可以访问这些文件。这样存放安全吗?

为 CI 管道存储多个客户端机密的最佳做法是什么,您有什么建议?

【问题讨论】:

您还可以签入加密文件并将用于解密的密钥保存为 CI 变量。这样,您只需在管道运行期间解密它们。只是要小心使用良好的加密。 【参考方案1】:

您为什么不在 GitLab 中提供带有文件类型的秘密?

在您产品的存储库中,在 Settings > CI/CD 下,您可以将变量添加到您的 CI/CD 管道。

您可以选择包含文件类型。

然后您可以通过输入的键名直接访问该文件(例如使用cat $MY_VARIABLE_KEY

您可以为每个客户创建一个变量和作业,因此每个客户都将使用显式 YML 文件进行具体配置。

【讨论】:

好的,但是当我想编辑 YAML 时,我总是必须在那个小值输入上进行,不是吗?我可以有多个具有不同环境变量的管道吗? 当你想修改 YAML 时,你可以在那里进行(它会增加大小,顺便说一句),你可以定义不同的变量,例如 MY_CUSTOMER_ONEMY_CUSTOMER_TWO 并为每一位顾客。如果需要,您甚至可以根据环境进行区分。

以上是关于如何在 CI 管道中存储多个客户端的机密文件?的主要内容,如果未能解决你的问题,请参考以下文章

c - 具有多个客户端的 UDP 客户端-服务器

安全地存储客户端机密

在哪里/如何存储或生成客户端机密?

谷歌云存储 - 客户端机密

如何自动创建客户端机密 json 文件

如何在 Azure DevOps 上为发布服务器项目而不是客户端的 Blazor WebAssembly 托管应用程序创建构建管道?