From 3ad9f40c5e7f9369bcb1892170dde644574e0027 Mon Sep 17 00:00:00 2001 From: Ivan Chelyubeev Date: Mon, 27 Jan 2025 20:43:23 +0300 Subject: [PATCH] docs: add articles on cluster and database admins --- ydb/docs/ru/core/concepts/glossary.md | 2 +- .../core/security/configure-cluster-admins.md | 199 ++++++++++++++++++ .../security/configure-database-admins.md | 90 ++++++++ ydb/docs/ru/core/security/index.md | 4 +- ydb/docs/ru/core/security/toc_p.yaml | 7 + 5 files changed, 300 insertions(+), 2 deletions(-) create mode 100644 ydb/docs/ru/core/security/configure-cluster-admins.md create mode 100644 ydb/docs/ru/core/security/configure-database-admins.md diff --git a/ydb/docs/ru/core/concepts/glossary.md b/ydb/docs/ru/core/concepts/glossary.md index fa60455417d0..67ff0ad53b21 100644 --- a/ydb/docs/ru/core/concepts/glossary.md +++ b/ydb/docs/ru/core/concepts/glossary.md @@ -323,7 +323,7 @@ ### Владелец {#access-owner} -**[Владелец](../security/authorization.md#owner)** - [субъект доступа](#access-subject) ([пользователь](#access-user) или [группа](#access-group)) имеющий полный объем прав на конкретный [объект доступа](#access-object). +**[Владелец](../security/authorization.md#owner)** - [субъект доступа](#access-subject) ([пользователь](#access-user) или [группа](#access-group)), являющийся владельцем конкретного [объект доступа](#access-object) и потому имеющий полный объем прав на него. ### Пользователь {#access-user} diff --git a/ydb/docs/ru/core/security/configure-cluster-admins.md b/ydb/docs/ru/core/security/configure-cluster-admins.md new file mode 100644 index 000000000000..810660c98b7a --- /dev/null +++ b/ydb/docs/ru/core/security/configure-cluster-admins.md @@ -0,0 +1,199 @@ +# Администратор кластера + +Администратор кластера (администратор СУБД) -- это пользователь, обладающий максимальными административными возможностями как в рамках всего кластера, так и на уровне пользовательских баз данных. + +Администратор кластера может: + +- управлять пользователями и группами как уровня кластера, так и уровня отдельных баз (создание, удаление, изменение, блокировка) +- наделять пользователей возможностями администратора кластера +- наделять пользователей возможностями администратора отдельной базы +- управлять конфигурациями кластера и отдельных баз +- запускать и оставливать кластер +- управлять базами данных (создание, удаление, изменение, остановка, блокировка TODO: подробнее) +- а также выполнять любые другие административные действия с кластером и базами данных + +## Понятие администратора кластера в {{ ydb-short-name }} + +Администратором кластера является пользователь, который имеет административный [уровень доступа](../concepts/glossary.md#access-level) на кластере и полные [права доступа](../concepts/glossary.md#access-control-list) на корне кластера. + +[Уровни доступа](../concepts/glossary.md#access-level) настраиваются в конфигурации кластера, [секция `security_config`](../reference/configuration/index.md#security-access-levels). + +Права доступа назначаются на корень кластера средствами {{ ydb-short-name }}: YQL [командой `GRANT`](../yql/reference/syntax/grant.md) или CLI [командой `scheme permissions grant`](../reference/ydb-cli/commands/scheme-permissions.md#grant-revoke)). Список схемных прав доступа приведён в статье [{#T}](./access-rights.md). + +## Требуемая конфигурация {#cluster-admin-setup} + +1. На уровне кластера существует группа администраторов кластера. +2. Группа администраторов кластера включена в списки уровней доступа [ `viewer_allowed_sids`, `monitoring_allowed_sids`, `administration_allowed_sids`](../reference/configuration/index.md#security-access-levels). +3. Группе администраторов кластера на корне кластера выданы [права доступа `ydb.generic.full`](./access-rights.md). + +{% note info %} + +Обычно кластер управляется группой администраторов. Управлять кластером единственным [пользователем](../concepts/glossary.md#access-user)-администратором (или суперпользователем) ненадёжно и небезопасно. + +{% endnote %} + +## Инструкция общая {#setup-general} + +По умолчанию при первом запуске {{ ydb-short-name }} [автоматически создаёт](../security/builtin-security.md) суперпользователя `root`, определённый набор групп и необходимые им права на корне кластера. Такая автоматическая настройка называется [{#T}](../security/builtin-security.md). Если конкретная инсталляция требует реализации иной модели управления доступом на схеме, то следует отключить встроенную настройку безопасности ([флаг `disable_builtin_security`](../reference/configuration/index.md#domains-config)) и самостоятельно определить и собрать нужный набор групп и прав. + +Настоящая инструкция фокусируется на конфигурации группы администраторов кластера, и создание произвольной модели управления доступом здесь не рассматривается. + +Инструкция предполагает [обязательную аутентификацию](../reference/configuration/index.md#security-auth) пользователей. + +Для простоты, в инструкции используются те же имена пользователей и групп, что и в [инструкции со встроенной настройкой безопасности](#setup-over-builtin-security): + +- корень кластера `/Root` +- суперпользователь `root` +- группа администраторов кластера `ADMINS` +- администраторы кластера `cluster-admin-1`, `cluster-admin-2`, `cluster-admin-3` + +При настоящей настройке имена кластера, пользователей и групп могут быть другими. + +Создание и настройка администраторов кластера по шагам: + +1. Создать суперпользователя, группу администраторов кластера и наделить их административными правами. + + {% note warning %} + + Этот шаг выполняется до первого старта кластера, на [этапе подготовки конфигурационного файла](../devops/manual/initial-deployment.md#config). + + {% endnote %} + + [Конфигурационный файл](../reference/configuration/index.md) кластера, [секция `security_config`](../reference/configuration/index.md#security-config): + + ```yaml + domains_config: + ... + disable_builtin_security: true + security_config: + # режим обязательной аутентификации + enforce_user_token_requirement: true + + # пользователи, группы, права доступа + default_users: + - name: root + - password: "<пароль-суперпользователя>" + default_groups: + - name: ADMINS + - members: + - root + default_access: + - "+F:root" + - "+F:ADMINS" + + # уровни доступа + viewer_allowed_sids: + - root + - ADMINS + monitoring_allowed_sids: + - root + - ADMINS + administration_allowed_sids: + - root + - ADMINS + auth_config: + use_builtin_auth: false + ``` + + {% note info %} + + В режиме обязательной аутентификации важно описать суперпользователя и его права до первого старта кластера. Иначе кластер запустится в состоянии, когда его будет невозможно использовать. + + Прочие действия можно было бы выполнить от имени суперпользователя на уже работающем кластере, но тогда для распространения изменений могли бы потребоваться дополнительные рестарты кластера. + + {% endnote %} + +2. Запустить кластер + + Система безопасности кластера инициализируется в момент первого старта. + + TODO: сослаться на запуск кластера разными описанными в документации способами. Но непосредственно с данной инструкцией совместим только devops/manual/initial-deployment.md: ansible поддерживает, судя по описанию, только донастройку после, развёртывание в k8s вообще затрагивает вопросы безопасности. + +3. Передать владение корнем кластера группе администраторов кластера: + + ```bash + {{ ydb-cli }} --user root --no-password -d '/Root' scheme permissions chown /Root ADMINS + ``` + +4. Создать пользователей-будущих администраторов кластера + + Пусть, для примера, администраторами кластера должны быть пользователи `cluster-admin-1`, `cluster-admin-2`, `cluster-admin-3`. + + Тогда от имени пользователя `root` необходимо выполнить: + + [//]: # (TODO: сначала залогиниться, а потом с токеном уже делать остальные команды -- когда ydb login будет описана) + + [//]: # (TODO: а какой корень кластера по-умолчанию?) + + ```bash + {{ ydb-cli }} --user root --no-password -d '/Root' yql -s ' + CREATE USER `cluster-admin-1` PASSWORD `<пароль-1>`; + CREATE USER `cluster-admin-2` PASSWORD `<пароль-2>`; + CREATE USER `cluster-admin-3` PASSWORD `<пароль-3>` + ' + ``` + + (`<пароль-1>`, `<пароль-2>`, `<пароль-3>` -- места для подстановки строк настоящих паролей) + +5. Добавить пользователей в группу администраторов кластера: + + ```bash + {{ ydb-cli }} --user root --no-password -d '/Root' yql -s ' + ALTER GROUP `ADMINS` ADD + `cluster-admin-1`, + `cluster-admin-2`, + `cluster-admin-3` + ' + ``` + +После выполнения данной инструкции новые администраторы кластера способны выполнять любые административные операции с {{ ydb-short-name }}. + +Суперпользователь `root` был нужен для выполнения данной инструкции и при дальнейшем администрировании кластера его можно больше не использовать. + +[//]: # (TODO: возможно предложить блокировку root'а, когда блокировка локальных пользователей будет описана) + +## Инструкция со встроенной настройкой безопасности {#setup-over-builtin-security} + +По умолчанию при первом старте кластера {{ ydb-short-name }} [автоматически создаёт](../security/builtin-security.md) суперпользователя `root`, определённый набор групп и необходимые им права на корне кластера. Среди всех создаваемых по умолчанию групп, группы `ADMINS` и `DATABASE-ADMINS` предназначены для администраторов кластера. + +[//]: # (TODO: привести или сослаться на конфигурацию security_config, эквивалентную встроенной настройке) + +Чтобы `root` и группы `ADMINS` и `DATABASE-ADMINS` выполняли своё предназначение, их необходимо наделить административным [уровнем доступа](../concepts/glossary.md#access-level). + +Инструкция предполагает [обязательную аутентификацию](../reference/configuration/index.md#security-auth) пользователей. + +Настройка администраторов кластера по шагам: + +1. Наделить административными правами суперпользователя `root` и группы `ADMINS`, `DATABASE-ADMINS`. + + {% note warning %} + + До первого старта кластера, на [этапе подготовки конфигурационного файла](../devops/manual/initial-deployment.md#config). + + {% endnote %} + + [Конфигурационный файл](../reference/configuration/index.md) кластера, [секция `security_config`](../reference/configuration/index.md#security-config): + + ```yaml + domains_config: + ... + security_config: + # режим обязательной аутентификации + enforce_user_token_requirement: true + + # уровни доступа + viewer_allowed_sids: + - root + - ADMINS + - DATABASE-ADMINS + monitoring_allowed_sids: + - root + - ADMINS + - DATABASE-ADMINS + administration_allowed_sids: + - root + - ADMINS + - DATABASE-ADMINS + ``` + +Далее продолжать по шагам 2-5 [общей инструкции](#setup-general). diff --git a/ydb/docs/ru/core/security/configure-database-admins.md b/ydb/docs/ru/core/security/configure-database-admins.md new file mode 100644 index 000000000000..2a732289fff8 --- /dev/null +++ b/ydb/docs/ru/core/security/configure-database-admins.md @@ -0,0 +1,90 @@ +# Администратор базы данных + +Администратор базы данных (БД) -- это пользователь, обладающий административными возможностями в рамках некоторой базы данных: + +Администратор базы может: + +- управлять пользователями и группами базы (создание, удаление, изменение, блокировка) +- управлять правами доступа пользователей к объектам базы данных +- управлять конфигурацией базы +- выполнять бекап и восстановление базы +- выполнять прочие административными действия в пределах базы + +Администратор базы не может: + +- управлять учетными записями администраторов кластера или пользователей других баз +- создавать других администраторов базы (TODO: как это?) +- управлять конфигурацией кластера или других баз +- управлять правами на объектах выше уровня базы или в других базах + +## Понятие администратора базы данных в {{ ydb-short-name }} + +Администратором базы данных является пользователь, который является [владельцем](../concepts/glossary.md#access-owner) базы данных. + +База данных определяется своим путём в схеме кластера -- корень базы, владельцем базы является [SID](../concepts/glossary.md#access-sid), которому принадлежит путь корня базы данных. + +## Требуемая конфигурация {#database-admin-setup} + +1. На уровне базы существует группа администраторов базы данных. +2. Группа администраторов базы данных является владельцем корня базы данных. + +{% note info %} + +Обычно база данных управляется группой администраторов базы. Управлять базой единственным [пользователем](../concepts/glossary.md#access-user)-администратором базы или администраторами кластера неудобно. + +{% endnote %} + +## Инструкция + +Пусть для примера: + +- путь базы данных -- `/Root/example-db`; +- группа администраторов базы данных -- `DB-ADMINS`; +- администраторы базы данных -- пользователи `db-admin-1`, `db-admin-2`, `db-admin-3`. + +На настоящем кластере имена могут быть другими. + +Создаёт и запускает базу данных [администратор кластера](./configure-cluster-admins.md), он же настраивает администраторов базы данных. + +Создание и настройка администраторов базы данных по шагам: + +1. Создать базу данных + + TODO: См. devops/manual/initial-deployment.md или ansible-install-steps.md. + + После создания владельцем базы данных `/Root/db` будет создавший её администратор кластера. + +2. Запустить базу данных + + TODO: Сослаться на запуск нод базы разными описанными в документации способами. + +3. Создать в базе группу администраторов базы + + ```bash + {{ ydb-cli }} --user cluster-admin-1 --password `<пароль>` -d '/Root/example-db' yql -s ' + CREATE USER `db-admin-1` PASSWORD `<пароль-1>`; + CREATE USER `db-admin-2` PASSWORD `<пароль-2>`; + CREATE USER `db-admin-3` PASSWORD `<пароль-3>`; + ' + ``` + + (`<пароль-1>`, `<пароль-2>`, `<пароль-3>` -- места для подстановки строк настоящих паролей) + +4. Добавить пользователей в группу администраторов базы + + ```bash + {{ ydb-cli }} --user cluster-admin-1 --password `<пароль>` -d '/Root/example-db' yql -s ' + ALTER GROUP `DB-ADMINS` ADD + `db-admin-1`, + `db-admin-2`, + `db-admin-3` + ' + ``` + +5. Передать владение базой группе администраторов базы: + + ```bash + {{ ydb-cli }} --user cluster-admin-1 --password `<пароль>` -d '/Root/example-db' scheme permissions chown `/Root/example-db` DB-ADMINS + ``` + +После выполнения данной инструкции новые администраторы базы данных способны выполнять административные операции со своей базой. diff --git a/ydb/docs/ru/core/security/index.md b/ydb/docs/ru/core/security/index.md index f26ec065cace..039faa470b8c 100644 --- a/ydb/docs/ru/core/security/index.md +++ b/ydb/docs/ru/core/security/index.md @@ -1,12 +1,14 @@ # {{ ydb-short-name }} для инженеров по безопасности -В этом разделе документации {{ ydb-short-name }} рассматриваются аспекты работы с {{ ydb-short-name }}, связанные с безопасностью. Также он будет полезнен для целей обеспечения compliance. +В этом разделе документации {{ ydb-short-name }} рассматриваются аспекты работы с {{ ydb-short-name }}, связанные с безопасностью. Также он будет полезен для целей обеспечения compliance. Основные материалы: - [{#T}](authentication.md) - [{#T}](authorization.md) - [{#T}](builtin-security.md) +- [{#T}](configure-cluster-admins.md) +- [{#T}](configure-database-admins.md) - [{#T}](audit-log.md) - [{#T}](access-rights.md) - [{#T}](short-access-control-notation.md) diff --git a/ydb/docs/ru/core/security/toc_p.yaml b/ydb/docs/ru/core/security/toc_p.yaml index 801e640189ae..b14e2e062b78 100644 --- a/ydb/docs/ru/core/security/toc_p.yaml +++ b/ydb/docs/ru/core/security/toc_p.yaml @@ -5,6 +5,13 @@ items: href: authorization.md - name: Встроенная настройка безопасности href: builtin-security.md +- name: Привилегированные пользователи + expanded: true + items: + - name: Администратор кластера + href: configure-cluster-admins.md + - name: Администратор баз данных + href: configure-database-admins.md - name: Права доступа expanded: true items: