Шаблонизация policy¶
Управление доступом к секретам в HashiCorp Vault — это важная задача для обеспечения безопасности данных.
Один из способов управления доступом — это разрешить пользователю доступ только к секретам, находящимся в его «каталоге». В этом случае для идентификации пользователя можно использовать различные атрибуты entity.id например, который присваивается токену при его создании через AuthMethod.
Разрешить каждому пользователю доступ только к секретам в его «каталоге» (entity.id будет присвоено токену при создании его через AuthMethod)
path "secret/data/{{indentity.entity.id}}/*" {
capabilities = ["create", "update", "patch", "read", "delete"]
}
Однако использование entity.id не всегда удобно для управления доступом. Поэтому рассмотрим использование других атрибутов для упрощения работы.
Когда токен выпускается с каким-то AuthMethod, к нему добавляется имя пользователя, для которого токен выпущен.
Создадим секрет и посмотрим доступные методы аутентификации:
vault kv put -mount secret dev.green/secret1 key=value
vault auth list
Path Type Accessor Description Version
---- ---- -------- ----------- -------
ldap/ ldap auth_ldap_a0afca99 n/a n/a
token/ token auth_token_... token based credentials n/a
...
Залогинимся через LDAP и посмотрим информацию по токену
vault login -method=ldap username=dev.green
vault token lookup
Key Value
--- -----
accessor 4ArhX....vO1pwhs
creation_time 1719209160
creation_ttl 768h
display_name ldap-dev.green
entity_id 2e490e44-d2ed-299f-b962-087ccb2fe260
...
По entity_id можно посмотреть что пришло из LDAP в aliases или metadata
vault read identity/entity/id/2e490e44-d2ed-146f-b962-087ccb2fe260
Key Value
--- -----
aliases [map[canonical_id:2e490e44-d2ed-299f-b962-087ccb2fe260 creation_time:2024-06-22T18:55:41.667876654Z custom_metadata:<nil> id:50320102-897e-3f9c-7da3-7b71b6fcdd27 last_update_time:2024-06-22T18:55:41.667876654Z local:false merged_from_canonical_ids:<nil> metadata:map[name:dev.green] mount_accessor:auth_ldap_a0afca99 mount_path:auth/ldap/ mount_type:ldap name:dev.green]]
metadata <nil>
name entity_b2b2ecf1
policies []
...
Создаем политику на основе шаблонизации:
path "secret/data/{{ identity.entity.aliases.auth_ldap_a0afca27.metadata.name }}/*" { capabilities = ["create", "read", "update", "delete", "list"] }
Создаем секрет обязательно указав свое имя из LDAP согласно шаблону
или через web ui
References:¶
- https://irezyigit.medium.com/vault-part8-vault-authorization-policy-path-templating-9974f4c73722