Linux 我是否可以在Hashicorp Vault上创建一个策略,以允许令牌所有者仅读取他们自己的机密?

Linux 我是否可以在Hashicorp Vault上创建一个策略,以允许令牌所有者仅读取他们自己的机密?,linux,hashicorp-vault,Linux,Hashicorp Vault,我正在使用Vault的官方Docker(最新)图像和KVv2作为机密引擎 我想阻止令牌持有者阅读不属于他们自己的秘密 首先,我创建了一个名为“acl caging policy”的模板策略来控制/secret/data/[username]下的请求在有尾随符和无尾随符的情况下都进行了尝试/*。 $httphttp://127.0.0.1:8200/v1/sys/policy/acl-caging策略:=''path\'secret/data/{{identity.entity.metadata.

我正在使用Vault的官方Docker(最新)图像和KVv2作为机密引擎

我想阻止令牌持有者阅读不属于他们自己的秘密

首先,我创建了一个名为“acl caging policy”的模板策略来控制/secret/data/[username]下的请求在有尾随符和无尾随符的情况下都进行了尝试/*。

$httphttp://127.0.0.1:8200/v1/sys/policy/acl-caging策略:=''path\'secret/data/{{identity.entity.metadata.user}}}\'{capabilities=[\'create\',\'read\',\'update\',\'delete\',\'list\']}''X-VAULT-TOKEN:[ROOT\'U TOKEN]'
Vault正在成功地为我显示它:

$docker exec-it vault应用程序vault策略读取acl锁定策略
路径“secret/data/{{identity.entity.metadata.user}}{capabilities=[“创建”、“读取”、“更新”、“删除”、“列表”]}
然后,我为一个用户创建了一个令牌:

$httphttp://127.0.0.1:8200/v1/auth/token/create 策略:='[“acl限制策略”]'元:='{“用户”:“oystr”}'ttl=“99999H”可更新:=假X-VAULT-TOKEN:“[ROOT\u TOKEN]”
成功创建的Vault:

$docker exec-it保险库应用程序保险库令牌查找[用户令牌]
关键值
---                 -----
访问器[用户\访问器]
创建时间1585935126
创建\u ttl 9999 h
显示名称令牌
实体识别号不适用
过期时间2134-05-03T08:32:06.496766579Z
显式\u最大\u ttl 0s
id[用户令牌]
发布时间2020-04-03T17:32:06.496771065Z
元映射[用户:oystr]
num_使用0
孤儿假
路径auth/token/create
策略[acl锁定策略默认值]
可更新的错误
ttl 99997H53M46S
类型服务
但每当我尝试存储任何信息时:

$httphttp://127.0.0.1:8200/v1/secret/data/oystr 数据:='{“用户名”:“oystr”,“密码”:“[密码]”}'X-VAULT-TOKEN:“[用户令牌]”
HTTP/1.1 403禁止
缓存控制:没有存储
内容长度:60
内容类型:application/json
日期:2020年4月3日星期五18:23:25 GMT
{
“错误”:[
“出现1个错误:\n\t*权限被拒绝\n\n”
]
}

是否可能,或者我在这里遗漏了什么?

问题是您需要一个实体来进行模板制作。当您刚刚创建一个令牌时,没有与之关联的实体。相反,为每个用户创建一个实体,可以为您使用(或将使用)的任何身份验证方法设置别名,然后当用户登录时,他们的令牌将与其实体相关联。此时,模板应该可以工作,尽管您可能希望将其更改为使用类似
{{identity.entity.name}
的内容,而不是
元数据
。如果要使用
元数据
,则需要在创建的实体上设置该元数据。

我还尝试将identity.entity.metadata.user更改为identity.entity.meta.name和meta.name,但都不起作用。明白了!非常感谢。