GitOps 与基础设施即代码——秘密存储

GitOps & Infrastrucute as a Code - secrets storing

只是概念性的问题,因为我显然不觉得这个主题中的文章已经可用@google。

故事:

我有 2 个 git 项目供 IaC 创建和配置网络以及创建和配置项目。这两个项目都使用不同的服务账户在云端执行操作(他们需要不同的权限,我不想拥有一个拥有所有权限的超级账户)。我想执行 CICD 管道,这将允许执行一般 teraform apply.

问题:

我不想将此类帐户的密钥存储在 GitLab(gitlab 变量 - 我想将它们存储在 Hashicorp Vault - 目标是确保它仅对 CICD 可用。不应允许任何人访问这些密钥。如何使其工作?cloud access keys 存储在保险库中,我仍然需要 vault key 存储在运行器机器上或 gitlab 变量中,这两个变量对我来说都不安全,如果有人可以访问的话vault key 通过 Vault Rest API

访问 service account keys 真的很容易

我们解决这个问题的一种方法是利用 Gitlab 的身份和 Vault 的 JWT 身份验证方法。

您可以在此处阅读更多相关信息:https://docs.gitlab.com/ee/ci/examples/authenticating-with-hashicorp-vault/ for Gitlab and https://www.vaultproject.io/docs/auth/jwt Vault 身份验证方法。

为什么这会解决问题(如果我理解正确的话)?

完成此设置后,您可以

  • 在 Vault 中创建一个身份实体来代表您的 CI 服务帐户
  • 创建一个别名以将此身份实体绑定到 Gitlab 将在 CI_JOB_JWT
  • 中提供的身份
  • 创建允许此身份实体(直接或通过组)读取机密的策略)

因此任何人 运行 来自另一个身份的管道将无法读取机密(因为它会映射到 Vault 中的另一个身份实体,所以他们不会获得该策略的令牌)