-
Notifications
You must be signed in to change notification settings - Fork 606
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
docs on node authorization, in progress
- Loading branch information
Showing
3 changed files
with
123 additions
and
48 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,76 @@ | ||
# Авторизация узлов при регистрации в кластере | ||
|
||
Функция авторизации узлов обеспечивает проверку подлинности узлов баз данных при их регистрации в состав кластера {{ ydb-short-name }}. Использование авторизации узлов рекомендовано для всех кластеров {{ ydb-short-name }}, поскольку позволяет избежать нежелательной ситуации, когда потенциальный злоумышленник может запустить собственный экземпляр узла базы данных, и получить тем самым доступ к данным соответствующей базы данных. | ||
|
||
Далее описаны действия необходимые для для того, чтобы задействовать авторизацию регистрации узлов. | ||
|
||
## Подготовка сертификатов узлов | ||
|
||
При подготовке сертификатов узлов необходимо обеспечить единые правила заполнения поля "Subject" (Субъект). При проверке сертификата в процессе регистрации узла {{ ydb-short-name }} убеждается в наличии у подключающегося узла доверенного сертификата, и проверяет заполнение полей поля "Subject" на соответствие требованиям, устанавливаемым в статической конфигурации {{ ydb-short-name }}. | ||
|
||
Предлагаемый [пример скрипта](https://github.com/ydb-platform/ydb/blob/main/ydb/deploy/tls_cert_gen/) для генерации самоподписанных сертификатов узлов {{ ydb-short-name }} обеспечивает заполнение поля "Subject" значением `O=YDB` для всех сертификатов узлов. Приведенные далее примеры настроек подготовлены для сертификатов с именно таким заполнением поля "Subject". | ||
|
||
## Включение режима авторизации узлов | ||
|
||
Для включения обязательной авторизации узлов баз данных в файл [статической конфигурации кластера](../../reference/configuration/) необходимо добавить следующие блоки настроек: | ||
|
||
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"] | ||
``` | ||
В случае успешной проверки сертификата и при условии соответствия заполнения компонентов поля "Subject" сертификата установленным в блоке `subject_terms` требованиям, подключению будут присвоены субъекты доступа, перечисленные в параметре `member_groups`. Для отделения таких субъектов доступа от других разновидностей групп и учетных записей к их наименованию добавляется суффикс `@cert`. | ||
|
||
1. В блок `domains_config / security_config` добавить элемент `register_dynamic_node_allowed_sids`, в котором указать список субъектов доступа, для которых разрешена регистрация узлов баз данных. По техническим причинам в этом элементе также должен присутствовать субъект доступа `root@builtin`. Пример: | ||
|
||
```yaml | ||
domains_config: | ||
... | ||
security_config: | ||
enforce_user_token_requirement: true | ||
monitoring_allowed_sids: | ||
... | ||
administration_allowed_sids: | ||
... | ||
viewer_allowed_sids: | ||
... | ||
register_dynamic_node_allowed_sids: | ||
- "root@builtin" # требуется по техническим причинам | ||
- "registerNode@cert" | ||
``` | ||
|
||
1. В блоке `grpc_config` должны быть установлены параметры TLS-защиты трафика, а также обеспечена активация по умолчанию сервиса `legacy`, пример: | ||
|
||
```yaml | ||
grpc_config: | ||
ssl_port: 2135 | ||
cert: "/opt/ydb/certs/node.crt" | ||
key: "/opt/ydb/certs/node.key" | ||
ca: "/opt/ydb/certs/ca.crt" | ||
services_enabled: | ||
- legacy | ||
``` | ||
|
||
В приведенном выше фрагменте конфигурации установлен номер GRPCS-порта, имена файлов ключа и сертификата узла, а также имя файла сертификата используемого доверенного центра сертификации. | ||
|
||
В большинстве случаев номер порта и пути к файлам ключей и сертификатов переопределяется аргументами командной строки запуска сервиса YDB, пример: | ||
|
||
```bash | ||
/opt/ydb/bin/ydbd server --tcp --yaml-config /opt/ydb/cfg/ydbd-static.yaml \ | ||
--node static --grpcs-port 2135 --ic-port 19001 --mon-port 8765 \ | ||
--ca /opt/ydb/certs/ca.crt --cert /opt/ydb/certs/node.crt --key /opt/ydb/certs/node.key \ | ||
--grpc-ca /opt/ydb/certs/ca.crt --grpc-cert /opt/ydb/certs/node.crt --grpc-key /opt/ydb/certs/node.key \ | ||
--mon-cert /opt/ydb/certs/web.pem | ||
``` | ||
|
||
## Параметры запуска узлов баз данных | ||
|
||
После включения в кластере {{ ydb-short-name }} режима обязательной авторизации узлов при подключении узла базы данных будет требоваться подтверждение подлинности с помощью TLS-сертификата. | ||
|