Аутентификация и авторизация узлов баз данных
Важно
Данная статья описывает работу с кластерами YDB, использующими конфигурацию V1. Конфигурация V1 является основным способом конфигурирования кластеров под управлением YDB версии ниже v25.1. Начиная с версии v25.1, YDB поддерживает конфигурацию V2, которая является рекомендуемым способом конфигурирования для кластеров YDB версии v25.1 и выше. Для кластеров, использующих конфигурацию V2, данная инструкция не применима.
Если ваш кластер уже обновлён до версии v25.1 или выше, но ещё использует конфигурацию V1, рекомендуется запланировать миграцию на конфигурацию V2, так как поддержка конфигурации V1 будет прекращена в будущих версиях YDB.
Аутентификация узлов в кластере YDB обеспечивает проверку подлинности узлов баз данных при выполнении служебных вызовов к другим узлам по протоколу gRPC. Авторизация узлов обеспечивает проверку и предоставление необходимых полномочий при обработке служебных вызовов, включая операции регистрации запускаемых узлов в кластере и доступа к конфигурации. Использование аутентификации и авторизации узлов рекомендуется для всех кластеров YDB, поскольку позволяет избежать ситуаций несанкционированного доступа к данным через включение в кластер контролируемых злоумышленниками узлов.
Аутентификация и авторизация узлов баз данных осуществляется в следующем порядке:
- Запускаемый узел базы данных открывает gRPC-подключение к одному из узлов хранения кластера, указанных в опции командной строки
--node-broker
. При подключении используется протокол TLS, и в настройках подключения в качестве клиентского сертификата используется сертификат запускаемого узла. - Узел хранения и узел базы данных осуществляют взаимные проверки подлинности с использованием протокола TLS: производится проверка цепочки доверия сертификата и проверка соответствия имени хоста значению поля «Subject Name» сертификата.
- Узел хранения проверяет заполнение поля «Subject» сертификата на соответствие требованиям, устанавливаемым настройками в статической конфигурации.
- При успешном прохождении перечисленных выше проверок подключение со стороны узла базы данных считается аутентифицированным, и ему присваивается идентификатор субъекта доступа — SID, определяемый настройками.
- Узел базы данных использует установленное gRPC-подключение для регистрации в составе кластера с использованием соответствующего служебного вызова. При регистрации узел базы данных передаёт свой сетевой адрес, предназначенный для взаимодействия с другими узлами кластера.
- Узел хранения проверяет наличие SID, присвоенного gRPC-подключению, в списке допустимых. При успешном прохождении этой проверки узел хранения регистрирует узел базы данных в кластере, сопоставляя полученный сетевой адрес с идентификатором узла.
- Узел базы данных входит в кластер, подключаясь через свой сетевой адрес и указывая идентификатор узла, полученный при регистрации. Попытки входа в кластер узлов с неизвестными сетевыми адресами или идентификаторами блокируются другими узлами.
Далее описаны настройки, необходимые для включения функции аутентификации и авторизации узлов.
Пререквизиты для настройки
-
В развёрнутом кластере YDB должно быть настроено шифрование трафика gRPC с использованием протокола TLS.
-
При подготовке сертификатов узлов для кластера, в котором планируется использовать функции аутентификации и авторизации узлов, необходимо обеспечить единые правила заполнения поля «Subject» сертификатов, позволяющие идентифицировать сертификаты, выпущенные для узлов кластера. Более подробная информация приведена в документации по настройке правил проверки сертификатов.
Примечание
Предлагаемый пример скрипта для генерации самоподписанных сертификатов узлов YDB заполняет поле «Subject» значением
O=YDB
для всех сертификатов узлов. Приведённые далее примеры настроек подготовлены для сертификатов с именно таким заполнением поля «Subject». -
В параметры командной строки для запуска узлов баз данных необходимо добавить опции, задающие пути к файлам сертификатов доверенных центров сертификации, сертификата узла и ключа узла. Список дополнительных опций приведён в таблице ниже.
Опция командной строки Описание --grpc-ca
Путь к файлу сертификатов доверенных центров сертификации ca.crt
.--grpc-cert
Путь к файлу сертификата узла node.crt
.--grpc-key
Путь к файлу секретного ключа узла node.key
.Пример команды для запуска узла базы данных с опциями, указывающими пути к ключам и сертификатам TLS для протокола gRPC:
/opt/ydb/bin/ydbd server --config-dir /opt/ydb/cfg --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
Включение режима аутентификации и авторизации узлов
Для включения обязательной авторизации узлов баз данных в файл конфигурации кластера необходимо добавить следующие блоки настроек:
-
На корневом уровне конфигурации добавьте блок
client_certificate_authorization
, в котором укажите требования к заполнению поля "Subject" доверенных сертификатов подключаемых узлов, например:client_certificate_authorization: request_client_certificate: true client_certificate_definitions: - member_groups: ["registerNode@cert"] subject_terms: - short_name: "O" values: ["YDB"]
При необходимости добавьте другие проверки сертификатов в соответствии с документацией.
В случае успешной проверки сертификата и соответствия компонентов поля "Subject" сертификата требованиям, установленным в блоке
subject_terms
, подключению будут присвоены субъекты доступа, перечисленные в параметреmember_groups
. Чтобы отделить такие субъекты доступа от других групп и учётных записей, к их наименованию добавляется суффикс@cert
. -
В блок настроек аутентификации кластера
security_config
добавьте элементregister_dynamic_node_allowed_sids
, указав список субъектов доступа, которым разрешена регистрация узлов баз данных. По техническим причинам в этом списке также должен присутствовать субъект доступаroot@builtin
. Пример:security_config: enforce_user_token_requirement: true ... register_dynamic_node_allowed_sids: - "root@builtin" # требуется по техническим причинам - "registerNode@cert"
Более подробная информация по настройке параметров аутентификации кластера приведена в соответствующем разделе документации.
-
Обновите файлы статической конфигурации на всех узлах кластера вручную либо с помощью плейбука Ansible.
-
Выполните поэтапный перезапуск узлов хранения кластера с помощью ydbops либо с использованием плейбука Ansible.
-
Выполните поэтапный перезапуск узлов баз данных кластера с помощью ydbops либо с использованием плейбука Ansible.