1

我是 vault 的新手,并试图根据 pod 所在的 k8s 命名空间来保护数据。我已对身份验证部分进行了排序,但我无法创建一个 ACL 让客户端在不泄露所有机密的情况下读取机密

我使用的结构是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" ]}
4

1 回答 1

1

TL;博士:

这是因为当您授予对机密的访问权限时,您需要使用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"]
}

更多在官方文档中。

于 2020-11-16T11:47:21.440 回答