Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

docs: add security settings and builtin security reference #13319

Open
wants to merge 37 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from 16 commits
Commits
Show all changes
37 commits
Select commit Hold shift + click to select a range
d34f99e
docs: add security settings and builtin security reference
ijon Jan 10, 2025
ddf6eed
update due to review comments
ijon Jan 15, 2025
802086d
Update ydb/docs/ru/core/reference/configuration/index.md
ijon Jan 15, 2025
0ac6879
fixup
ijon Jan 15, 2025
1010946
fixup
ijon Jan 16, 2025
5719d66
fixup: add ConnectDatabase for USERS
ijon Jan 16, 2025
aab402a
fixup: add direct link to disable_builtin_security
ijon Jan 16, 2025
b38f26d
fixup
ijon Jan 16, 2025
b105adf
revert: links to direct achors work incorrectly
ijon Jan 16, 2025
8ea4022
fixup: review comments
ijon Jan 16, 2025
f863b9a
fuse after rebase
ijon Jan 17, 2025
f2baf54
fixup
ijon Jan 17, 2025
9816673
fixup
ijon Jan 17, 2025
d76f100
Update ydb/docs/ru/core/security/builtin-security.md
ijon Jan 20, 2025
0e321d2
Update ydb/docs/ru/core/security/builtin-security.md
ijon Jan 20, 2025
e907708
fixup: touch up ldap auth
ijon Jan 20, 2025
0c50ccb
Update ydb/docs/ru/core/changelog-server.md
ijon Jan 21, 2025
8110d97
Update ydb/docs/ru/core/concepts/glossary.md
ijon Jan 21, 2025
951ace1
Update ydb/docs/ru/core/concepts/glossary.md
ijon Jan 21, 2025
beccbc2
Update ydb/docs/ru/core/concepts/glossary.md
ijon Jan 21, 2025
021dd6f
Update ydb/docs/ru/core/reference/configuration/index.md
ijon Jan 21, 2025
0276037
Update ydb/docs/ru/core/reference/configuration/index.md
ijon Jan 21, 2025
328fb46
Update ydb/docs/ru/core/reference/configuration/index.md
ijon Jan 21, 2025
ff8f8e0
Update ydb/docs/ru/core/reference/configuration/index.md
ijon Jan 21, 2025
f51c846
Update ydb/docs/ru/core/reference/configuration/index.md
ijon Jan 21, 2025
ccd9d07
Update ydb/docs/ru/core/reference/configuration/index.md
ijon Jan 21, 2025
4b8e0af
Update ydb/docs/ru/core/reference/configuration/index.md
ijon Jan 21, 2025
e5115b7
Update ydb/docs/ru/core/reference/configuration/index.md
ijon Jan 21, 2025
2696e83
Update ydb/docs/ru/core/reference/configuration/index.md
ijon Jan 21, 2025
f6e3ef3
Update ydb/docs/ru/core/reference/configuration/index.md
ijon Jan 21, 2025
e29a849
Update ydb/docs/ru/core/reference/configuration/index.md
ijon Jan 21, 2025
1588fae
Update ydb/docs/ru/core/reference/configuration/index.md
ijon Jan 22, 2025
7576c0d
Update ydb/docs/ru/core/reference/configuration/index.md
ijon Jan 22, 2025
862fc24
Update ydb/docs/ru/core/security/builtin-security.md
ijon Jan 22, 2025
b6f6004
Update ydb/docs/ru/core/security/builtin-security.md
ijon Jan 22, 2025
b600c3c
fixup: review comments
ijon Jan 23, 2025
db5014a
Merge branch 'main' into docs-security-config
ijon Jan 23, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
56 changes: 56 additions & 0 deletions ydb/docs/ru/core/_includes/builtin-groups-graph.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
```mermaid
---
config:
layout: elk
elk:
mergeEdges: true
nodePlacementStrategy: NETWORK_SIMPLEX
---
graph BT

DATA-WRITERS & DATABASE-ADMINS --> ADMINS
DDL-ADMINS & ACCESS-ADMINS --> DATABASE-ADMINS
DATA-READERS --> DATA-WRITERS
METADATA-READERS --> DATA-READERS & DDL-ADMINS
%%USERS --> METADATA-READERS & DATA-READERS & DATA-WRITERS & DDL-ADMINS & ACCESS-ADMINS & DATABASE-ADMINS & ADMINS
USERS --> METADATA-READERS & DDL-ADMINS & ACCESS-ADMINS

DATA-READERS["<b>DATA-READERS</b>
+SelectRow"
]

DATA-WRITERS["<b>DATA-WRITERS</b>
+UpdateRow
+EraseRow"
]

METADATA-READERS["<b>METADATA-READERS</b>
+DescribeSchema
+ReadAttributes"
]

DATABASE-ADMINS["<b>DATABASE-ADMINS</b>
+CreateDatabase
+DropDatabase"
]

ACCESS-ADMINS["<b>ACCESS-ADMINS</b>
+GrantAccessRights"
]

DDL-ADMINS["<b>DDL-ADMINS</b>
+CreateDirectory
+CreateTable
+CreateQueue
+WriteAttributes
+AlterSchema
+RemoveSchema"
]

USERS[<b>USERS</b>
+ConnectDatabase
]
ADMINS[<b>ADMINS</b>]
```

