允许用户查看 1 个子树的秘密,但不能查看 hashicorp 金库中的其他子树的策略

问题描述 投票:0回答:1

我在保险库中有一个名为“root”的秘密引擎,有 3 个子树:“apps”、“ops”和“test”。我正在尝试创建一个 ACL 策略,该策略将允许特定用户仅查看某个子树。我为“应用程序”用户设置了一个示例策略,使其只能看到他们的子树:

path = "root/*" {
  capabilities = ["list"]
}
path = "root/data/apps*" {
  capabilities = ["list", "read"]
}
path = "root/metadata/apps*" {
  capabilities = ["list", "read"]
}
path = "root/data/ops*" {
  capabilities = []
}
path = "root/metadata/ops*" {
  capabilities = []
}
path = "root/data/test*" {
  capabilities = []
}
path = "root/metadata/test*" {
  capabilities = []
}

请注意,root 是 KV2 引擎,我们当前运行的是 Vault 版本 1.12.2

上述内容按预期工作,因为我可以查看/读取“apps”子树中的所有秘密 - 我唯一关心的是我仍然可以查看“ops”和“test”子树中的秘密。根据上述策略,我得到以下其他 2 个子树的窗口:

我知道这是策略中第一项的结果,该策略允许查看根下所有内容的所有内容,但是此窗口仍然以能够查看其他子树中的秘密(如果您知道路径)为借口,尽管您仍然即使提交的路径正确,访问也会被拒绝。我不记得在旧版本的 Vault 中看到过这个窗口(我想我在 1.8.3 中做了同样的测试),我想知道这是否是我们必须处理的新问题,或者是否有适当的策略设置将无法访问其他子树。

仅供参考 - 如果我删除根目录下的“列表”设置,那么即使导航到“应用程序”子树,它也会给我相同的窗口。如果删除其他子树的显式条目,那么我可以导航这些树,但读取它们的访问被拒绝(仍然不需要)...

长话短说,只是想知道我是否可以授予对“应用程序”子树的访问权限并基本上隐藏其他两个子树。预先感谢您的帮助。

hashicorp-vault
1个回答
0
投票

是的,你可以通过明确否认来实现这一点:

path = "root/*" {
  capabilities = ["list"]
}
path = "root/data/apps*" {
  capabilities = ["list", "read"]
}
path = "root/metadata/apps*" {
  capabilities = ["list", "read"]
}
path = "root/data/ops*" {
  capabilities = ["deny"]
}
path = "root/metadata/ops*" {
  capabilities = ["deny"]
}
path = "root/data/test*" {
  capabilities = ["deny"]
}
path = "root/metadata/test*" {
  capabilities = ["deny"]
}

您还可以使用通配符作为策略中的列表元素:

path = "root/*" {
  capabilities = ["list"]
}
path = "root/data/apps*" {
  capabilities = ["list", "read"]
}
path = "root/metadata/apps*" {
  capabilities = ["list", "read"]
}
path = "root/*/ops*" {
  capabilities = ["deny"]
}
path = "root/*/test*" {
  capabilities = ["deny"]
}

默认权限也是

deny
,因此可以完全省略它们以达到相同的效果:

path = "root/*" {
  capabilities = ["list"]
}
path = "root/data/apps*" {
  capabilities = ["list", "read"]
}
path = "root/metadata/apps*" {
  capabilities = ["list", "read"]
}
© www.soinside.com 2019 - 2024. All rights reserved.