RBAC позволяет администраторам задавать детальные политики доступа к базам данных, подключённым к Airlock.

Пример политики: администраторы БД имеют доступ ко всему, QA и инженеры — полный доступ к staging, инженеры могут получить временный доступ к production в экстренных случаях.

Конфигурация роли

Ресурс role предоставляет следующие средства ограничения доступа к базам данных:

kind: role
version: v5
metadata:
  name: developer
spec:
  allow:
    db_labels:
      environment: ["dev", "stage"]
    db_users: ["viewer", "editor"]
    db_names: ["main", "metrics", "postgres"]

Подстановочные знаки

Можно использовать * для любых имён пользователей и баз:

kind: role
version: v5
metadata:
  name: prod-reader
spec:
  allow:
    db_labels:
      environment: ["prod"]
    db_users: ["*"]
    db_names: ["*"]
  deny:
    db_users: ["postgres"]
    db_names: ["postgres"]

Правила deny имеют приоритет. Попытка подключения с учётной записью postgres или к базе postgres будет отклонена.

Имена баз данных

Поведение поля db_names зависит от СУБД.

PostgreSQL поддерживает несколько логических баз. При подключении db_names проверяется против имени целевой базы.

MySQL — термины «база» и «схема» синонимичны; права определяются grants на учётную запись. Поле db_names при подключении к MySQL не проверяется.

Шаблонные переменные

Поля db_* поддерживают шаблонные переменные.

{{external.xyz}} заменяется значениями от SSO: для OIDC — claim, для SAML — assertion.

Пример:

spec:
  allow:
    db_names: ["{{external.databases}}"]

Переменные {{internal.db_users}} и {{internal.db_names}} используются в trusted clusters для передачи разрешённых учётных записей и имён баз с root-кластера на leaf.

Root-кластер:

spec:
  allow:
    db_users: ["postgres"]
    db_names: ["postgres"]

Leaf-кластер:

spec:
  allow:
    db_users: ["{{internal.db_users}}"]
    db_names: ["{{internal.db_names}}"]

Опция create_db_user_mode

Автоматическое создание пользователя БД при сессии:

ЗначениеОписание
offАвтосоздание отключено
keepПользователь отключается в конце сессии
best_effort_dropПопытка удалить пользователя; при неудаче — отключение

При нескольких ролях применяется логическое «ИЛИ» — если хотя бы одна роль разрешает, автосоздание включено.

spec:
  options:
    create_db_user_mode: keep

Пример: разделение окружений

kind: role
version: v5
metadata:
  name: db-staging
spec:
  allow:
    db_labels:
      environment: ["staging"]
    db_users: ["app_user", "readonly"]
    db_names: ["app", "analytics"]
  deny:
    db_labels:
      environment: ["prod"]

Создание и назначение:

airctl create -f db-staging.yaml
airctl users update developer --set-roles=access,db-staging

Подключение к базе данных

Список доступных баз:

airsh db ls

Подключение:

airsh db connect --db-user=readonly --db-name=app postgres-instance