Skip to content

Commit

Permalink
docs: add articles on cluster and database admins
Browse files Browse the repository at this point in the history
  • Loading branch information
ijon committed Jan 28, 2025
1 parent ed1f4fe commit 8af5977
Show file tree
Hide file tree
Showing 5 changed files with 300 additions and 2 deletions.
2 changes: 1 addition & 1 deletion ydb/docs/ru/core/concepts/glossary.md
Original file line number Diff line number Diff line change
Expand Up @@ -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}

Expand Down
199 changes: 199 additions & 0 deletions ydb/docs/ru/core/security/configure-cluster-admins.md
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).
90 changes: 90 additions & 0 deletions ydb/docs/ru/core/security/configure-database-admins.md
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
```

После выполнения данной инструкции новые администраторы базы данных способны выполнять административные операции со своей базой.
Loading

0 comments on commit 8af5977

Please sign in to comment.