Помимо внешних провайдеров аутентификации, 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). Хеш-сумму можно сгенерировать с помощью команды:

echo "$password" | htpasswd -BinC 10 "" | cut -d: -f2 | base64 -w0

Если команда htpasswd не найдена установите пакет apache2-utils для Debian-основанных дистрибутивов и httpd-utils для CentOS-основанных дистрибутивов. Если команда htpasswd недоступна, установите соответствующий пакет:

  • apache2-utils — для дистрибутивов, основанных на Debian;
  • httpd-tools — для дистрибутивов, основанных на CentOS;
  • apache2-htpasswd — для ALT Linux.

Добавление пользователя в группу

Запрещено использовать пользователей и группы с префиксом 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 каждый пользователь должен пройти процесс регистрации в приложении-аутентификаторе при первом входе.