auth_config

YDB позволяет использовать различные способы аутентификации пользователей в системе. Настройки аутентификации и провайдеров аутентификации задаются в секции auth_config файла конфигурации YDB.

Конфигурация аутентификации локальных пользователей YDB

Подробнее об аутентификации локальных пользователей см. в разделе про аутентификацию по логину и паролю. Для настройки аутентификации локальных пользователей по логину и паролю необходимо указать следующие параметры в секции auth_config:

Параметр

Описание

use_login_provider

Флаг разрешает аутентификацию локальных пользователей по auth-токенам, полученным в результате входа по логину и паролю. Процедура входа в YDB — это обмен логина и пароля на аутентификационный токен.

Возможные значения:

  • true — разрешает аутентификацию локальных пользователей по аутентификационным токенам;
  • false — запрещает аутентификацию локальных пользователей по аутентификационным токенам.

Значение по умолчанию: true

Примечание

Для возможности создания и аутентификации локальных пользователей параметры use_login_provider и enable_login_authentication должны иметь значение true. В противном случае локальные пользователи не смогут аутентифицироваться в YDB.

enable_login_authentication

Флаг разрешает создание локальных пользователей и получение для них аутентификационного токена в обмен на логин и пароль.

Возможные значения:

  • true — разрешает создание локальных пользователей и получение для них аутентификационного токена;
  • false — запрещает создание локальных пользователей и получение для них аутентификационного токена.

Значение по умолчанию: true

domain_login_only

Флаг определяет границы прав доступа локальных пользователей в кластере YDB.

Возможные значения:

  • true — локальные пользователи YDB существуют на уровне кластера и им могут назначаться права на доступ к множеству баз данных.

  • false — локальные пользователи могут существовать как на уровне кластера, так и на уровне каждой отдельной базы данных. Границы прав доступа локальных пользователей, созданных на уровне базы данных, ограничиваются базой данных, в которой они созданы.

Значение по умолчанию: true

login_token_expire_time

Время жизни аутентификационного токена, созданного в обмен на логин и пароль локального пользователя.

Значение по умолчанию: 12h

Конфигурация блокировки пользователя при неправильно введённом пароле

YDB позволяет запретить пользователю аутентифицироваться, если он совершил несколько неудачных попыток ввода пароля. Для настройки условий блокировки пользователя необходимо заполнить секцию account_lockout.

Пример секции account_lockout:

auth_config:
  #...
  account_lockout:
    attempt_threshold: 4
    attempt_reset_duration: "1h"
  #...

Параметр

Описание

attempt_threshold

Количество неверных попыток ввода пароля, после которых учётная запись пользователя временно блокируется. Если пользователь ввёл неправильный пароль указанное количество раз подряд, ему запрещается аутентифицироваться на время, заданное в параметре attempt_reset_duration.

Если параметр имеет значение 0, число попыток ввода неправильного пароля не ограничено. После успешной аутентификации (ввода правильных имени пользователя и пароля), счетчик неуспешных попыток сбрасывается в значение 0.

Значение по умолчанию: 4

attempt_reset_duration

Период времени, в течение которого пользователь считается заблокированным. В течение этого периода пользователь не сможет аутентифицироваться в системе даже если введёт правильные имя пользователя и пароль. Период блокировки начинается с момента последней неверной попытки ввода пароля.

Если указано нулевое значение ("0s" — запись, эквивалентная 0 секунд), пользователь будет заблокирован на неограниченное время. В этом случае снять блокировку можно при помощи команды ALTER USER ... LOGIN.

Минимальный интервал времени блокировки 1 секунда.

Поддерживаемые единицы измерения:

  • Секунды. 30s
  • Минуты. 20m
  • Часы. 5h
  • Дни. 3d

Не допускается комбинировать единицы измерения в одной строке. Например такая запись некорректна: 1d12h. Такую запись нужно заменить на эквивалентную, например 36h.

Значение по умолчанию: 1h

Конфигурация требований к сложности пароля

