Это руководство описывает настройку SSO-провайдера на базе OpenID Connect (OIDC) для выдачи учётных данных Airlock группам пользователей. В сочетании с RBAC администраторы могут задавать политики:
- Только члены группы «DBA» могут подключаться к PostgreSQL.
- Разработчикам запрещён SSH-доступ к production-серверам.
Предварительные требования
- Административный доступ к SSO/IdP с пользователями, распределёнными по группам.
- Роль Airlock с правом управления ресурсами
oidc(доступна в ролиeditorпо умолчанию). - Установленная утилита
airctlи доступ к кластеру.
Регистрация приложения в IdP
Зарегистрируйте Airlock во внешнем провайдере идентификации и получите client_id и client_secret.
URL перенаправления OIDC
OIDC использует HTTP-редиректы для возврата управления в Airlock после аутентификации. URL перенаправления должен быть заранее согласован с IdP.
Формат URL:
https://<адрес-proxy>:443/v1/webapi/oidc/callbackЗамените <адрес-proxy> на публичный адрес Proxy Service Airlock (например, airlock.example.com).
Настройка OIDC-коннектора
Коннекторы создаются, тестируются и удаляются через airctl или веб-интерфейс Airlock.
Создайте файл client-secret.txt, содержащий только client secret. Сгенерируйте YAML-конфигурацию коннектора:
airctl sso configure oidc --name keycloak \
--issuer-url https://keycloak.example.com/realms/master \
--id airlock \
--secret $(cat client-secret.txt) \
--claims-to-roles groups,/users,access \
--claims-to-roles groups,/admins,editor > oidc-connector.yaml| Параметр | Описание |
|---|---|
--name | Имя коннектора в Airlock (обычно имя IdP) |
--issuer-url | Базовый URL OIDC-провайдера без .well-known/openid-configuration |
--id | Client ID, заданный в IdP |
--secret | Client secret от IdP |
--claims-to-roles | Сопоставление claim/значения с ролями Airlock |
Пример готового коннектора:
kind: oidc
metadata:
name: keycloak
spec:
claims_to_roles:
- claim: groups
roles:
- access
value: /users
- claim: groups
roles:
- editor
value: /admins
client_id: airlock
client_secret: abc123...
issuer_url: https://keycloak.example.com/realms/master
redirect_url: https://airlock.example.com:443/v1/webapi/oidc/callback
version: v3Пример: Keycloak
В Keycloak на keycloak.example.com создайте клиент airlock. В client scope airlock-dedicated добавьте mapper «Group Membership», чтобы claim groups передавался в токен.
Тестирование и применение
Перед применением проверьте коннектор:
cat oidc-connector.yaml | airctl sso testКоманда откроет браузер и попытается выполнить вход через IdP. При ошибке изучите вывод — раздел «[OIDC] Claims» показывает все claims пользователя от IdP.
После успешного теста создайте коннектор:
airctl create -f oidc-connector.yamlВход через OIDC:
airsh --proxy=airlock.example.com login --auth=keycloakДополнительные параметры
ACR Values
Airlock может отправлять Authentication Context Class Reference (ACR) при получении authorization code. Если поле acr_values задано, Airlock ожидает то же значение в claim acr.
kind: oidc
version: v2
metadata:
name: oidc-connector
spec:
issuer_url: "https://oidc.example.com"
client_id: "xxxxxxxxxxxxxxxxxxxxxxx.example.com"
client_secret: "zzzzzzzzzzzzzzzzzzzzzzzz"
redirect_url: "https://airlock.example.com/v1/webapi/oidc/callback"
display: "Login with Example"
acr_values: "foo/bar"
scope: [ "group" ]
claims_to_roles:
- claim: "group"
value: "editor"
roles: [ "editor" ]
- claim: "group"
value: "user"
roles: [ "access" ]Max age
Поле max_age задаёт максимальный возраст сессии OIDC до принудительной повторной аутентификации. По умолчанию не задано. Значение 0s принуждает к повторной аутентификации при каждом входе.
spec:
max_age: 24hPrompt
Управляет поведением Authorization Server при повторной аутентификации и согласии. По умолчанию Airlock использует select_account.
spec:
# Допустимые значения: none, select_account, login, consent
prompt: 'login'Отключение проверки email
По умолчанию Airlock проверяет claim email_verified. Для тестирования можно включить allow_unverified_email (снижает безопасность):
kind: oidc
version: v2
metadata:
name: connector
spec:
allow_unverified_email: trueUsername claim
По умолчанию в качестве имени пользователя Airlock использует email. Альтернативный claim:
spec:
username_claim: preferred_usernameАутентификация по умолчанию
Чтобы OIDC стал методом входа по умолчанию, обновите cluster_auth_preference:
airctl get cap > cap.yamlkind: cluster_auth_preference
metadata:
name: cluster-auth-preference
spec:
type: oidc
version: v2airctl create -f cap.yamlУстранение неполадок
При ошибке Failed to calculate user attributes проверьте сопоставление claims_to_roles — значения claim должны точно совпадать с тем, что возвращает IdP. Используйте airctl sso test для просмотра всех claims.