---
metadata:
  - name: generator
    content: Diplodoc Platform v5.52.0
alternate:
  - https://ydb.tech/docs/en/devops/deployment-options/manual/node-authorization.md?version=v26.1
  - https://ydb.tech/docs/ru/devops/deployment-options/manual/node-authorization.md?version=v26.1
  - href: ru/devops/deployment-options/manual/node-authorization.md
    type: text/markdown
    title: Markdown version
  - href: ../../../llms.txt
    type: text/markdown
    title: llms.txt
sourcePath: ru/core/devops/deployment-options/manual/node-authorization.md
---
> **Documentation Index:** Fetch the complete configuration index at https://ydb.tech/docs/ru/llms.txt

# Аутентификация и авторизация узлов баз данных

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

Аутентификация и авторизация узлов баз данных осуществляется в следующем порядке:

1. Запускаемый узел базы данных открывает gRPC-подключение к одному из узлов хранения кластера, указанных в опции командной строки `--node-broker`. При подключении используется протокол TLS, и в настройках подключения в качестве клиентского сертификата используется сертификат запускаемого узла.
2. Узел хранения и узел базы данных осуществляют взаимные проверки подлинности с использованием протокола TLS: производится проверка цепочки доверия сертификата и проверка соответствия имени хоста значению поля "Subject Name" сертификата.
3. Узел хранения проверяет заполнение поля "Subject" сертификата на соответствие требованиям, [устанавливаемым настройками](https://ydb.tech/docs/ru/reference/configuration/client_certificate_authorization.md?version=v26.1) в статической конфигурации.
4. При успешном прохождении перечисленных выше проверок подключение со стороны узла базы данных считается аутентифицированным, и ему присваивается идентификатор субъекта доступа - [SID](https://ydb.tech/docs/ru/concepts/glossary.md?version=v26.1#access-sid), определяемый настройками.
5. Узел базы данных использует установленное gRPC-подключение для регистрации в составе кластера с использованием соответствующего служебного вызова. При регистрации узел базы данных передает свой сетевой адрес, предназначенный для взаимодействия с другими узлами кластера.
6. Узел хранения проверяет наличие SID, присвоенного gRPC-подключению, в списке допустимых. При успешном прохождении этой проверки узел хранения регистрирует узел базы данных в кластере, сопоставляя полученный сетевой адрес с идентификатором узла.
7. Узел базы данных входит в кластер, подключаясь через свой сетевой адрес и указывая идентификатор узла, полученный при регистрации. Попытки входа в кластер узлов с неизвестными сетевыми адресами или идентификаторами блокируются другими узлами.

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

## Пререквизиты для настройки

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

    {% note info %}

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

    {% endnote %}

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

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

    Пример команды для запуска узла базы данных с опциями, указывающими пути к ключам и сертификатам TLS для протокола gRPC:

    ```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=v26.1) необходимо добавить следующие блоки настроек:

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"]
    ```

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

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

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

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

    Более подробная информация по настройке параметров аутентификации кластера приведена в [соответствующем разделе документации](https://ydb.tech/docs/ru/reference/configuration/security_config.md?version=v26.1#security-access-levels).

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

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

1. Обновите файлы статической конфигурации на всех узлах кластера вручную либо с помощью [плейбука Ansible](https://ydb.tech/docs/ru/devops/deployment-options/ansible/update-config.md?version=v26.1).

1. Выполните поэтапный перезапуск узлов хранения кластера [с помощью ydbops](https://ydb.tech/docs/ru/reference/ydbops/rolling-restart-scenario.md?version=v26.1) либо с использованием [плейбука Ansible](https://ydb.tech/docs/ru/devops/deployment-options/ansible/restart.md?version=v26.1).

1. Выполните поэтапный перезапуск узлов баз данных кластера с помощью ydbops либо с использованием плейбука Ansible.