YDB позволяет аутентифицировать пользователей по логину и паролю. Подробнее см. в разделе аутентификация по логину и паролю. Для повышения безопасности в YDB предусмотрена возможность настройки сложности используемых паролей локальных пользователей. Для конфигурирования требований к паролю необходимо описать секцию password_complexity.

Пример секции password_complexity:

auth_config:
  #...
  password_complexity:
    min_length: 8
    min_lower_case_count: 1
    min_upper_case_count: 1
    min_numbers_count: 1
    min_special_chars_count: 1
    special_chars: "!@#$%^&*()_+{}|<>?="
    can_contain_username: false
  #...

Параметр

Описание

min_length

Минимальная длина пароля.

Значение по умолчанию: 0 (не ограничено)

min_lower_case_count

Минимальное количество строчных букв в пароле.

Значение по умолчанию: 0 (не ограничено)

min_upper_case_count

Минимальное количество прописных букв в пароле.

Значение по умолчанию: 0 (не ограничено)

min_numbers_count

Минимальное количество цифр в пароле.

Значение по умолчанию: 0 (не ограничено)

min_special_chars_count

Минимальное количество специальных символов в пароле из указанных в параметре special_chars.

Значение по умолчанию: 0 (не ограничено)

special_chars

Перечень специальных символов, допустимых при задании пароля.

Валидные значения: !@#$%^&*()_+{}\|<>?=

Значение по умолчанию: пустая строка (допускает использование всех валидных специальных символов)

can_contain_username

Флаг определяет допустимость включения имени пользователя в пароль.

Значение по умолчанию: false

Примечание

Любые изменения политики паролей не затрагивают уже действующие пароли пользователей, поэтому изменять существующие пароли не требуется, они будут приниматься в текущем виде.

Конфигурация LDAP аутентификации

Одним из способов аутентификации пользователей в YDB является использование LDAP-каталога. Подробнее о таком виде аутентификации написано в разделе про использование LDAP-каталога. Для конфигурирования LDAP-аутентификации необходимо описать секцию ldap_authentication.

Пример секции ldap_authentication:

auth_config:
  ...
  ldap_authentication:
    hosts:
      - "ldap-hostname-01.example.net"
      - "ldap-hostname-02.example.net"
      - "ldap-hostname-03.example.net"
    port: 389
    base_dn: "dc=mycompany,dc=net"
    bind_dn: "cn=serviceAccaunt,dc=mycompany,dc=net"
    bind_password: "serviceAccauntPassword"
    search_filter: "uid=$username"
    scheme: "ldap"
    requested_group_attribute: "memberOf"
    extended_settings:
      enable_nested_groups_search: true
      enable_sasl_external_bind: true
    use_tls:
      enable: true
      ca_cert_file: "/path/to/ca.pem"
      cert_require: DEMAND
      cert_file: "/path/to/client-cert.pem"
      key_file: "/path/to/client-key.pem"
  ldap_authentication_domain: "ldap"
  refresh_time: "1h"
  ...

Параметр

Описание

hosts

Список имен хостов, на котором работает LDAP-сервер

port

Порт для подключения к LDAP-серверу

base_dn

Корень поддерева в LDAP-каталоге, начиная с которого будет производиться поиск записи пользователя

bind_dn

Отличительное имя (Distinguished Name, DN) сервисного аккаунта, от имени которого выполняется поиск записи пользователя

bind_password

Пароль сервисного аккаунта, от имени которого выполняется поиск записи пользователя. Не задаётся при extended_settings.enable_sasl_external_bind: true

search_filter

Фильтр для поиска записи пользователя в LDAP-каталоге. В строке фильтра может встречаться последовательность символов $username, которая будет заменена на имя пользователя, запрошенное для аутентификации в базе данных

use_tls

Настройки для конфигурирования TLS-соединения между YDB и LDAP-сервером

enable

Определяет, будет ли произведена попытка установить TLS-соединение с использованием запроса StartTls. При установке значения этого параметра в true, необходимо отключить использование схемы соединения ldaps, присвоив параметру ldap_authentication.scheme значение ldap

ca_cert_file

Путь до файла сертификата удостоверяющего центра

cert_require

Уровень требований к сертификату LDAP-сервера.

