Помимо внешних провайдеров аутентификации, DKP позволяет использовать локальную аутентификацию.
Локальная аутентификация обеспечивает проверку и управление доступом пользователей с возможностью настройки парольной политики, поддержкой двухфакторной аутентификации (2FA) и управлением группами. Реализация соответствует требованиям безопасности ФСТЭК и рекомендациям OWASP, обеспечивая надёжную защиту доступа к кластеру и приложениям без необходимости интеграции с внешними системами аутентификации.
Локальная аутентификация подразумевает создание в кластере объектов User и Group для статических пользователей и групп:
- В объекте User хранится информация о пользователе, включая email и хеш пароля (пароль в явном виде не сохраняется).
- В объекте Group задаётся список пользователей, объединённых в группу.
Создание статического пользователя
Для создания статического пользователя создайте ресурс User.
Пример создания ресурса (обратите внимание, что в приведенном примере указан ttl):
apiVersion: deckhouse.io/v1
kind: User
metadata:
name: admin
spec:
email: admin@yourcompany.com
password: $2a$10$etblbZ9yfZaKgbvysf1qguW3WULdMnxwWFrkoKpRH1yeWa5etjjAa
ttl: 24h
Придумайте пароль и укажите в поле password его bcrypt-хеш в исходном виде или закодированном в Base64.
Чтобы получить bcrypt-хеш в Base64, выполните команду:
echo -n '<PASSWORD>' | htpasswd -BinC 10 "" | cut -d: -f2 | tr -d '\n' | base64 -w0; echo
Если команда htpasswd недоступна, установите соответствующий пакет в зависимости от дистрибутива:
apache2-utils— для дистрибутивов, основанных на Debian;httpd-tools— для дистрибутивов, основанных на CentOS;apache2-htpasswd— для ALT Linux.
Операции над локальным пользователем
Операции сброса пароля, сброса 2FA и блокировки пользователя выполняются через ресурс UserOperation. В поле initiatorType указывается, кто инициировал операцию: администратор (admin), система (system) или сам пользователь (self).
Административные операции
Для административных действий над локальными пользователями используйте команды d8 iam user. Они создают ресурс UserOperation с initiatorType: admin, дожидаются выполнения операции и выводят результат.
При выполнении операций ResetPassword, Reset2FA и Lock удаляются объекты Dex OfflineSessions и RefreshToken, принадлежащие пользователю. Это завершает активные offline-сессии пользователя и требует повторной аутентификации.
Примеры использования команд d8 iam user:
-
интерактивный сброс пароля:
d8 iam user reset-password admin -
сброс пароля с чтением нового из stdin:
echo "N3wPa$$wo#d" | d8 iam user reset-password admin --password-stdin -
сброс пароля с автоматической генерацией нового:
d8 iam user reset-password admin --generate-password -
сброс пароля в захешированном виде (если пароль захеширован, передайте bcrypt-хеш без кодирования в Base64):
d8 iam user reset-password admin --password-hash '$2y$10$abcdef...' -
сброс 2FA:
d8 iam user reset2fa admin -
блокировка пользователя на 30 минут:
d8 iam user lock admin 30m -
разблокировка пользователя:
d8 iam user unlock admin
По умолчанию команды ожидают завершения операции. Чтобы только создать UserOperation и вывести его имя, используйте флаг --wait=false.
Сброс пароля пользователем
Локальный пользователь может самостоятельно сбросить свой пароль в интерфейсе аутентификации DKP. При этом создаётся ресурс UserOperation с типом ResetPassword и initiatorType: self.
Самостоятельный сброс пароля доступен только для локальных учётных записей (встроенный коннектор Local). Пользователи, которые входят через внешние провайдеры аутентификации, должны обращаться к администратору соответствующей системы.
При сбросе пароля:
- новый пароль должен соответствовать парольной политике;
- завершаются активные сессии пользователя — требуется повторная аутентификация.
Подробнее о сценариях смены и сброса пароля с точки зрения пользователя — в разделе Настройка аутентификации для приложений.
Добавление пользователя в группу
Запрещено использовать пользователей и группы с префиксом system:.
Аутентификация таких пользователей или участников этих групп будет отклонена, а в логах kube-apiserver появится соответствующее предупреждение.
Чтобы объединять статических пользователей в группы, создайте ресурс Group.
Пример создания ресурса:
apiVersion: deckhouse.io/v1alpha1
kind: Group
metadata:
name: admins
spec:
name: admins
members:
- kind: User
name: admin
Здесь members — список пользователей, которые входят в группу.
После создания группы и добавления в неё пользователей, необходимо настроить авторизацию.
Настройка парольной политики
Парольная политика позволяет контролировать сложность пароля, ротацию и блокировку пользователей.
Для настройки парольной политики используйте поле passwordPolicy в конфигурации модуля user-authn:
apiVersion: deckhouse.io/v1alpha1
kind: ModuleConfig
metadata:
name: user-authn
spec:
version: 2
enabled: true
settings:
passwordPolicy:
complexityLevel: Fair
passwordHistoryLimit: 10
lockout:
lockDuration: 15m
maxAttempts: 3
rotation:
interval: "30d"
Описание полей:
complexityLevel— уровень сложности пароля;passwordHistoryLimit— число предыдущих паролей, которые хранит система, чтобы предотвратить их повторное использование;lockout— настройки блокировки при превышении лимита неудачных попыток входа:lockout.maxAttempts— лимит неудачных попыток;lockout.lockDuration— длительность блокировки пользователя;
rotation— настройки ротации паролей:rotation.interval— период обязательной смены пароля.
Настройка двухфакторной аутентификации (2FA)
2FA позволяет повысить уровень безопасности, требуя ввести код из приложения-аутентификатора TOTP (например, Google Authenticator) при входе.
Для настройки 2FA используйте поле staticUsers2FA в конфигурации модуля user-authn:
apiVersion: deckhouse.io/v1alpha1
kind: ModuleConfig
metadata:
name: user-authn
spec:
version: 2
enabled: true
settings:
staticUsers2FA:
enabled: true
issuerName: "awesome-app"
Описание полей:
enabled— включает или отключает 2FA для всех статических пользователей;issuerName— имя, которое будет отображаться в приложении-аутентификаторе при добавлении аккаунта.
После включения 2FA каждый пользователь должен пройти процесс регистрации в приложении-аутентификаторе при первом входе.