我有一个服务器应用程序(在动态基础架构上),它需要在启动期间从 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 呢?