Аутентификация и политики
По умолчанию Vault использует аутентификацию по токену.
Можно использовать : vault token create
для создания нового токена, который наследует привилегии создавшего пользователя.
Токен может быть отозван администратором.
Оператор, пытающийся отозвать его, получит ошибку.
$ vault token create
Key Value
--- -----
token 3WZeul5S8KgctuWgSsgB8mHQ
token_accessor 6Up6TqBg5g2oyVvZAoC9GN8j
# попытка ототзвать от другого пользователя
$ vault token revoke 3WZeul5S8KgctuWgSsgB8mHQ
Error revoking token: Error making API request.
URL: PUT http://vault.local:8200/v1/auth/token/revoke
Code: 403. Errors:
* 1 error occurred:
* permission denied
# от администратора, который его создал
$ vault token revoke 3WZeul5S8KgctuWgSsgB8mHQ
Success! Revoked token (if it existed)
UserPass аутентификация
Vault поддерживает множество разных механизмов аутентификации.
Методы аутентификации – это механизм, используемый Vault для аутентификации; присвоение идентификатора и применение набора политик доступа для пользователя или процесса.
Простым в реализации является метод userpass.
Входящий в систему пользователь по-прежнему получает токен, который затем может использовать.
$ vault auth enable userpass
Success! Enabled userpass auth method at: userpass/
$ vault write auth/userpass/users/lord.nikon \
> password=R4zor-n-Bl4d3 \
> policies=admins
Success! Data written to: auth/userpass/users/lord.nikon
$ vault login -method=userpass \
> username=lord.nikon \
> password=R4zor-n-Bl4d3
Success! You are now authenticated. The token information displayed below
is already stored in the token helper. You do NOT need to run "vault login"
again. Future Vault requests will automatically use this token.
Key Value
--- -----
token 3vk72Ueofq9f6FBJMJtgliXH
token_accessor 2WAPnzZFl1MXWDwz97lwBtTE
token_duration 768h
token_renewable true
token_policies ["admins" "default"]
identity_policies []
policies ["admins" "default"]
token_meta_username lord.nikon
Авторизация: Политики
Vault использует HCL для определения политик, которые можно прикрепить к ролям.
Можно создать политику, которая разрешает читать всем, но разрешает создавать только в пространстве имен foo
$ vault policy write my-readonly-policy -<<EOF
> path "secret/*" {
>
> capabilities = ["read"]
>
> }
>
>
>
> path "secret/data/*" {
>
> capabilities = ["read"]
>
> }
>
>
>
> path "secret/data/foo" {
>
> capabilities = ["read","create"]
>
> }
> EOF
Success! Uploaded policy: my-readonly-policy
$ vault token create -policy=my-readonly-policy
Key Value
--- -----
token 1eluleJQ0qw8HXWpixyNQP8Q
token_accessor 1cCui3p8Z0FIuFglOs8ELoPd
token_duration 768h
token_renewable true
token_policies ["default" "my-readonly-policy"]
identity_policies []
policies ["default" "my-readonly-policy"]
#create/update a kv first
$ vault kv put secret/build-secret "u=h4ck-the-pl4n3t"
Key Value
--- -----
created_time 2019-01-01T18:32:11.0358738Z
deletion_time n/a
destroyed false
version 2
$ vault login 1eluleJQ0qw8HXWpixyNQP8Q
Success! You are now authenticated. The token information displayed below …snip…
$ vault kv put secret/build-secret "u=tr4shing-our-r1ght5\!"
Error writing data to secret/data/build-secret: Error making API request.
URL: PUT http://vault.local:8200/v1/secret/data/build-secret
Code: 403. Errors:
* 1 error occurred:
* permission denied
$ vault write auth/github/map/teams/default value=my-readonly-policy