= Hashicorp Vault =
== OIDC аутентификация ==
В качестве OIDC провайдера можно использовать Keycloak. Там создаем Realm роли и назначаем из пользователю. Также необходимо сделать так, чтобы назначенные роли попали в id_token, который выдается со стороны Keycloak после аутентификации (информация есть здесь [[ https://stackoverflow.com/questions/68741412/grafana-generic-oauth-role-assignment ]]).
Создаем oidc метод доступа (обязательно указываем роль по умолчанию)
{{{#!highlight bash
# to do
}}}
Создаем роль для oidc
{{{#!highlight bash
vault write auth/oidc/role/default -<<EOF
{
"allowed_redirect_uris": ["https://vault.example.com/ui/vault/auth/oidc/oidc/callback"],
"user_claim":"email",
"groups_claim":"roles",
"bound_audiences": "vault",
"oidc_scopes": "openid roles",
"ttl": "8h"
}
EOF
}}}
Команда выше подразумевает, что ''id_token'' из Keycloak содержит поле ''roles'' с массивом Realm ролей.
Уже можно пробовать зайти через OIDC и получить доступ в объеме ''default'' политики.
Допустим уже существует политика ''admin'', которая предоставляет административный доступ к Vault. Чтобы к ней ''привязаться'' ролью ''vault-admin'' из Keycloak нам потребуется создать т.н. `identity/group` и `identity/group-alias`.
Кроме того, нам потребуется получить т.н. `mount_accessor` для oidc
{{{#!highlight bash
vault auth list -detailed
Path Plugin Accessor
------- ------ --------
oidc/ oidc auth_oidc_123 <------------ mount_accessor
...
}}}
Создаем `identity/group` (идентификатор группы пригодится в следующей команде)
{{{#!highlight bash
vault write identity/group \
name="vault-admin-group" \
type="external" \
policies="admin"
Key Value
--- -----
id 123123
name vault-admin-group
}}}
Создаем `identity/group-alias`
{{{#!highlight bash
vault write identity/group-alias \
name="vault-admin" \
mount_accessor="auth_oidc_123" \
canonical_id="123123"
}}}
Здесь значения для `mount_accessor` и `cacnonical_id` определяются в командах выше.
В данной конфигурации, пользователю с Realm ролью ''vault-admin'' будет назначена политика ''admin'' в Vault.
Для добавления новых ролей необходимо выполнить:
. на стороне Keycloak создаем роль и назначаем ее пользователю
. на стороне Vault создаем политику для этой роли, а также соответствующие `identity/group` и `identity/group-alias`
== AppRole ==
Для интеграции сервисов и инструментов (напр. Ansible) с Vault можно использовать метод доступа AppRole. Суть сводится к созданию политики, роли и секрета на стороне Vault, а на сторону сервиса передается идентификаторы роли и секрета.
Шаг 1 - создаем политику, напр. ''ansible-policy''
{{{#!highlight hcl
path "kv/*" {
capabilities = ["read"]
}
}}}
Шаг 2 - активируем метод доступа и создаем роль (нам потребуется ид-р роли)
{{{#!highlight bash
vault auth enable approle
vault write auth/approle/role/ansible token_policies="ansible-policy"
vault read auth/approle/role/ansible/role-id
# Key Value
# --- -----
# role_id 39aef9d2-...
}}}
Шаг 3 - создаем секрет
{{{#!highlight bash
vault write -f auth/approle/role/ansible/secret-id
# Key Value
# --- -----
# secret_id 469f6928-...
}}}
Шаг 4 - авторизуемся на клиенте с использованием `role_id` и `secret_id`
{{{#!highlight bash
# --- получаем токен
vault write auth/approle/login \
role_id="39aef9d2-..." \
secret_id="469f6928-..."
# Key Value
# --- -----
# token hvs.CAESIO...
}}}
Используем токен для работы