在 Hashicorp Vault 中仅允许列出特定挂载点的方法

84次阅读
没有评论

问题描述

在使用 Hashicorp Vault 时,创建了一些 MySQL 数据库引擎,并将其挂载在特定的路径下,如下所示:

mysql/dev/my-instance-1
mysql/staging/my-instance-2
mysql/prod/my-instance-3

目前,用户允许通过 vault secrets list 命令列出秘密路径,使用以下策略:

path "sys/mounts" {
  capabilities = ["read"]
}

然而,这个策略对于用户的需求来说有些过于宽松了。因为这样的话用户就能够列出所有 mysql/* 的秘密路径,但实际上用户只希望允许列出例如 mysql/dev/* 的路径。

用户已经尝试过一些策略,例如:

path "sys/mounts/dev/*" {
  capabilities = ["read", "list"]
}
path "mysql/dev/*" {
  capabilities = ["read", "list"]
}

但是这些尝试都没有成功。

解决方案

请注意以下操作可能涉及版本差异或风险,确保在执行之前进行适当的测试和备份。

使用 Policies 控制秘密路径的列出权限

Hashicorp Vault 提供了 Policies 来控制用户对秘密路径的访问权限。您可以通过在策略中使用通配符来实现对特定路径的精细控制。

步骤

  1. 首先,您需要创建一个新的 Policy,用于控制列出特定路径下秘密的权限。您可以在 Vault 的 Web UI 或者使用 Vault CLI 进行创建。
  2. 在 Policy 中,您可以使用通配符来匹配特定的秘密路径。例如,要允许用户仅列出 mysql/dev/* 路径下的秘密,可以按照以下方式定义 Policy:
path "mysql/dev/*" {
  capabilities = ["list"]
}
  1. 将这个新创建的 Policy 分配给相应的用户或用户组。

配置 MFA 增强安全性

除了使用 Policies 进行权限控制,您还可以考虑启用 Multi-Factor Authentication (MFA) 以增强 Vault 的安全性。MFA 要求用户在登录时提供多个验证因素,从而降低了未经授权访问的风险。

步骤

  1. 在 Vault 中启用 MFA 功能,并选择适合您组织的验证方法,如短信验证码、TOTP(时间同步一次性密码)等。
  2. 配置 MFA Policy,要求用户在访问某些敏感路径之前进行 MFA 验证。例如,您可以要求用户在列出 mysql/dev/* 路径下的秘密之前进行 MFA 验证。
  3. 分配 MFA Policy 给相应的用户或用户组。

请注意,上述步骤的具体实现可能因您使用的 Vault 版本和配置而有所不同。在执行更改之前,请确保详细阅读 Vault 的文档并进行适当的测试。

总结

通过使用 Vault 的 Policies 功能,您可以精细地控制用户对秘密路径的访问权限,从而实现您的需求。另外,启用 MFA 可以增强 Vault 的安全性,确保只有经过授权的用户能够访问敏感数据。在进行任何更改之前,请确保详细了解您的 Vault 配置,并在测试环境中进行验证。

正文完