Airlock поддерживает многофакторную аутентификацию (MFA) для локальных пользователей. Тип otp реализует стандарт TOTP — одноразовые коды на основе времени.

Для генерации кодов можно использовать любой TOTP-клиент: Authy, FreeOTP, KeePassXC и аналоги.

Доступные режимы second_factor

ЗначениеОписание
otpТолько TOTP (по умолчанию)
webauthnТолько WebAuthn (аппаратные ключи, биометрия)
onTOTP и WebAuthn; у каждого пользователя должно быть хотя бы одно MFA-устройство
optionalTOTP и WebAuthn доступны, но не обязательны
offMFA отключена

Для пользователей SSO MFA настраивается на стороне IdP. Airlock не запрашивает MFA при SSO-входе, хотя пользователи могут зарегистрировать устройства.

Включение TOTP

Динамическая конфигурация

Получите текущий ресурс cluster_auth_preference:

airctl get cap > cap.yaml

Установите second_factor:

kind: cluster_auth_preference
metadata:
  name: cluster-auth-preference
spec:
  type: local
  second_factor: "otp"
version: v2

Примените:

airctl create -f cap.yaml

Для обязательного MFA используйте second_factor: "on". Для постепенного внедрения — "optional".

Статическая конфигурация

Добавьте в /etc/airlock.yaml:

auth_service:
  authentication:
    type: local
    second_factor: otp

Перезапустите Auth Service после изменения.

Регистрация TOTP-устройства

Пользователь регистрирует TOTP через airsh:

airsh mfa add
# Choose device type [TOTP, WEBAUTHN]: totp
# Enter device name: phone
# Scan QR code with your TOTP app
# Enter an OTP token from the device: 123456
# MFA device "phone" added.

Список зарегистрированных устройств:

airsh mfa ls

Удаление устройства:

airsh mfa rm phone

Вход с TOTP

После регистрации устройства при входе запрашивается одноразовый код:

airsh login --proxy=airlock.example.com
# Enter password for Airlock user alice:
# Enter an OTP token from a registered device: 654321

Блокировка после неудачных попыток

Локальный пользователь блокируется на 20 минут при нескольких неудачных попытках входа или сброса пароля за 30 минут.

Разблокировка администратором:

airctl get users/alice > user.yaml

Установите status.is_locked: false и примените:

airctl create -f user.yaml

Следующие шаги