---
metadata:
  - name: generator
    content: Diplodoc Platform v5.62.0
alternate:
  - https://ydb.tech/docs/en/devops/concepts/node-authorization.md?version=main
  - https://ydb.tech/docs/ru/devops/concepts/node-authorization.md?version=main
  - href: https://ydb.tech/docs/ru/devops/concepts/node-authorization.md?version=main
    type: text/markdown
    title: Markdown version
  - href: https://ydb.tech/docs/ru/llms.txt?revision=5f9509b7856960211eefd47b7217d87c71bdf904&version=main
    rel: describedby
sourcePath: ru/core/devops/concepts/node-authorization.md
---
> **Documentation Index:** Fetch the complete configuration index at https://ydb.tech/docs/ru/llms.txt?revision=5f9509b7856960211eefd47b7217d87c71bdf904&version=main

# Настройка аутентификации и авторизации узлов баз данных

Аутентификация узлов в кластере YDB обеспечивает проверку подлинности узлов баз данных при выполнении служебных вызовов к другим узлам по протоколу [gRPC](https://grpc.io/). Авторизация узлов обеспечивает проверку и предоставление необходимых полномочий при обработке служебных вызовов, включая операции регистрации запускаемых узлов в кластере и доступа к [управлению конфигурацией](https://ydb.tech/docs/ru/devops/configuration-management/index.md?version=main). Использование аутентификации и авторизации узлов рекомендовано для всех кластеров YDB, поскольку позволяет избежать ситуаций несанкционированного доступа к данным через включение в кластер контролируемых злоумышленниками узлов.

Прежде чем [динамический узел](https://ydb.tech/docs/ru/concepts/glossary.md?version=main#dynamic) базы данных войдёт в состав кластера и начнёт обмен с другими узлами по внутреннему протоколу [Interconnect](https://ydb.tech/docs/ru/concepts/glossary.md?version=main#actor-system-interconnect), он должен зарегистрироваться у уже работающих [узлов хранения](https://ydb.tech/docs/ru/concepts/glossary.md?version=main#storage-node). Для этого запускаемый узел устанавливает gRPC-соединение с одним из узлов хранения, указанных в опции `--node-broker`, и по этому соединению выполняет служебные вызовы — в том числе запрос на регистрацию. Именно такие gRPC-вызовы и защищаются аутентификацией и авторизацией узлов: без успешной проверки узел не получает право зарегистрироваться и не может войти в кластер.

## Что нужно знать перед тем как начать

**Идентификаторы узлов:**

- **NodeId** — уникальный числовой идентификатор узла в кластере (от 1 до 1048575).
- **SID** (Subject IDentifier) — уникальный идентификатор субъекта доступа, определяющий, какие операции может выполнять узел (например, `registerNode@cert` означает «узел с правом регистрации»).

**Цель аутентификации.** Убедиться, что   новый узел БД - это авторизованный узел. Для этого используются [сертификаты](https://ydb.tech/docs/ru/reference/configuration/client_certificate_authorization.md?version=main).

## Как проходит проверка узла


1. Запускаемый узел базы данных открывает gRPC-подключение к одному из узлов хранения, указанных в опции `--node-broker`. Подключение выполняется по TLS, а в качестве клиентского сертификата используется сертификат запускаемого узла, заданный в опции `--grpc-cert`.
2. Узел хранения и узел базы данных выполняют [mTLS](https://ydb.tech/docs/ru/concepts/glossary.md?version=main#mtls) : каждый узел проверяет сертификат другого. Проверяется цепочка доверия (сертификат подписан известным центром сертификации) и соответствие имени хоста значению поля "Subject Name" сертификата.
3. Узел хранения проверяет поле "Subject" сертификата на соответствие требованиям, заданным в статической конфигурации в секции [client_certificate_authorization](https://ydb.tech/docs/ru/reference/configuration/client_certificate_authorization.md?version=main). Таким образом узел хранения убеждается, что сертификат издан именно для узлов вашего кластера. Например, вы можете требовать, чтобы все сертификаты узлов имели организацию (O) = "MyCompany", что затруднит подделку сертификата злоумышленникам.
4. Если все проверки успешны (сертификат подлинный, цепочка доверия в порядке, поле Subject соответствует требованиям), узел хранения доверяет подключению и присваивает ему идентификатор субъекта доступа (SID) — строку типа registerNode@cert, указанную в конфигурации в параметре member_groups. SID определяет, какие операции может выполнять узел (в данном случае — регистрироваться в кластере).
5. Узел базы данных использует доверенное gRPC-подключение, чтобы «представиться» узлу хранения. Узел БД посылает служебный запрос, в котором передаёт IP-адрес и порт, по которому будут принимать соединения от других узлов кластера. Узел хранения запоминает полученную информацию — это и называется регистрацией в кластере.
6. Узел хранения проверяет: имеет ли SID, присвоенный подключению на этапе mTLS, право на регистрацию узлов. Для этого узел хранения смотрит на параметр конфигурации `register_dynamic_node_allowed_sids` — это список SID, которым разрешена регистрация новых узлов БД в кластере. Если SID узла (например, `registerNode@cert`) содержится в этом списке — регистрация разрешена. Если нет — узел отвергается как неавторизованный.

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

   - Присваивает узлу БД уникальный числовой идентификатор — **NodeId** (например, NodeId=50001).
   - Записывает соответствие: NodeId=50001 → IP-адрес 192.168.1.100:19002 в служебный реестр узлов кластера.
   - Этот реестр используется другими узлами кластера для маршрутизации (куда направить запрос узлу с NodeId=50001).

7. Теперь узел БД готов к полноценной работе в кластере. Узел БД подключается к другим узлам в кластере через служебный протокол Interconnect и передаёт свой назначенный NodeId (например, 50001) и свой сетевой адрес (host:port). Другие узлы кластера используют эту информацию для маршрутизации запросов. Если какой-то узел попытается подключиться с неизвестным NodeId или IP-адресом (которого нет в реестре), другие узлы его отвергают.

Режим аутентификации узлов при регистрации задаётся параметром [node_registration_token](https://ydb.tech/docs/ru/reference/configuration/auth_config.md?version=main#node-registration-token) в секции `auth_config`. По умолчанию аутентификация выключена. Такой режим допустим только в полностью изолированных тестовых окружениях.

## Настройка аутентификации и авторизации узлов баз данных

Чтобы включить аутентификацию и авторизацию узлов, перед изменением конфигурации кластера необходимо подготовить инфраструктуру сертификатов и настроить запуск узлов с использованием TLS-сертификатов.

1. Убедитесь, что в развернутом кластере YDB [настроено шифрование gRPC-трафика](https://ydb.tech/docs/ru/reference/configuration/tls.md?version=main#grpc) с использованием TLS.
2. При выпуске сертификатов для узлов задайте единые правила заполнения поля "Subject", чтобы можно было отличать сертификаты узлов кластера. Подробности — в [документации по правилам проверки сертификатов](https://ydb.tech/docs/ru/reference/configuration/client_certificate_authorization.md?version=main).

    {% note info %}

    Пример [скрипта генерации самоподписанных сертификатов](https://github.com/ydb-platform/ydb/blob/main/ydb/deploy/tls_cert_gen/) для узлов YDB заполняет поле "Subject" значением `O=YDB` для всех узлов. Примеры в этой статье рассчитаны именно на такой вариант заполнения поля "Subject".

    {% endnote %}

3. В параметры командной строки для [запуска узлов баз данных](https://ydb.tech/docs/ru/devops/deployment-options/manual/initial-deployment/deployment-configuration-v1.md?version=main#start-dynnode) добавьте опции с путями к сертификатам и ключу:

    | **Опция командной строки** | **Описание** |
    |----------------------------|--------------|
    | `--grpc-ca`                | Путь к файлу сертификатов доверенных центров сертификации `ca.crt`. |
    | `--grpc-cert`              | Путь к файлу сертификата узла `node.crt`. |
    | `--grpc-key`               | Путь к файлу секретного ключа узла `node.key`. |

    Пример запуска узла базы данных:

    ```bash
    /opt/ydb/bin/ydbd server --yaml-config  /opt/ydb/cfg/config.yaml --tenant /Root/testdb \
        --grpcs-port 2136 --grpc-ca /opt/ydb/certs/ca.crt \
        --grpc-cert /opt/ydb/certs/node.crt --grpc-key /opt/ydb/certs/node.key \
        --ic-port 19002 --ca /opt/ydb/certs/ca.crt \
        --mon-port 8766 --mon-cert /opt/ydb/certs/web.pem \
        --node-broker grpcs://<ydb1>:2135 \
        --node-broker grpcs://<ydb2>:2135 \
        --node-broker grpcs://<ydb3>:2135
    ```

## Включение режима аутентификации и авторизации узлов

Чтобы включить обязательную авторизацию узлов баз данных, обновите [статическую конфигурацию кластера](https://ydb.tech/docs/ru/reference/configuration/index.md?version=main):

1. На корневом уровне добавьте блок `client_certificate_authorization` с требованиями к полю "Subject" сертификатов подключаемых узлов.

    ```yaml
    client_certificate_authorization:
      request_client_certificate: true
      client_certificate_definitions:
        - member_groups: ["registerNode@cert"]
          subject_terms:
            - short_name: "O"
              values: ["YDB"]
    ```

    При необходимости добавьте дополнительные проверки сертификатов согласно [документации по `client_certificate_authorization`](https://ydb.tech/docs/ru/reference/configuration/client_certificate_authorization.md?version=main).

    В случае успешной проверки сертификата и соответствия компонентов его поля "Subject" требованиям, заданным в `subject_terms`, подключению будут присвоены субъекты доступа (SID), перечисленные в `member_groups`. Чтобы отделять такие субъекты от других групп и учётных записей, необходимо их именовать с добавлением суффикса `@cert`.

2. В блоке `security_config` добавьте параметр `register_dynamic_node_allowed_sids` со списком SID, которым разрешена регистрация узлов баз данных. Пример:

    ```yaml
    domains_config:
      ...
      security_config:
        enforce_user_token_requirement: true
        ...
        register_dynamic_node_allowed_sids:
          - "root@builtin"
          - "registerNode@cert"
    ```

    Включение `root@builtin` в этот список обязательно по техническим причинам: некоторые внутренние процессы кластера используют его независимо от режима аутентификации узлов.

    Подробности о параметрах аутентификации кластера см. в [документации по `security_config`](https://ydb.tech/docs/ru/reference/configuration/security_config.md?version=main#security-access-levels).

3. В блоке `auth_config` присвойте параметру `node_registration_token` пустую строку:

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

    Подробности о параметре `node_registration_token` см. в [документации по `auth_config`](https://ydb.tech/docs/ru/reference/configuration/auth_config.md?version=main#node-registration-token).

4. Обновите статическую конфигурацию на всех узлах кластера вручную или через [плейбук Ansible](https://ydb.tech/docs/ru/devops/deployment-options/ansible/update-config.md?version=main).
5. Выполните поэтапный перезапуск узлов хранения [с помощью ydbops](https://ydb.tech/docs/ru/reference/ydbops/rolling-restart-scenario.md?version=main) или через [плейбук Ansible](https://ydb.tech/docs/ru/devops/deployment-options/ansible/restart.md?version=main).
6. Выполните поэтапный перезапуск узлов баз данных кластера с помощью ydbops или плейбука Ansible.