Возможные значения:

  • NEVER - YDB не запрашивает сертификат или проверку проходит любой сертификат.
  • ALLOW - YDB требует, что бы LDAP-сервер предоставил сертификат. Если предоставленному сертификату нельзя доверять, TLS-сессия все равно установится.
  • TRY - YDB требует, что бы LDAP-сервер предоставил сертификат. Если предоставленному сертификату нельзя доверять, установление TLS-соединения прекращается.
  • DEMAND и HARD — Эти требования эквивалентны параметру TRY.

Значение по умолчанию: DEMAND

cert_file

Путь до файла клиентского сертификата. Используется в качестве аутентификационной информации для сервисного аккаунта.

key_file

Путь до файла ключа клиентского сертификата

scheme

Схема соединения с LDAP-сервером.

Возможные значения:

  • ldap — YDB будет выполнять соединение с LDAP-сервером без какого-либо шифрования. Пароли будут отправляться на LDAP-сервер в открытом виде.
  • ldaps — YDB будет выполнять зашифрованное соединение с LDAP-сервером по протоколу TLS с самого первого запроса. Для успешного установления соединения по схеме ldaps необходимо отключить использование запроса StartTls в секции ldap_authentication.use_tls.enable: false и заполнить информацию о сертификате ldap_authentication.use_tls.ca_cert_file и уровне требования сертификата ldap_authentication.use_tls.cert_require.
  • При использовании любого другого значения будет браться значение по умолчанию - ldap.

Значение по умолчанию: ldap

requested_group_attribute

Атрибут обратного членства в группе. По умолчанию memberOf

extended_settings.enable_nested_groups_search

Флаг определяет, будет ли выполнятся запрос для получения всего дерева групп, в которые входят непосредственные группы пользователя.

Возможные значения:

  • true — YDB запрашивает информацию о всех группах, в которые входят непосредственные группы пользователя. Запросы о всех родительских группах могут занимать много времени.
  • false — YDB запрашивает плоский список групп пользователя. Такой запрос не получает информацию о возможных вложенных родительских группах.

Значение по умолчанию: false

extended_settings.enable_sasl_external_bind

Флаг определяет, будет ли выполняться аутентификация сервисного аккаунта по протоколу SASL с механизмом EXTERNAL.

Возможные значения:

  • true - Для аутентификации сервисного аккаунта будет задействован протокол SASL с механизмом EXTERNAL (аутентификация по клиентскому TLS‑сертификату в рамках mTLS). В качестве аутентификационной информации используется клиентский сертификат, указанный в параметрах use_tls.cert_file, и use_tls.key_file. Параметры bind_dn и bind_password в таком случае не задаются.
  • false - Для аутентификации сервисного аккаунта будет использоваться метод simple bind. Требуется указать параметры bind_dn и bind_password.

Значение по умолчанию: false

host

Имя хоста, на котором работает LDAP-сервер. Это устаревший параметр, вместо него должен использоваться параметр hosts

ldap_authentication_domain

Суффикс имени пользователя, позволяющий отличать пользователей из LDAP-каталога от пользователей аутентифицируемых с помощью других провайдеров.

Значение по умолчанию: ldap

Конфигурация аутентификации по клиентскому сертификату

YDB поддерживает аутентификацию по клиентскому сертификату. Правила проверки сертификатов задаются в секции client_certificate_authorization. Дополнительно в секции auth_config может указываться суффикс имён пользователей, аутентифицированных по сертификату:

Параметр

Описание

certificate_authentication_domain

Суффикс имени пользователя, позволяющий отличать пользователей, аутентифицированных по клиентскому сертификату, от пользователей, аутентифицируемых другими способами.

Значение по умолчанию: cert (то есть суффикс SID по умолчанию — @cert).

Конфигурация аутентификации с использованием стороннего IAM-провайдера

YDB поддерживает аутентификацию пользователей с использованием сервиса Yandex Identity and Access Management (IAM), который используется в Yandex Cloud, или другого сервиса, совместимого с ним по API. Для конфигурирования IAM-аутентификации необходимо определить следующие параметры:

Параметр

