GitOps 和基础设施即代码 - 秘密存储

时间:2021-03-31 09:33:09

标签: security google-cloud-platform gitlab terraform hashicorp-vault

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

故事:

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

问题:

我不想将此类帐户的密钥存储在 GitLab(gitlab 变量 - 我想将它们存储在 Hashicorp Vault - 目标是确保它只会被可用于 CICD。不应该允许任何人访问这些密钥。如何使其工作?对于存储在保险库中的 cloud access keys 我仍然需要vault key 存储在跑步机或 gitlab 变量中,这两者对我来说都不安全,如果有人可以访问 vault key,那么通过 {{1} 访问 service account keys 真的很容易}

1 个答案:

答案 0 :(得分:1)

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

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

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

完成此设置后,您就可以

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

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