-
Notifications
You must be signed in to change notification settings - Fork 604
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
docs: add articles on cluster and database admins
- Loading branch information
Showing
5 changed files
with
300 additions
and
2 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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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). |
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,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 | ||
``` | ||
|
||
После выполнения данной инструкции новые администраторы базы данных способны выполнять административные операции со своей базой. |
Oops, something went wrong.