Описание

use_access_service

Флаг разрешает аутентификацию пользователей в Yandex Cloud через IAM с использованием AccessService.

Значение по умолчанию: false

access_service_endpoint

Адрес, по которому отправляются запросы в AccessService (IAM).

Значение по умолчанию: as.private-api.cloud.yandex.net:4286

use_access_service_tls

Флаг включает использование TLS-соединений между YDB и AccessService.

Значение по умолчанию: true

access_service_domain

Суффикс «источника пользователя» в SID для пользователей, приходящих в YDB из Yandex Cloud IAM.

Значение по умолчанию: as ("access service")

path_to_root_ca

Путь до файла сертификата удостоверяющего центра, используемого для взаимодействия с AccessService.

Значение по умолчанию: /etc/ssl/certs/YandexInternalRootCA.pem

access_service_grpc_keep_alive_time_ms

Период времени, в миллисекундах, по истечении которого YDB посылает keepalive ping IAM-серверу, чтобы сохранить соединение.

Значение по умолчанию: 10000

access_service_grpc_keep_alive_timeout_ms

Период времени ожидания ответа от IAM-сервера на keepalive ping, в миллисекундах. Если по истечении срока ожидания ответ от IAM-сервера не приходит, YDB закрывает соединение.

Значение по умолчанию: 1000

use_access_service_api_key

Флаг разрешает использование API-ключей IAM. API-ключ — это секретный ключ, выписываемый в Yandex Cloud IAM для упрощённой авторизации сервисных аккаунтов в API Yandex Cloud. Его применяют, если нет возможности автоматически запрашивать IAM-токен.

Значение по умолчанию: false

Настройки кеширования результатов аутентификации

Для сокращения количества проверок аутентификационных токенов каждый узел YDB кеширует результаты проверки в токенах пользователей. Подробнее см. в статье Кеширование результатов аутентификации.

Время жизни и другие аспекты работы токена пользователя настраиваются с помощью следующих параметров. Значения временных параметров задаются числом с суффиксом единицы измерения: ms — миллисекунды, s — секунды, m — минуты, h — часы, d — дни. Например, 300ms, 30s, 10m, 1h или 2d.

refresh_period

Определяет как часто узел YDB сканирует токены пользователей в кэше на достижение временных лимитов, указанных в параметрах refresh_time, life_time и expire_time, после которых требуется обновление или удаление токена. Чем короче указанный интервал проверки токенов пользователей, тем выше нагрузка на CPU.

Значение по умолчанию: 1s

refresh_time

Максимальный интервал между успешным обновлением токена пользователя и следующей попыткой обновления. Конкретное время обновления выбирается в диапазоне от refresh_time/2 до refresh_time.

Например, после первого запроса с корректным аутентификационным токеном узел создаёт токен пользователя. Через интервал, выбранный случайно в диапазоне от refresh_time/2 до refresh_time, узел снова проверяет аутентификационный токен. После успешной проверки цикл повторяется. При ретрабельной ошибке узел повторяет проверку с учётом параметров min_error_refresh_time и max_error_refresh_time, а при постоянной ошибке перестаёт использовать ранее созданный токен пользователя.

Параметр применяется к обновляемым аутентификационным токенам, например к токенам входа по логину и паролю и токенам внешнего провайдера идентификации.

Значение по умолчанию: 1h

life_time

Период хранения токена пользователя в кэше узла YDB с момента его последнего использования. Если запросы от пользователя, для которого создан токен, не приходили на узел YDB в течение указанного периода, узел удаляет этот токен пользователя из своего кэша.

Значение по умолчанию: 1h

expire_time

Период действия результата успешной проверки для большинства типов аутентификационных токенов. После успешного обновления отсчёт начинается заново. По истечении периода запись удаляется из кеша независимо от life_time.

Для токенов входа по логину и паролю и токенов внешнего провайдера идентификации используется срок действия самого аутентификационного токена. Для запросов с подписью ключом доступа применяется отдельный параметр as_signature_expire_time.

Значение по умолчанию: 24h

as_signature_expire_time

