From 74a1017e52f95cc3a97aa4a70820c85ab3caa17a Mon Sep 17 00:00:00 2001 From: Ivan Chelyubeev Date: Fri, 10 Jan 2025 15:04:31 +0300 Subject: [PATCH] docs: add security settings and builtin security reference --- ydb/docs/ru/core/_assets/groups.svg | 3 - .../ru/core/_includes/builtin-groups-graph.md | 48 ++++ .../ru/core/reference/configuration/index.md | 269 +++++++++++++++--- .../ru/core/security/access-management.md | 21 -- ydb/docs/ru/core/security/builtin-security.md | 56 ++++ ydb/docs/ru/core/security/index.md | 3 +- ydb/docs/ru/core/security/toc_p.yaml | 2 + 7 files changed, 335 insertions(+), 67 deletions(-) delete mode 100644 ydb/docs/ru/core/_assets/groups.svg create mode 100644 ydb/docs/ru/core/_includes/builtin-groups-graph.md create mode 100644 ydb/docs/ru/core/security/builtin-security.md diff --git a/ydb/docs/ru/core/_assets/groups.svg b/ydb/docs/ru/core/_assets/groups.svg deleted file mode 100644 index cb8c96f20719..000000000000 --- a/ydb/docs/ru/core/_assets/groups.svg +++ /dev/null @@ -1,3 +0,0 @@ - - -
ADMINS
ADMINS
DATABASE-ADMINS
DATABASE-ADMINS
ACCESS-ADMINS
ACCESS-ADMINS
DDL-ADMINS
DDL-ADMINS
DATA-WRITERS
DATA-WRITERS
DATA-READERS
DATA-READERS
METADATA-READERS
METADATA-READERS
USERS
USERS
Viewer does not support full SVG 1.1
\ No newline at end of file diff --git a/ydb/docs/ru/core/_includes/builtin-groups-graph.md b/ydb/docs/ru/core/_includes/builtin-groups-graph.md new file mode 100644 index 000000000000..d8f66e0fd5b6 --- /dev/null +++ b/ydb/docs/ru/core/_includes/builtin-groups-graph.md @@ -0,0 +1,48 @@ +```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["DATA-READERS + +SelectRow"] + + DATA-WRITERS["DATA-WRITERS + +UpdateRow + +EraseRow"] + + METADATA-READERS["METADATA-READERS + +DescribeSchema + +ReadAttributes"] + + DATABASE-ADMINS["DATABASE-ADMINS + +CreateDatabase + +DropDatabase"] + + ACCESS-ADMINS["ACCESS-ADMINS + +GrantAccessRights"] + + DDL-ADMINS["DDL-ADMINS + +CreateDirectory + +CreateTable + +CreateQueue + +WriteAttributes + +AlterSchema + +RemoveSchema"] + + USERS[USERS] + ADMINS[ADMINS] +``` + +[//]: # (diplodoc support for mermaid lacks support for markdown in labels) diff --git a/ydb/docs/ru/core/reference/configuration/index.md b/ydb/docs/ru/core/reference/configuration/index.md index a92adbc7ee56..a86859e82bdf 100644 --- a/ydb/docs/ru/core/reference/configuration/index.md +++ b/ydb/docs/ru/core/reference/configuration/index.md @@ -125,20 +125,47 @@ hosts: ## domains_config — домен кластера {#domains-config} -Данный раздел содержит конфигурацию корневого домена кластера {{ ydb-short-name }}, включая [конфигурации Blob Storage](#domains-blob) (хранилища бинарных объектов), [State Storage](#domains-state) (хранилища состояний) и [аутентификации](#auth). - -### Синтаксис +Данный раздел содержит конфигурацию кластера {{ ydb-short-name }}, включая [конфигурации Blob Storage](#domains-blob) (хранилища бинарных объектов), [State Storage](#domains-state) (хранилища состояний) и [настройки безопасности](#security). ``` yaml domains_config: domain: - - name: <имя корневого домена> + - name: <имя корня кластера> storage_pool_types: <конфигурация Blob Storage> state_storage: <конфигурация State Storage> - security_config: <конфигурация аутентификации> + disable_builtin_security: false + default_groups: false + default_access: false + security_config: <конфигурация безопасности> ``` -## Конфигурация Blob Storage {#domains-blob} +{% note info %} + +Формально, поле `domain` может содержать много элементов (это список), но имеет значение только первый элемент, остальные будут проигнорированы (в кластере может быть только один "домен"). + +{% endnote %} + +#| +|| Параметр | Описание || +|| `disable_builtin_security` | Не выполнять ["встроенные" настройки безопасности](../../security/builtin-security.md). +"Встроенная" настройка включает автоматическое создание суперпользователя `root`, набора "встроенных" пользовательских групп и выдачу прав доступа этим группам на корне кластера. + +Эфемерный флаг, не попадает в конфигурацию, сохраняемую в кластере. + +Значение по-умолчанию: `false`. + || +|| `default_groups` | Отказаться от создания ["встроенных" групп](../../security/builtin-security.md), даже если явные группы по-умолчанию ([`security_config.default_groups`](#security)) не заданы. + +Значение по-умолчанию: `false` + || +|| `default_access` | Отказаться от добавления прав на корне кластера для ["встроенных" групп](../../security/builtin-security.md), даже если явные права по-умолчанию ([`security_config.default_access`](#security)) не заданы. + +Значение по-умолчанию: `false` + || +|# + + +### Конфигурация Blob Storage {#domains-blob} Данный раздел определяет один или более типов пулов хранения, доступных в кластере для данных в базах данных, со следующими возможностями конфигурации: @@ -155,27 +182,27 @@ domains_config: `block-4-2` | Избыточность с коэффициентом 1,5, применяется для однодатацентровых кластеров. `mirror-3-dc` | Избыточность с коэффициентом 3, применяется для мультидатацентровых кластеров. -### Синтаксис - ``` yaml - storage_pool_types: - - kind: <имя пула хранения> - pool_config: - box_id: 1 - encryption: <опциональный, укажите 1 для шифрования данных на диске> - erasure_species: <имя режима отказоустойчивости - none, block-4-2, or mirror-3-dc> - kind: <имя пула хранения - укажите то же значение, что выше> - pdisk_filter: - - property: - - type: <тип устройства для сопоставления с указанным в host_configs.drive.type> - vdisk_kind: Default - - kind: <имя пула хранения> - # ... +domains_config: + domain: + ... + storage_pool_types: + - kind: <имя пула хранения> + pool_config: + box_id: 1 + encryption: <опциональный, укажите 1 для шифрования данных на диске> + erasure_species: <имя режима отказоустойчивости - none, block-4-2, or mirror-3-dc> + kind: <имя пула хранения - укажите то же значение, что выше> + pdisk_filter: + - property: + - type: <тип устройства для сопоставления с указанным в host_configs.drive.type> + vdisk_kind: Default + - kind: <имя пула хранения> ``` Каждой базе данных в кластере назначается как минимум один из доступных пулов хранения, выбираемый в операции создания базы данных. Имена пулов хранения среди назначенных могут быть использованы в атрибуте `DATA` при определении групп колонок в операторах YQL [`CREATE TABLE`](../../yql/reference/syntax/create_table/family.md)/[`ALTER TABLE`](../../yql/reference/syntax/alter_table/family.md). -## Конфигурация State Storage {#domains-state} +### Конфигурация State Storage {#domains-state} State Storage (хранилище состояний) — это независимое хранилище в памяти для изменяемых данных, поддерживающее внутренние процессы {{ ydb-short-name }}. Оно хранит реплики данных на множестве назначенных узлов. @@ -193,37 +220,195 @@ State Storage (хранилище состояний) — это независ При развертывании State Storage на кластерах, в которых применяется несколько пулов хранения с возможным сочетанием режимов отказоустойчивости, рассмотрите возможность увеличения количества узлов с распространением их на разные пулы хранения, так как недоступность State Storage приводит к недоступности всего кластера. -### Синтаксис - ```yaml -state_storage: -- ring: - node: <массив узлов StateStorage> - nto_select: <количество реплик данных в StateStorage> - ssid: 1 +domains_config: + ... + state_storage: + - ring: + node: <массив узлов StateStorage> + nto_select: <количество реплик данных в StateStorage> + ssid: 1 ``` Каждый клиент State Storage (например, таблетка DataShard) использует `nto_select` узлов для записи копий его данных в State Storage. Если State Storage состоит из большего количества узлов чем `nto_select`, то разные узлы могут быть использованы для разных клиентов, поэтому необходимо обеспечить, чтобы любое подмножество из `nto_select` узлов в пределах State Storage отвечало критериям отказоустойчивости. Для `nto_select` должны использоваться нечетные числа, так как использование четных чисел не улучшает отказоустойчивость по сравнению с ближайшим меньшим нечетным числом. -## Конфигурация аутентификации {#auth} +### Конфигурация безопасности {#security} -[Режим аутентификации](../../concepts/auth.md) на кластере {{ ydb-short-name }} задается в разделе `domains_config.security_config`. - -### Синтаксис +В разделе `domains_config.security_config` задаются режимы аутентификации, первичная конфигурация (локальных) пользователей и групп и их права. ```yaml domains_config: ... security_config: - enforce_user_token_requirement: Bool - ... + # настройка режима аутентификации + enforce_user_token_requirement: false + enforce_user_token_check_requirement: false + default_user_sids: <аутентификационный токен для анонимных запросов> + all_authenticated_users: <имя группы всех аутентифицированных пользователей> + all_users_group: <имя группы всех пользователей> + + # первичные настройки безопасности + default_users: <список пользователей по-умолчанию> + default_groups: <список групп по-умолчанию> + default_access: <список прав по-умолчанию на корне кластера> + + # настройки привилегий + viewer_allowed_sids: <список SID'ов с правами просмотра состояния кластера> + monitoring_allowed_sids: <список SID'ов с правами просмотра и изменения состояния кластера> + administration_allowed_sids: <список SID'ов с доступом администратора кластера> ``` -Ключ | Описание ---- | --- -`enforce_user_token_requirement` | Требовать токен пользователя.
Допустимые значения:
+[//]: # (TODO: wait for pull/9387, dinamic_node_registration to add info about "register_dynamic_node_allowed_sids: <список SID'ов с правами подключения динамических нод в кластер>") + +#### Настройки режима аутентификации + +#| +|| Параметр | Описание || +|| `enforce_user_token_requirement` | Режим обязательной аутентификации. + +- `true` — аутентификация обязательна, запросы к {{ ydb-short-name }} обязаны сопровождаться аутентификационным токеном +- `false` — аутентификация опциональна, запросы могут не сопровождаться аутентификационным токеном + +Если входящий запрос приходит без токена, то в качестве токена будет использоваться `default_user_sids`, если он не пустой. +Токен (или `default_user_sids`) будет проверяться даже при `enforce_user_token_requirement: false`, если `enforce_user_token_check_requirement: true`. + +Значение по-умолчанию: `false`. + || +|| `enforce_user_token_check_requirement` | Проверять аутентификационный токен (приходящий с запросом или `default_user_sids`) даже при `enforce_user_token_requirement: false`. + +Значение по-умолчанию: `false`. + || +|| `default_user_sids` | Список SID'ов ([UserSID, GroupSID...]) для использования в проверке аутентификации в случае, когда входящий запрос не сопровождается явным аутентификационным токеном. + +`default_user_sids` играет роль аутентификационного токена для анонимных запросов. + +Непустой `default_user_sids` позволяет использовать систему одновременно с включённым режимом обязательной аутентификации (`enforce_user_token_requirement: true`) и анонимными запросами. Это может быть полезно в определённых сценариях функционального или нагрузочного тестирования {{ ydb-short-name }}. Не рекомендуется для production. + +Значение по-умолчанию: пустой список. + || +|| `all_authenticated_users` | Имя виртуальной группы, в которой будут состоять все аутентифицированные пользователи. + +Виртуальную группу не нужно явно создавать, она ведётся системой автоматически. Назначение такой виртуальной группы -- использовать при выдаче разрешений на схемных объектах. +Виртуальную группу нельзя удалить, нельзя получить или изменить список её членов. + +[//]: # (TODO: сделать ссылки на изменение ACL, на работу с группами, может быть, на описание виртуальных групп в разделе про группы пользователей, если оно там появится) + +Значение по-умолчанию: `all-users@well-known`. + || +|| `all_users_group` | Имя группы, в которой должны состоять все (локальные) пользователи. + +Если `all_users_group` не пустая, то все локальные пользователи в момент создания будут добавляться в указанную группу. В момент создания пользователей группа должна существовать. + +`all_users_group` автоматически прописывается при выполнении ["встроенной" настройки безопасности](../../security/builtin-security.md). + +Значение по-умолчанию: пустая строка. + || +|# + +#### Первичные настройки безопасности + +Параметры `default_users`, `default_groups`, `default_access` влияют на настройку кластера, осуществляемую при первом старте {{ ydb-short-name }} кластера. При последующих запусках первичная настройка не выполняется, эти параметры эффективно игнорируются. + +См. также раздел по ["встроенной" настройке безопасности](../../security/builtin-security.md), и влияющие на неё настройки [уровня `domains_config`](#domains-config). + +#| +|| Параметр | Описание || +|| `default_users` | Какие пользователи должны быть созданы на кластере при первом запуске. + +Список пар логин-пароль. Первый пользователь становится суперпользователем. + +Пример: + +```yaml +default_users: +- name: root + password: <...> +- name: user1 + password: <...> +``` + + || +|| `default_groups` | Какие группы должны быть созданы на кластере при первом запуске. + +Список групп и их членов. + +Пример: + +```yaml +default_groups: +- name: ADMINS + members: root +- name: USERS + members: + - ADMINS + - root + - user1 +``` + + || +|| `default_access` | Какие разрешения должны быть выданы на корне кластера. + +Список разрешений в формате [краткой записи управления доступом](../../security/short-access-control-notation.md). + +Пример: + +```yaml +default_access: +- +(CDB|DDB|GAR):ADMINS +- +(ConnDB):USERS +``` + + || +|# + +#### Настройки административных и других привилегий + +`viewer_allowed_sids`, `monitoring_allowed_sids`, `administration_allowed_sids` — списки SID'ов, которым должны быть даны соответствующие привилегии. + +[//]: # (TODO: wait for pull/9387, dinamic_node_registration to add info about `register_dynamic_node_allowed_sids`) + +Состояние кластера не ограничивается объектами схемы (базами, таблицами, топиками и т.д.), поэтому для доступа к состоянию кластера и состоянию его подсистем используется дополнительная иерархия привилегий, не связанная со схемными объектами и разрешениями на них (ACL). + +[//]: # (TODO: добавить ссылку на описание схемных ACL, когда оно появится) + +Часть состояния кластера доступна без авторизации (например, [список узлов кластера](../embedded-ui/ydb-monitoring.md#список-узлов-node_list_page)). Этот базовый уровень возможностей расширяется дополнительными уровнями привилегий, задаваемыми списками `*_allowed_sids`. + +[//]: # (TODO: добавить ссылку на справку по viewer api и требуемым правам, когда она появится) + +#| +|| Параметр | Описание || +|| `viewer_allowed_sids` | Список SID'ов с доступом уровня наблюдателя. + +Уровень наблюдателя даёт возможность просмотра всего состояния кластера и его подсистем через Web UI ([YDB Monitoring](../embedded-ui/ydb-monitoring.md)). + || +|| `monitoring_allowed_sids` | Список SID'ов с доступом уровня оператора. + +Уровень оператора даёт дополнительные возможности по просмотру и изменению состояния кластера. Например, выполнение бекапа или восстановление базы или выполнение YQL-запросов через Web UI. + || +|| `administration_allowed_sids` | Список SID'ов с доступом уровня администратора. + +Уровень администратора даёт максимальные возможности по изменению состояния системы. + || +|# + +{% note warning %} + +По-умолчанию, все списки пустые. + +Пустой список `*_allowed_sids` разрешает доступ любому пользователю (включая анонимного пользователя). Для защищённого развёртывания {{ ydb-short-name }} важно заранее определить модель прав и прописать в списках соответствующие группы/роли. + +{% endnote %} + +SID'ы в списках могут быть групповыми и пользовательскими. Принадлежность пользователя к списку `*_allowed_sids` определяется по вхождению в список любой его группы (рекурсивно) или по прямому вхождению. Наиболее осмысленно включать в списки `*_allowed_sids` пользовательские группы и отдельные сервисные аккаунты, тогда наделение отдельных пользователей соответствующими привилегиями не будет требовать изменения общей конфигурации кластера. + +`viewer_allowed_sids`, `monitoring_allowed_sids`, `administration_allowed_sids` представляют собой уровни расширения возможностей, по возрастанию. Принадлежность к `administration_allowed_sids` не означает автоматической принадлежности к `viewer_allowed_sids`. Для получения нужного объёма возможностей пользователь должен состоять во всех списках предыдущих уровней. Эту сборку возможностей должен обеспечивать администратор {{ ydb-short-name }} через конфигурацию `*_allowed_sids` списков. + +Например: + +- оператор должен состоять (прямо или через группы) во `viewer_allowed_sids` и в `monitoring_allowed_sids` +- полноценный администратор должен состоять во `viewer_allowed_sids`, `monitoring_allowed_sids` и в `administration_allowed_sids` ### Примеры {#domains-examples} @@ -599,9 +784,9 @@ blob_storage_config: Для конфигурации расположенной в 3 AZ необходимо указать 3 кольца. Для конфигураций, расположенных в одной AZ, указывается ровно одно кольцо. -## Конфигурирование провайдеров аутентификации {#auth-config} +## Конфигурация аутентификации {#auth-config} -{{ ydb-short-name }} позволяет использовать различные способы аутентификации пользователя. Конфигурирование провайдеров аутентификации задается в секции `auth_config`. +{{ ydb-short-name }} позволяет использовать различные способы аутентификации пользователя в системе. Настройки аутентификации и провайдеров аутентификации задаются в секции `auth_config`. ### Конфигурация LDAP аутентификации {#ldap-auth-config} @@ -611,7 +796,7 @@ blob_storage_config: ```yaml auth_config: - #... + ... ldap_authentication: hosts: - "ldap-hostname-01.example.net" @@ -633,7 +818,7 @@ auth_config: enable_nested_groups_search: true refresh_time: "1h" - #... + ... ``` Параметр | Описание diff --git a/ydb/docs/ru/core/security/access-management.md b/ydb/docs/ru/core/security/access-management.md index e33476500e50..0cbf8101a114 100644 --- a/ydb/docs/ru/core/security/access-management.md +++ b/ydb/docs/ru/core/security/access-management.md @@ -2,27 +2,6 @@ {{ ydb-short-name }} поддерживает аутентификацию по логину паролю. Подробнее читайте в разделе [{#T}](../concepts/auth.md). -## Встроенные группы {#builtin} - -Кластер {{ ydb-short-name }} имеет встроенные группы, предоставляющие заранее определенные наборы ролей: - -Группа | Описание ---- | --- -`ADMINS` | Неограниченные права на всю схему кластера. -`DATABASE-ADMINS` | Права на создание и удаление баз данных (`CreateDatabase`, `DropDatabase`). -`ACCESS-ADMINS` | Права на управление правами других пользователей (`GrantAccessRights`). -`DDL-ADMINS` | Права на изменение схемы баз данных (`CreateDirectory`, `CreateTable`, `WriteAttributes`, `AlterSchema`, `RemoveSchema`). -`DATA-WRITERS` | Права на изменение данных (`UpdateRow`, `EraseRow`). -`DATA-READERS` | Права на чтение данных (`SelectRow`). -`METADATA-READERS` | Права на чтение метаинформации, без доступа к данным (`DescribeSchema` и `ReadAttributes`). -`USERS` | Права на подключение к базам данных (`ConnectDatabase`). - -Все пользователи по умолчанию входят в группу `USERS`. Пользователь `root` по умолчанию входит в группу `ADMINS`. - -Ниже показано, как группы наследуют разрешения друг друга. Например, в `DATA-WRITERS` входят все разрешения `DATA-READERS`: - -![groups](../_assets/groups.svg) - ## Управление группами {#groups} Для создания, изменения или удаления группы воспользуйтесь операторами YQL: diff --git a/ydb/docs/ru/core/security/builtin-security.md b/ydb/docs/ru/core/security/builtin-security.md new file mode 100644 index 000000000000..6a2620c6ea8b --- /dev/null +++ b/ydb/docs/ru/core/security/builtin-security.md @@ -0,0 +1,56 @@ +# "Встроенная" настройка безопасности + +"Встроенная" настройка безопасности применяется автоматически при первом запуске кластера {{ ydb-short-name }}, если секция настроек безопасности в конфигурации кластера ([секция `security_config`](../reference/configuration/index.md#security)) не содержит явных настроек. + +Применение "встроенной" конфигурации безопасности выключается по [флагу `domains_config.disable_builtin_security`](../reference/configuration/index.md#domains-config). + +Явные настройки безопасности описываются в справке по секции настроек безопасности в конфигурации кластера ([секция `security_config`](../reference/configuration/index.md#security)). + +"Встроенная" настройка безопасности добавляет в систему суперпользователя, а также реализует набор ролей безопасности для удобного управления пользователями. + +## Роли + +Роль | Описание +--- | --- +`ADMINS` | Неограниченные права на всю схему кластера. +`DATABASE-ADMINS` | Права на управление базами, схемой и доступами на схеме, без доступа к данным. +`ACCESS-ADMINS` | Права на управление доступами на схеме, без доступа к данным. +`DDL-ADMINS` | Права на управление схемой, без доступа к данным. +`DATA-WRITERS` | Права на доступ к схемным объектам, и на чтение и изменение данных. +`DATA-READERS` | Права на доступ к схемным объектам, и на чтение данных. +`METADATA-READERS` | Права на доступ к схемным объектам, без доступа к данным. +`USERS` | Никаких прав, общая группа всех пользователей. + +## Группы + +Роли реализуются с помощью иерархии пользовательских групп и необходимого набора разрешений этим группам. Возможности групп задаются с помощью разрешений, выданных на корне схемы кластера. + +Группы включаются друг в друга и таким образом по цепочке наследуют соответствующие разрешения: + +{% include notitle [builtin-groups-graph](../_includes/builtin-groups-graph.md) %} + +Например, пользователям группы `DATA-WRITERS`: + +- разрешено смотреть схему -- `METADATA-READERS` +- читать данные -- `DATA-READERS` +- и менять их -- `DATA-WRITERS` + +Пользователям группы `DDL-ADMINS`: + +- разрешено смотреть схему -- `METADATA-READERS` +- и менять ёё -- `DDL-ADMINS`. + +Пользователи группы `ADMINS` со схемой и данными могут делать всё. + +## Суперпользователь + +Суперпользователь входит в группу `ADMINS` (и `USERS`) и обладает полными правами на схему кластера. + +По-умолчанию, суперпользователь называется `root` и имеет пустой пароль. + +## Группа всех пользователей + +Группа `USERS` также определяется как общая группа всех локальных пользователей. При последующем создании локальных пользователей они будут автоматически становиться членами группы `USERS`. + +[//]: # (TODO: добавить ссылку на раздел про работу с пользователями) + diff --git a/ydb/docs/ru/core/security/index.md b/ydb/docs/ru/core/security/index.md index e7b05f76854f..b5a3179974e7 100644 --- a/ydb/docs/ru/core/security/index.md +++ b/ydb/docs/ru/core/security/index.md @@ -5,6 +5,7 @@ Основные материалы: - [{#T}](access-management.md) +- [{#T}](builtin-security.md) - [{#T}](audit-log.md) - Шифрование: @@ -15,4 +16,4 @@ - Концепции: - [{#T}](../concepts/auth.md) - - [{#T}](../concepts/connect.md) \ No newline at end of file + - [{#T}](../concepts/connect.md) diff --git a/ydb/docs/ru/core/security/toc_p.yaml b/ydb/docs/ru/core/security/toc_p.yaml index 3431bae533e6..44a90ede69ce 100644 --- a/ydb/docs/ru/core/security/toc_p.yaml +++ b/ydb/docs/ru/core/security/toc_p.yaml @@ -1,6 +1,8 @@ items: - name: Управление доступом href: access-management.md +- name: Настройки безопасности по-умолчанию + href: builtin-security.md - name: Аудитный лог href: audit-log.md - name: Шифрование