Это руководство описывает настройку SAML для единого входа (SSO) в Airlock. В сочетании с RBAC администраторы могут задавать политики:
- Только члены группы «DBA» могут подключаться к PostgreSQL.
- Разработчикам запрещён SSH-доступ к production-серверам.
Airlock выступает в роли SAML Service Provider (SP) и принимает аутентификацию от внешнего Identity Provider (IdP).
Предварительные требования
- Развёрнутый SAML IdP (например, Active Directory Federation Services) с пользователями в группах.
- Роль Airlock с правом управления ресурсами
saml(доступна в ролиeditor). - Установленная утилита
airctl.
Общие принципы SAML
SAML-аутентификация включает:
- IdP (Identity Provider) — провайдер, который аутентифицирует пользователя и выпускает SAML assertion.
- SP (Service Provider) — Airlock, который принимает assertion и создаёт сессию.
- ACS URL — endpoint Airlock, куда IdP отправляет SAML-ответ:
https://<proxy>/v1/webapi/saml/acs. - Entity Descriptor — XML-метаданные IdP с сертификатами и endpoints.
- Атрибуты (claims) — группы, email, имя пользователя — сопоставляются с ролями Airlock через
attributes_to_roles.
Шаг 1. Настройка IdP (пример ADFS)
В Active Directory Federation Services настройте:
Claims Provider Trust — входящие claims от Active Directory:
Name ID: LDAP-атрибутE-Mail-Addresses→Name IDGroup: claim членства в группах для сопоставления с ролями- При необходимости:
SAM-Account-Name→Windows account name,E-Mail-Addresses→UPN
Relying Party Trust — доверие к Airlock:
- Display name:
Airlock - SAML 2.0 Web SSO URL:
https://airlock.example.com/v1/webapi/saml/acs - Relying party trust identifier: тот же ACS URL
- Claim Issuance Policy: отправлять как минимум
Name IDиGroup
Убедитесь, что у пользователей Active Directory заполнено поле email.
Шаг 2. Создание ролей Airlock
Создайте роли для администраторов и обычных пользователей.
# admin-role.yaml
kind: role
version: v3
metadata:
name: admin
spec:
options:
max_session_ttl: "8h0m0s"
allow:
logins: [ root ]
node_labels:
"*": "*"
rules:
- resources: ["*"]
verbs: ["*"]# user-role.yaml
kind: role
version: v3
metadata:
name: dev
spec:
options:
max_session_ttl: "1h"
allow:
logins:
- '{{external["http://schemas.microsoft.com/ws/2008/06/identity/claims/windowsaccountname"]}}'
- ubuntu
node_labels:
"access": "relaxed"Роль dev разрешает вход только на узлы с меткой access: relaxed. Шаблон {{external[...]}} подставляет значение SAML-атрибута как разрешённый OS-логин.
Шаг 3. Создание SAML-коннектора
Сгенерируйте конфигурацию коннектора:
airctl sso configure saml --acs https://airlock.example.com/v1/webapi/saml/acs \
--preset adfs \
--entity-descriptor https://adfs.example.com/FederationMetadata/2007-06/FederationMetadata.xml \
--attributes-to-roles http://schemas.xmlsoap.org/claims/Group,teleadmins,editor \
--attributes-to-roles http://schemas.xmlsoap.org/claims/Group,Users,access \
> adfs.yaml| Параметр | Описание |
|---|---|
--acs | Assertion Consumer Service URL (должен совпадать с настройкой IdP) |
--entity-descriptor | URL или путь к XML-метаданным IdP |
--attributes-to-roles | Сопоставление атрибута, значения и роли Airlock |
Проверьте коннектор перед применением:
cat adfs.yaml | airctl sso testПримените коннектор:
airctl create -f adfs.yamlЭкспорт ключа подписи
Экспортируйте сертификат подписи Airlock и добавьте его в IdP как certificate for signature verification:
airctl saml export adfs > saml.cerВход через SAML
airsh --proxy=airlock.example.com loginПри нескольких SAML-коннекторах укажите имя:
airsh login --auth=adfsСопоставление атрибутов
Поле attributes_to_roles связывает SAML-атрибуты с ролями Airlock:
kind: saml
version: v2
metadata:
name: saml-connector
spec:
acs: https://airlock.example.com/v1/webapi/saml/acs
entity_descriptor: |
<?xml version="1.0"?>
<!-- XML-метаданные IdP -->
attributes_to_roles:
- name: "groups"
value: "admins"
roles: ["editor"]
- name: "groups"
value: "developers"
roles: ["access"]Полное имя атрибута зависит от IdP. Для ADFS группы часто имеют URI http://schemas.xmlsoap.org/claims/Group.
Динамические traits
Значения SAML-атрибутов доступны в ролях через {{external["имя-атрибута"]}}. Это позволяет назначать OS-логины, метки окружений и другие параметры на основе данных IdP.
Аутентификация по умолчанию
Чтобы SAML стал методом входа по умолчанию:
kind: cluster_auth_preference
metadata:
name: cluster-auth-preference
spec:
type: saml
version: v2airctl get cap > cap.yaml
# отредактируйте cap.yaml
airctl create -f cap.yamlУстранение неполадок
- Убедитесь, что ACS URL в IdP и коннекторе совпадают.
- Проверьте, что IdP отправляет необходимые атрибуты (группы, email).
- Используйте
airctl sso testдля диагностики SAML-потока. - При ошибках подписи проверьте, что сертификат Airlock добавлен в IdP.