I’m trying to use templated policies to substitute token metadata for policy paths. But I’m running into a strange error, hoping someone can point out what I’ve done wrong.
Start with a fresh 1.7.0 vault: vault server -dev
Using the root token, I did some initial setup:
$ vault policy read literal
path "secret/+/cicd/rvandegrift/*" {
capabilities = ["list", "read"]
}
$ vault policy read template
path "secret/+/cicd/{{identity.entity.metadata.namespace}}/*" {
capabilities = ["list", "read"]
}
$ vault kv list secret/cicd/rvandegrift
Keys
----
secret
$ vault kv get secret/cicd/rvandegrift/secret
====== Metadata ======
Key Value
--- -----
created_time 2021-04-13T23:10:35.265532714Z
deletion_time n/a
destroyed false
version 1
==== Data ====
Key Value
--- -----
wooo yeah
Now, issue two tokens to test the policies:
$ literal_token=$(vault token create \
-policy=default \
-policy=literal \
-metadata=namespace=rvandegrift \
-field=token)
$ template_token=$(vault token create \
-policy=default \
-policy=template \
-metadata=namespace=rvandegrift \
-field=token)
literal_token
works as expected:
$ VAULT_TOKEN=$literal_token vault kv list secret/cicd/rvandegrift
Keys
----
secret
$ VAULT_TOKEN=$literal_token vault kv get -field=wooo secret/cicd/rvandegrift/secret
yeah
But the template_token
does not:
$ VAULT_TOKEN=$template_token vault kv list secret/cicd/rvandegrift/secret
Error making API request.
URL: GET http://127.0.0.1:8200/v1/sys/internal/ui/mounts/secret/cicd/rvandegrift/secret
Code: 403. Errors:
* preflight capability check returned 403, please ensure client's policies grant access to path "secret/cicd/rvandegrift/secret/"
$ VAULT_TOKEN=$template_token vault kv get secret/cicd/rvandegrift/secret
Error making API request.
URL: GET http://127.0.0.1:8200/v1/sys/internal/ui/mounts/secret/cicd/rvandegrift/secret
Code: 403. Errors:
* preflight capability check returned 403, please ensure client's policies grant access to path "secret/cicd/rvandegrift/secret/"
I don’t understand the error message above - if I understood the templated policy correctly, it does permit access to those paths. But also, that’s not the usual 403 permission denied error. So what’s up with that?