---
metadata:
  - name: generator
    content: Diplodoc Platform v5.63.0
alternate:
  - https://ydb.tech/docs/en/reference/configuration/auth_config.md
  - https://ydb.tech/docs/ru/reference/configuration/auth_config.md
  - href: https://ydb.tech/docs/ru/reference/configuration/auth_config.md
    type: text/markdown
    title: Markdown version
  - href: https://ydb.tech/docs/ru/llms.txt?revision=a35149bdee1cbbc820c9e5a2b730d682f7173115&version=v26.3
    rel: describedby
sourcePath: ru/core/reference/configuration/auth_config.md
---
> **Documentation Index:** Fetch the complete configuration index at https://ydb.tech/docs/ru/llms.txt?revision=a35149bdee1cbbc820c9e5a2b730d682f7173115&version=v26.3

# auth_config

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

## Конфигурация аутентификации локальных пользователей YDB {#local-auth-config}

Подробнее об аутентификации [локальных пользователей](https://ydb.tech/docs/ru/concepts/glossary.md#access-user) см. в разделе про [аутентификацию по логину и паролю](https://ydb.tech/docs/ru/security/authentication.md#static-credentials). Для настройки аутентификации локальных пользователей по логину и паролю необходимо указать следующие параметры в секции `auth_config`:

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

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

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

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

{% note info %}

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

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

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

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

Значение по умолчанию: `true`
    ||
|| domain_login_only
| Флаг определяет границы прав доступа локальных пользователей в кластере YDB.

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

- `true` — локальные пользователи YDB существуют на уровне кластера и им могут назначаться права на доступ к множеству [баз данных](https://ydb.tech/docs/ru/concepts/glossary.md#database).

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

Значение по умолчанию: `true`
    ||
|| login_token_expire_time
| Время жизни аутентификационного токена, созданного в обмен на логин и пароль локального пользователя.

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

### Конфигурация блокировки пользователя при неправильно введённом пароле {#account-lockout}

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

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

```yaml
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](https://ydb.tech/docs/ru/yql/reference/syntax/alter-user.md).

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

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

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

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

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

### Конфигурация требований к сложности пароля {#password-complexity}

YDB позволяет аутентифицировать пользователей по логину и паролю. Подробнее см. в разделе [аутентификация по логину и паролю](https://ydb.tech/docs/ru/security/authentication.md#static-credentials). Для повышения безопасности в YDB предусмотрена возможность настройки сложности используемых паролей [локальных пользователей](https://ydb.tech/docs/ru/concepts/glossary.md#access-user). Для конфигурирования требований к паролю необходимо описать секцию `password_complexity`.

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

```yaml
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`
    ||
|#

{% note info %}

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

{% endnote %}

## Конфигурация LDAP аутентификации {#ldap-auth-config}

Одним из способов аутентификации пользователей в YDB является использование [LDAP](https://ru.wikipedia.org/wiki/LDAP)-каталога. Подробнее о таком виде аутентификации написано в разделе про [использование LDAP-каталога](https://ydb.tech/docs/ru/security/authentication.md#ldap). Для конфигурирования LDAP-аутентификации необходимо описать секцию `ldap_authentication`.

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

```yaml
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`](https://ydb.tech/docs/ru/security/authentication.md#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`
| Путь до файла клиентского сертификата. Используется в качестве аутентификационной информации для [сервисного аккаунта](https://ydb.tech/docs/ru/security/authentication.md#ldap-service-account-auth).
    ||
|| `key_file`
| Путь до файла ключа клиентского сертификата
    ||
|| `scheme`
| Схема соединения с LDAP-сервером.

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

- `ldap` — YDB будет выполнять соединение с LDAP-сервером без какого-либо шифрования. Пароли будут отправляться на LDAP-сервер в открытом виде.
- `ldaps` — YDB будет выполнять зашифрованное соединение с LDAP-сервером по протоколу TLS с самого первого запроса. Для успешного установления соединения по схеме `ldaps` необходимо отключить использование [запроса `StartTls`](https://ydb.tech/docs/ru/security/authentication.md#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`
| Флаг определяет, будет ли выполняться [аутентификация сервисного аккаунта](https://ydb.tech/docs/ru/security/authentication.md#ldap-service-account-auth) по протоколу 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`
    ||
|#

## Конфигурация аутентификации по клиентскому сертификату {#certificate-auth-config}

YDB поддерживает [аутентификацию по клиентскому сертификату](https://ydb.tech/docs/ru/security/authentication.md#client-certificate). Правила проверки сертификатов задаются в секции [client_certificate_authorization](https://ydb.tech/docs/ru/reference/configuration/client_certificate_authorization.md). Дополнительно в секции `auth_config` может указываться суффикс имён пользователей, аутентифицированных по сертификату:

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

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

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

YDB поддерживает аутентификацию пользователей с использованием сервиса [Yandex Identity and Access Management (IAM)](https://yandex.cloud/en/services/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](https://ydb.tech/docs/ru/concepts/glossary.md#access-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`
    ||
|#

## Настройки кеширования результатов аутентификации {#caching-auth-results}

Для сокращения количества [проверок аутентификационных токенов](https://ydb.tech/docs/ru/security/authentication.md#token-validation) каждый узел YDB кеширует результаты проверки в [токенах пользователей](https://ydb.tech/docs/ru/concepts/glossary.md#user-token). Подробнее см. в статье [Кеширование результатов аутентификации](https://ydb.tech/docs/ru/security/caching-authentication-results.md).

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

{% note warning %}

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

{% endnote %}

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

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

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

```yaml
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`) или постоянной ошибки.

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

```yaml
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`).

## Конфигурация токена регистрации узлов {#node-registration-token}

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

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

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

- Пустая строка (`""`) — используется режим аутентификации узлов через сертификаты TLS. В этом случае узлы должны использовать сертификаты для аутентификации при регистрации в кластере. Подробнее о настройке аутентификации узлов через сертификаты см. в разделе [Аутентификация и авторизация узлов баз данных](https://ydb.tech/docs/ru/devops/configuration-management/configuration-v1/node-authorization.md).
- "root@builtin" — режим аутентификации через особый отладочный токен. Данный режим планируется к исключению в будущих релизах и не рекомендуется к использованию: для обеспечения безопасности кластера рекомендуется использовать режим аутентификации узлов через сертификаты TLS, установив пустое значение параметра.

||
|#

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

```yaml
auth_config:
  ...
  node_registration_token: ""
  ...
```
