Skip to content

Шаблонизация policy

Управление доступом к секретам в HashiCorp Vault — это важная задача для обеспечения безопасности данных.

Один из способов управления доступом — это разрешить пользователю доступ только к секретам, находящимся в его «каталоге». В этом случае для идентификации пользователя можно использовать различные атрибуты entity.id например, который присваивается токену при его создании через AuthMethod.

Разрешить каждому пользователю доступ только к секретам в его «каталоге» (entity.id будет присвоено токену при создании его через AuthMethod) path "secret/data/{{indentity.entity.id}}/*" { capabilities = ["create", "update", "patch", "read", "delete"] } Однако использование entity.id не всегда удобно для управления доступом. Поэтому рассмотрим использование других атрибутов для упрощения работы. alt text

Когда токен выпускается с каким-то 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 согласно шаблону

vault kv put -mount secret dev.green/secret1 key=value
или через web ui alt text

References:

  • https://irezyigit.medium.com/vault-part8-vault-authorization-policy-path-templating-9974f4c73722