Vault:AppRole 身份验证如何工作?

信息安全 哈希公司保险库
2021-08-16 15:16:17

我有一个服务器应用程序(在动态基础架构上),它需要在启动期间从 Hashicorp Vault 检索一个秘密。

让我们假设我们需要让它尽可能安全。从有关 AppRole 身份验证的文档和示例中,我了解到,在 Vault 管理员创建了 approle 和机密之后,应用程序需要配置为

  • 应用角色名称
  • 允许检索应用角色 ID 并在该角色下创建新的秘密标识符的令牌
  • Vault 服务器的主机名/端口和 + SSL 证书

然后应用程序获取角色 id 并创建一个新的秘密 id(拉模式)。有了这两个 id,应用程序现在可以在 Vault 服务器上执行登录,以检索用于检索密钥的最终令牌。X-Vault-Wrap-TTL在这个流程中,我们还可以通过设置和使用 sys/wrapping/unwrap端点来包装和解包每个响应(cubbyhole 响应包装) 。

第一个问题:拉模式和/或响应包装在这里真的有意义吗?我看不到创建一个秘密 ID 只是为了稍后使用它进行登录的价值。我也看不出为什么我想包装我的回复只是为了打开它们。

如果以上是正确的,那么在我看来,每个知道角色名称并且确实有一个令牌来获取角色 ID 并创建一个秘密的人/机器都能够检索到这个秘密。

第二个问题:在我的配置文件中拥有应用程序角色名称和初始令牌并不能使它们真正更安全,因为有权访问 Vault 服务器的每个人都可以使用它来读取密钥。拆分配置似乎是有意义的:将应用程序角色名称放在配置文件中,将令牌放在其他地方(在环境变量等中)。

第三个问题:已弃用(基于推送)的 App ID 对我来说似乎更有意义(就我而言),因为我可以将应用 ID 放在配置文件中并使用特定于机器的用户 ID(如 mac 地址、IP 地址、主机名等)作为第二个秘密。那么为什么拉模式 AppRole 身份验证优先于推模式或 App ID 呢?

1个回答

如果您还没有运行其他经过身份验证的服务(例如调度程序),我认为推送和拉取模式之间的安全性没有太大区别。如果我正确理解工作流程,攻击者将需要配置文件中的令牌和 AppRole 名称,并满足针对角色设置的限制(IP 地址等)才能访问应用程序可以访问的所有机密(假设 SSL 证书只是为了验证保管库服务器而不是对其进行身份验证)。

  1. 响应包装可以很好地确保秘密 id 被正确的应用程序获取并且不会被攻击者获取。如果调度程序启动一个应用程序并且响应为它包装了秘密 id,那么应用程序可以在它无法读取它时发送某种警报,因为这意味着其他东西已经读取它(并且可能使用它来进行身份验证) . 如果应用程序本身直接提取秘密 id,我认为包装它没有意义。

  2. 拆分身份验证所需的组件所在的位置可能是一个好主意。

  3. 对于您所描述的身份验证工作流程,我认为推送或拉取模式从根本上来说并不比其他模式更安全。