我在保险库中有一个名为“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 中做了同样的测试),我想知道这是否是我们必须处理的新问题,或者是否有适当的策略设置将无法访问其他子树。
仅供参考 - 如果我删除根目录下的“列表”设置,那么即使导航到“应用程序”子树,它也会给我相同的窗口。如果删除其他子树的显式条目,那么我可以导航这些树,但读取它们的访问被拒绝(仍然不需要)...
长话短说,只是想知道我是否可以授予对“应用程序”子树的访问权限并基本上隐藏其他两个子树。预先感谢您的帮助。
是的,你可以通过明确否认来实现这一点:
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"]
}