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