Syntax highlighting of devops/vault

= 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`