Период действия результата проверки запроса, аутентифицированного с помощью подписи ключом доступа.

Значение по умолчанию: 1m

min_error_refresh_time

Начальный интервал между повторными проверками после ретрабельной ошибки обновления токена пользователя.

После ретрабельной ошибки первая повторная проверка выполняется немедленно. Если она также завершается ретрабельной ошибкой, задержка перед следующей проверкой выбирается случайным образом в диапазоне от min_error_refresh_time/2 до min_error_refresh_time. После каждой следующей ретрабельной ошибки текущий интервал удваивается, но не превышает разность max_error_refresh_time - min_error_refresh_time. Для каждого текущего интервала D фактическая задержка выбирается случайным образом в диапазоне от D/2 до D.

Важно

Не рекомендуется выставлять значение параметра в 0, так как немедленные повторы создают избыточную нагрузку.

Значение по умолчанию: 1s

max_error_refresh_time

Ограничивает увеличение интервала между повторными проверками после ретрабельных ошибок обновления токена пользователя. Не ограничивает общую продолжительность повторных проверок.

Значение по умолчанию: 1m

Пример для аутентификации по логину и паролю:

auth_config:
  refresh_period: "1s"
  refresh_time: "1h"
  life_time: "2h"
  expire_time: "6h"
  login_token_expire_time: "12h"
  min_error_refresh_time: "1s"
  max_error_refresh_time: "1m"

После создания токена пользователя следующая плановая проверка выполняется через интервал, случайно выбранный в диапазоне от 30m до 1h (refresh_time). Выполнение этого условия проверяется раз в 1s (refresh_period). После успешной проверки интервал выбирается заново. При возникновении ретрабельной ошибки первая повторная проверка выполняется немедленно. Если она также завершается ретрабельной ошибкой, следующая проверка выполняется через интервал, случайно выбранный в диапазоне от 500ms до 1s (min_error_refresh_time). Затем текущий интервал удваивается, но не превышает 59s (max_error_refresh_time - min_error_refresh_time). Фактическая задержка каждый раз выбирается случайным образом в диапазоне от половины до полного текущего интервала.

Для аутентификационного токена, полученного по логину и паролю, параметр expire_time не применяется: срок действия такого токена задаётся login_token_expire_time, поэтому он перестаёт быть действительным через 12h. Кешированная запись перестаёт использоваться при ближайшей проверке после этого условия, но может быть удалена раньше из-за отсутствия запросов в течение 2h (life_time) или постоянной ошибки.

Пример для запросов с подписью ключом доступа:

auth_config:
  refresh_period: "1s"
  life_time: "30m"
  as_signature_expire_time: "1h"

Токен пользователя для запроса с подписью ключом доступа не обновляется планово. Запись считается действительной 1h (as_signature_expire_time) с момента успешной проверки и удаляется при ближайшей проверке кеша. При указанных значениях она будет удалена не позднее чем через 1h + 1s (as_signature_expire_time + refresh_period). Запись может быть удалена раньше из-за отсутствия запросов в течение 30m (life_time).

Конфигурация токена регистрации узлов

YDB позволяет настраивать тип аутентификации узлов баз данных при их регистрации в кластере. Настройка этого типа осуществляется через параметр node_registration_token секции auth_config.

Параметр

Описание

node_registration_token

Определяет тип аутентификации узлов баз данных при их регистрации в кластере YDB.

Возможные значения:

  • Пустая строка ("") — используется режим аутентификации узлов через сертификаты TLS. В этом случае узлы должны использовать сертификаты для аутентификации при регистрации в кластере. Подробнее о настройке аутентификации узлов через сертификаты см. в разделе Аутентификация и авторизация узлов баз данных.
  • "root@builtin" — режим аутентификации через особый отладочный токен. Данный режим планируется к исключению в будущих релизах и не рекомендуется к использованию: для обеспечения безопасности кластера рекомендуется использовать режим аутентификации узлов через сертификаты TLS, установив пустое значение параметра.

Пример секции auth_config с настройкой регистрации узлов по сертификату:

auth_config:
  ...
  node_registration_token: ""
  ...
Предыдущая
Следующая