首页 > 解决方案 > Hashicorp 保险库 - “个人保险库”政策问题

问题描述

我正在尝试设置一个名为“个人”的 kv2 挂载,每个用户都将拥有自己的小房间……不会过期。假设公司有 100 名员工 - 他们在坐骑中拥有公司范围内的机密,例如 secrets/ 、 secrets/general、secrets/general/dept 等等,但我希望他们每个人都拥有对个人 / 的读/写访问权限用户,其他用户无法在那里阅读。我怎样才能得到这个?我认为这样的政策就足够了:

path "personal/data/user/*" {
  capabilities = ["create", "read", "delete", "update", "list", "sudo"]
}
path "personal/user/*" {
  capabilities = ["create", "read", "delete", "update", "list", "sudo"]
}
path "personal/+" {
  capabilities = ["list"]
}

然而,这并不像我想要的那样工作。我的意思是,我可以从 cli 那里得到秘密:

    master* ± vault kv get personal/user/ipam |head 
    ====== Metadata ======
    Key              Value
    ---              -----
    created_time     2019-08-27T14:01:10.156868866Z
    deletion_time    n/a
    destroyed        false
    version          3

    ====== Data ======
    Key         Value

但是 Vault-ui 不允许我访问“个人/”空间:

master* 2 ± vault kv list personal/
Error listing personal/metadata: Error making API request.

URL: GET https://...:8200/v1/personal/metadata?list=true
Code: 403. Errors:

* 1 error occurred:
    * permission denied

如果我将最后一条路径更新为“个人/*”,用户可以读取其他所有人的路径(不是秘密,而是路径),这是我想要避免的。

有人有什么想法吗?

谢谢你。

标签: hashicorp-vault

解决方案


您需要ACL 模板

该政策看起来像这样

path "personal/{{identity.entity.name}}/*" {
  capabilities = ["create", "read", "update", "delete", "list"]
}

根据您的身份验证方法(例如 LDAP),您可能需要将模板路径更改为类似identity.entity.aliases.<<mount accessor>>.name


推荐阅读