[//]: # (diplodoc support for mermaid lacks support for markdown in labels)
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,6 @@
Область действия команд `CREATE USER`, `ALTER USER`, `DROP USER` не распространяется на внешние каталоги пользователей.
Учитывайте это, если к {{ ydb-short-name }} подключаются пользователи со сторонней аутентификацией (например, LDAP).
Например, команда `CREATE USER` не создаст пользователя в LDAP-каталоге.
Подробнее про [взаимодействие {{ ydb-short-name }} с LDAP-каталогом](../security/authentication.md#ldap-auth-provider).
Подробнее про [взаимодействие {{ ydb-short-name }} с LDAP-каталогом](../security/authentication.md#ldap).

{% endnote %}
2 changes: 1 addition & 1 deletion ydb/docs/ru/core/changelog-server.md
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,7 @@

* Добавлена возможность [задать приоритеты](./devops/manual/maintenance-without-downtime#priority) задачам обслуживания в [системе управления кластером](./concepts/glossary#cms).
* Добавлена [настройка стабильных имён](./reference/configuration/#node-broker-config) для узлов кластера в рамках тенанта.
* Добавлено получение вложенных групп от [LDAP-сервера](./concepts/auth#ldap-auth-provider), в [LDAP-конфигурации](./reference/configuration/#ldap-auth-config) улучшен парсинг хостов и добавлена настройка для отключения встроенной аутентификацию по логину и паролю.
* Добавлено получение вложенных групп от [LDAP-сервера](./concepts/auth#ldap), в [LDAP-конфигурации](./reference/configuration/#ldap-auth-config) улучшен парсинг хостов и добавлена настройка для отключения встроенной аутентификацию по логину и паролю.
ijon marked this conversation as resolved.
Show resolved Hide resolved
* Добавлена возможность аутентификации [динамических узлов](./concepts/glossary#dynamic) по SSL-сертификату.
* Реализовано удаление неактивных узлов из [Hive](./concepts/glossary#hive) без его перезапуска.
* Улучшено управление inflight pings при перезапуске Hive в кластерах большого размера.
Expand Down
47 changes: 39 additions & 8 deletions ydb/docs/ru/core/concepts/glossary.md
Original file line number Diff line number Diff line change
Expand Up @@ -269,6 +269,12 @@

**Секрет** или **secret** — это конфиденциальные метаданные, требующие особого обращения. Например, секреты могут использоваться в определениях [внешних источников данных](#external-data-source) и представляют собой такие сущности, как пароли и токены.

### Аутентификационный токен {#auth-token}

**Аутентификационный токен** или **auth token** — токен, используемый для [аутентификации](../security/authentication.md) в {{ ydb-short-name }}.

{{ ydb-short-name }} поддерживает [разные виды аутентификации](../security/authentication.md) и разные типы токенов.
ijon marked this conversation as resolved.
Show resolved Hide resolved

### Объект схемы {#scheme-object}

Схема базы данных состоит из **схемных объектов** или **объектов схемы**, которыми могут быть базы данных, [таблицы](#table) (включая [внешние таблицы](#external-table)), [топики](#topic), [папки](#folder) и т.д.
Expand All @@ -284,21 +290,36 @@
### Объект доступа {#access-object}

**Объект доступа** или **access object** при [авторизации](../security/authorization.md) — сущность, для которой настраиваются права и ограничения доступа. В {{ ydb-short-name }} объектами доступа являются [объекты схемы](#scheme-object).
У каждого объекта доступа есть [владелец](#access-owner) и [список разрешений](#access-control-list).

У каждого [объекта схемы](#scheme-object) есть [владелец](#access-owner) и [список прав](#access-control-list) на этот объект, выданных пользователям и группам ([субъектам доступа](#access-subject)).
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
У каждого [объекта схемы](#scheme-object) есть [владелец](#access-owner) и [список прав](#access-control-list) на этот объект, выданных пользователям и группам ([субъектам доступа](#access-subject)).
У каждого [объекта схемы](#scheme-object) есть [владелец](#access-owner) и [список прав](#access-control-list) на этот объект, выданных [субъектам доступа](#access-subject) ([пользователям](#access-user) и [группам](#access-group)).

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Не согласен: объект доступа и субъект доступа это абстракции, абстракции должны быть связаны друг с другом, но правильнее и удобнее для читателя, когда абстрактные понятия объясняются через простые вещи, а не через друг друга.

Порядок "пользователь (то есть субъект)" лучше чем "субъект (то есть пользователь)".


### Субъект доступа {#access-subject}

**Субъект доступа** или **access subject** — сущность, которая может обращаться к [объектам доступа](#access-object) или выполнять определённые действия в системе. Получение доступа при этих обращениях и действиях зависит от настроенных [списков разрешений](#access-control-list).
**Субъект доступа** или **access subject** — сущность, которая может обращаться к [объектам доступа](#access-object) и выполнять определённые действия в системе.

Получение доступа при этих обращениях и действиях зависит от настроенных [списков прав](#access-control-list) и [уровня доступа](#access-level) субъекта.

Субъектом доступа может быть [пользователь](#access-user) или [группа](#access-group).

### Право доступа {#access-right}
### Право {#access-right}

**[Право доступа](../security/authorization.md#right)** или **access right** — сущность, отражающая разрешение [субъекту доступа](#access-subject) выполнять конкретный набор операций в кластере или базе данных над конкретным [объектом доступа](#access-object).
ijon marked this conversation as resolved.
Show resolved Hide resolved

### Список прав {#access-control-list}

**[Список прав](../security/authorization.md#right)**, **access control list** или **ACL** — список всех [прав](#access-right), предоставленных [субъектам доступа](#access-subject) (пользователям и группам) на конкретный [объект доступа](#access-object).

**[Право доступа](../security/authorization.md#right)** или **access right** — сущность, отражающая разрешение [субъекту доступа](#access-subject) выполнять конкретный набор операций в кластере или базе данных над конкретным [объектом доступа](#access-object).
### Уровень доступа {#access-level}

### Список разрешений {#access-control-list}
**[Уровень доступа](../security/authorization.md#level)** — состояние, определяющее дополнительные возможности [субъекта доступа](#access-subject) при работе с [объектами схемы](#scheme-object), а также возможности [субъекта доступа](#access-subject) в контекстах, не связанных с [объектами схемы](#scheme-object).
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

  1. Почему «при работе с объектами схемы», а не «объектами доступа»?
  2. Нужны примеры или полный список дополнительных возможностей, иначе в чём разница с access right не понятно. А лучше это прямым текстом объяснить в духе «В отличии от прав доступа...».

Copy link
Collaborator Author

@ijon ijon Jan 21, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

  1. Права доступа имеют смысл только для схемных объектов. Выше объект доступа определяется через схемный объект, но вообще говоря это слишком узко. В системе, кроме схемных объектов, ещё полно мест, которые не связаны со схемой, и доступ куда контролируется. Их тоже вообще-то можно было бы назвать "объектами доступа".
    Поэтому я специально пишу здесь про "контексты, не связанные со схемой" -- так меньше недоумения, чем если бы были объекты доступа.

Copy link
Collaborator Author

@ijon ijon Jan 21, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

  1. В словаре примеры не обязательны. Ссылка с Уровня доступа должна вести на статью, где уровни доступа объясняются. В конечном счёте это должна быть security/authorization.md, но в момент создания pr её ещё не было и уровни доступа описываются в reference/configuration/index.md##security-access-levels. Я сделал rebase своего pr на Сашин и "сшил" материалы новыми терминами и ссылками. Цели сделать полное слияние за один раз нет, будут follow-ups и следующие итерации.

Перечисление "других возможностей" для разных уровней доступа -- тоже follow-up, [YDBDOCS-986: Справка по возможностям, добавляемым каждым *_allowed_sids].


**Список разрешений**, **access control list** или **ACL** — список всех [прав](#access-right), предоставленных [субъектам доступа](#access-subject) (пользователям и группам) на конкретный [объект доступа](#access-object).
Уровень доступа определяется принадлежностью субъекта к [спискам разрешений](#access-level-list).
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Уровень доступа определяется принадлежностью субъекта к [спискам разрешений](#access-level-list).
Уровень доступа определяется принадлежностью субъекта к [спискам уровней доступа](#access-level-list).

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Нет, в pr делается усилие, чтобы, насколько возможно, термин права доступа закрепить за ACL на схемных объектах, а термины разрешения и возможности -- за уровнями доступа. Специально, чтобы уменьшить путаницу (до нуля всё равно не получится).

Будет хорошо, есть появятся ещё мысли по терминам. Но разводить разное по разным терминам -- надо.


### Список уровня доступа {#access-level-list}

**Список уровня доступа** или **список разрешений** — список [SID](#access-sid)'ов [субъектов доступа](#access-subject), которым разрешён определённый [уровень доступа](#access-level).

{{ ydb-short-name }} имеет несколько [списков уровней доступа](../reference/configuration/index.md#security-access-levels), совместно определяющих набор [уровней доступа](#access-level) в системе.

### Владелец {#access-owner}

Expand All @@ -308,13 +329,23 @@

**[Пользователь](../security/authorization.md#user)** - лицо, использующее {{ ydb-short-name }} для выполнения конкретной функции.

Пользователь идентифицируется [SID](#access-sid).

### Группа {#access-group}

**[Группа](../security/authorization.md#group)** или **группа доступа** - именованное множество [пользователей](#access-user) с одинаковыми [правами доступа](#access-right) к тем или иным [объектам доступа](#access-object).
**[Группа](../security/authorization.md#group)** или **группа доступа** - именованное множество [пользователей](#access-user) и других групп с равными возможностями для своих членов.

Группа идентифицируется [SID](#access-sid).

### SID {#access-sid}

**SID** (**Security Identifier**) - строка вида `<login>[@<subsystem>]`, идентифицирующая [субъект доступа](../concepts/glossary.md#access-subject) в [списках разрешений](#access-control-list).
**SID** (**Security Identifier**) - строка вида `<name>[@<auth-domain>]`, идентифицирующая [субъект доступа](../concepts/glossary.md#access-subject). Используется при аутентификации, авторизации, в [списках прав](#access-control-list) и в [списках уровней доступа](#access-level-list).

SID идентифицирует индивидуального [пользователя](#access-user) или пользовательскую [группу](#access-group).

Суффикс `@<auth-domain>` идентифицирует «источник пользователя», то есть каталог или систему, откуда пользователь пришёл. Например, пользователи или группы из LDAP-каталога могут иметь суффикс `@ldap`.

Отсутствие суффикса означает, что пользователь или группа созданы и существуют непосредственно в {{ ydb-short-name }}.
ijon marked this conversation as resolved.
Show resolved Hide resolved
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

В других текстах упоминался суффикс @builtin — это синоним к отсутствию суффикса или отличается? Возможно стоит тут про него пару слов сказать.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

А ниже ещё @well-known есть.

Copy link
Collaborator Author

@ijon ijon Jan 21, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@builtin не синоним отсутствию суффикса: нет суффикса -- это реальный локальный пользователь (который должен логиниться и предоставлять в запросах auth-токен), а любая строка с @builtin -- виртуальный пользователь, чья аутентификация будет всегда успешна.

Рассказ про @builtin -- тоже follow-up, и в дополнение [YDBDOCS-991: Справка по секции конфигурации auth_config], где есть настройка про отключение @builtin.

Рассказ про возможные суффиксы (их же ещё и из конфига можно менять!) -- тоже follow-up, где-то в районе [YDBDOCS-979: Описание модели управления доступом].


### Оптимизатор запросов {#optimizer}

Expand Down
2 changes: 1 addition & 1 deletion ydb/docs/ru/core/devops/manual/initial-deployment.md
Original file line number Diff line number Diff line change
Expand Up @@ -484,7 +484,7 @@ sudo chmod 700 /opt/ydb/certs

Если в файле настроек кластера включен режим аутентификации, то перед началом работы с кластером {{ ydb-short-name }} необходимо выполнить первоначальную настройку учетных записей.

При первоначальной установке кластера {{ ydb-short-name }} автоматически создается учетная запись `root` с пустым паролем, а также стандартный набор групп пользователей, описанный в разделе [{#T}](../../yql/reference/syntax/alter-group.md#builtin).
При первоначальной установке кластера {{ ydb-short-name }} автоматически создается учетная запись `root` с пустым паролем, а также стандартный набор групп пользователей, описанный в разделе [{#T}](../../security/builtin-security.md).

Для выполнения первоначальной настройки учетных записей в созданном кластере {{ ydb-short-name }} выполните следующие операции:
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Звучит как-будто «первоначальная настройка» уже произошла выше автоматически, а тут скорее какая-то дополнительная настройка т.к. builtin security почему-то не умеет сама пароль для root устанавливать.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Я намеренно не трогаю initial-deployment.md, это follow-up.

Кусок про настройку безопасности там конечно надо подтягивать.
Builtin security создаёт root без пароля, да. Хотя доп.настройками (обоими default_users) можно было бы добиться, чтобы суперпользователь был с нужным паролем. Но тогда это уже будет полу-builtin настройка безопасности.


Expand Down
Loading
Loading