我是 Vault 新手,并尝试根据 pod 所在的 k8s 命名空间来保护数据。我已对身份验证部分进行了排序,但我无法创建一个 ACL 来让客户端在不泄露 all 秘密的情况下读取秘密
我使用的结构是
secret/k8s/<k8s-namespace>/<appname>
例如
secret/k8s/bex/app1
我已经尝试过这样的 ACL 策略,但如果没有
secret/*
,我会被拒绝访问,而有了 secret/*
,客户端可以看到所有内容,以及与 bex
相邻的事件路径。
我做错了什么?
# Without this, I cannot access anything
#path "secret/*" { capabilities = [ "read", "list" ]}
path "secret/k8s/bex*" { capabilities = [ "read", "list" ]}
path "secret/k8s/bex/*" { capabilities = [ "read", "list" ]}
path "secret/k8s/bex/app1" { capabilities = [ "read", "list" ]}
path "secret/k8s/bex/app1/*" { capabilities = [ "read", "list" ]}
path "secret/k8s/bex/app1*" { capabilities = [ "read", "list" ]}
TL;博士:
这是因为当您向秘密授予 access 时,您需要在秘密后端之后使用
data
路径。对于您的情况:secret/data/k8s/bex/app1
长版:
如果您使用旧的(已弃用的)KV1 版本,那么您的策略如下所示:
path "secret/dev/team-1/*" {
capabilities = ["create", "update", "read"]
}
如果(我假设)您使用的是新的 KV2 秘密引擎(默认),则读取版本的前缀为
data/
路径。
path "secret/data/dev/team-1/*" {
capabilities = ["create", "update", "read"]
}
更多内容请参见官方文档。