如何在 Linux 上保护访问令牌到 Hashicorp Vault 等远程自动化机密存储?

Nat*_*ese 5 automation linux authentication password-management keystore

Hashicorp Vault for Linux 等密码管理器的密码似乎存在一些“鸡与蛋”问题。

在针对某些 Linux 服务器进行研究时,有人聪明地问道: “如果我们将所有机密存储在机密存储服务中,那么我们将对该机密存储服务的访问机密存储在哪里?在我们的机密存储服务中?”

我大吃一惊,因为如果我无论如何要存储机密的所有 Linux 服务器都有其访问令牌,那么使用单独的机密存储服务就没有意义了。

例如,如果我将我的机密移动到 Vault,我是否仍然需要将机密存储在 Linux 服务器上的某个位置以访问 Hashicorp Vault?

有人谈论以一些创造性的方式解决这个问题,至少让事情比现在更好。我们可以做一些聪明的事情,比如基于 CIDR 或密码混搭的身份验证。但是仍然存在安全性的权衡。例如,如果黑客获得了对我的机器的访问权限,如果访问是基于 CIDR 的,他们就可以进入保险库。

这个问题可能没有答案,在这种情况下,答案是“不,这没有普遍接受的灵丹妙药解决方案,发挥创意,找到你的权衡 bla bla bla”

我想回答以下具体问题:

是否有一种普遍接受的方式来保护现代 Linux 服务器上像 Hashicorp Vault 这样的远程自动化机密存储的密码?

显然,明文是不可能的。

对此有规范的答案吗?我什至在正确的地方问这个吗?我也考虑过 security.stackexchange.com,但这似乎特定于一种为 Linux 服务器存储机密的方式。我知道这可能看起来过于笼统或基于意见,因此我欢迎您提出任何可能必须避免这种情况的编辑建议。

我们笑了,但我在这里得到的答案很可能是“在保险库中”。:/ 例如,一个 Jenkins 服务器或其他东西有一个 6 个月的可撤销密码,它用来生成一次性使用的令牌,然后他们可以使用这些令牌来获取从 Vault 生成的自己的小临时(会话受限)密码,这为他们提供了一段信息

像这样的事情似乎是一样的,尽管它只是解决方案的一部分:使用 Puppet 管理服务密码

Nat*_*ese 0

// ,首先,这里讨论的问题不仅仅是传递秘密 0 或他们在操作术语中所说的“安全引入”。

相反,这是为了在收到秘密后确保其安全。

我对此没有灵丹妙药。但有一些深度防御选项:

  1. 使用响应包装来传递秘密。
  2. 将 CIDR 限制围绕到秘密存储的令牌,以便令牌只能从一组特定的 IP 地址使用,并使用可靠的协议(如 PROXY(非 X 转发))将 IP 地址传递到秘密存储(例如 set token_bound_cidrs以一种只有一个子网可以使用该令牌的方式。)
  3. 仅将秘密存储在内存中,并使用 mlock 锁定内存。
  4. 如果可能,对秘密本身设置时间限制,甚至允许秘密仅使用一次
  5. 监视秘密的异常使用,例如,如果一次性使用的秘密不起作用(因为它已经被使用过),常规客户端应该发出警报,如果有人试图从允许范围之外使用该秘密,服务器应该发出警报CIDR范围
  6. 在这里,这有点冒险,但您可能允许服务器上存在“蜜罐”秘密以及常规秘密,如果可能的话,这可以“访问”系统的一组凭据,该系统只需记录访问和警报。
  7. 需要对本地存储的机密的每次使用进行重新身份验证,这意味着每次使用时都需要应用除本地存储的机密之外的其他身份验证因素,例如计算实例或工作负载唯一的签名元数据,或者在 Vault 中,阿普罗
  8. 禁用任何类型的磁盘缓存,以防止秘密接触任何潜在的持久存储