我使用的是官方Docker(最新)映像中的Vault,并且使用KVv2作为秘密引擎。
我想防止令牌持有者读取自己不拥有的秘密。
首先,我创建了一个名为“ acl-caging-policy”的模板策略来控制/ secret / data / [username]]下的请求。 [有无尾随//都尝试过。
$ http http://127.0.0.1:8200/v1/sys/policy/acl-caging-policy policy:='"path \"secret/data/{{identity.entity.metadata.user}}\" {capabilities = [\"create\", \"read\", \"update\", \"delete\", \"list\"]}"' X-VAULT-TOKEN:"[ROOT_TOKEN]"
保险柜成功为我展示了它:
$ docker exec -it vault-app vault policy read acl-caging-policy path "secret/data/{{identity.entity.metadata.user}}" { capabilities = ["create", "read", "update", "delete", "list"]}
然后,我为用户创建了一个令牌:
$ http http://127.0.0.1:8200/v1/auth/token/create policies:='["acl-caging-policy"]' meta:='{"user": "oystr"}' ttl="999999h" renewable:=false X-VAULT-TOKEN:"[ROOT_TOKEN]"
哪个保险柜成功创建:
$ docker exec -it vault-app vault token lookup [USER_TOKEN] Key Value --- ----- accessor [USER_ACCESSOR] creation_time 1585935126 creation_ttl 999999h display_name token entity_id n/a expire_time 2134-05-03T08:32:06.496766579Z explicit_max_ttl 0s id [USER_TOKEN] issue_time 2020-04-03T17:32:06.496771065Z meta map[user:oystr] num_uses 0 orphan false path auth/token/create policies [acl-caging-policy default] renewable false ttl 999997h53m46s type service
但是每当我尝试存储任何信息时:
$ http http://127.0.0.1:8200/v1/secret/data/oystr data:='{"username": "oystr", "password": "[PASSWORD]"}' X-VAULT-TOKEN:"[USER_TOKEN]" HTTP/1.1 403 Forbidden Cache-Control: no-store Content-Length: 60 Content-Type: application/json Date: Fri, 03 Apr 2020 18:23:25 GMT { "errors": [ "1 error occurred:\n\t* permission denied\n\n" ] }
是否可能或我在这里缺少什么?
我正在使用来自官方Docker(最新)映像的Vault,并将KVv2作为秘密引擎。我想防止令牌持有者阅读自己不拥有的秘密。首先,我创建了...
问题是您需要一个实体来进行工作。当您仅创建令牌时,没有与之关联的实体。相反,为每个用户创建一个实体,可以为您使用(或将使用)的任何身份验证方法设置一个别名,然后在用户登录时,其令牌将与他们的实体相关联。此时,模板应该可以工作,尽管您可能想将其更改为使用{{identity.entity.name}}
而不是metadata
。如果要使用metadata
,则需要在您创建的实体上设置该元数据。