> ## Documentation Index
> Fetch the complete documentation index at: https://clickhouse.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Модель привилегий

> Что именно коннектор ClickHouse может и не может делать: исходящие подключения, привилегии ClickHouse, Kubernetes RBAC, атрибуция и минимизация данных

На этой странице приведена справочная информация по безопасности коннектора ClickHouse: полный перечень устанавливаемых им соединений, точные привилегии, которыми он обладает, действия, которые он архитектурно не может выполнять, а также сведения об атрибуции каждого действия. О том, как эти компоненты взаимодействуют, см. раздел [«Архитектура»](/docs/ru/products/bring-your-own-cloud/connector/architecture).

<div id="what-the-connector-can-do">
  ## Возможности коннектора
</div>

<div id="outbound-connections">
  ### Исходящие подключения
</div>

Ниже приведен полный список подключений, которые устанавливает коннектор. Все они инициируются из вашей среды.

| Пункт назначения                                    | Протокол                                     | Назначение                                                                                                                                                                                                                                                                                                           |
| --------------------------------------------------- | -------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Конечная точка API коннектора вашей организации     | HTTPS с mTLS, каждый запрос подписан HMAC    | `POST /v1/metrics`, `/v1/self-metrics`, `/v1/status`, `/v1/instance/sync`, `/v1/infra/sync`, `/v1/backup/sync`, `/v1/pcm/cert/renew`                                                                                                                                                                                 |
| Конечная точка API коннектора вашей организации     | Исходящий WebSocket, `/v1/commands/ws`       | Канал команд средства устранения неполадок, доступный в зависимости от состояния сеанса поддержки                                                                                                                                                                                                                    |
| Конечная точка регистрации вашей организации        | HTTPS (токен регистрации или HMAC; без mTLS) | Использование токена и подписание сертификата (`/v1/pcm/cert/sign`) при установке                                                                                                                                                                                                                                    |
| Ваши экземпляры ClickHouse                          | Собственный протокол ClickHouse              | Запросы только для чтения от имени `pcm_scraper` и `pcm_troubleshooter`, а также оператор сброса журналов скрапера (см. [привилегии](#clickhouse-grants))                                                                                                                                                            |
| API-сервер Kubernetes                               | HTTPS                                        | Чтение ресурсов в рамках пространства имен и запросы токенов ServiceAccount (для обеих целей); чтение и обновление по точному имени собственного mTLS секрета коннектора для сохранения обновленных сертификатов (только для установок Kubernetes; на VM обновленные сертификаты записываются в локальные файлы TLS) |
| Конечная точка JWKS вашего провайдера идентификации | HTTPS                                        | Проверка токена оператора, только если включен шлюз сеансов                                                                                                                                                                                                                                                          |

Для входящих подключений коннектор предоставляет только локальные порты проверки работоспособности и метрик, а также дополнительный шлюз сеансов. Другие порты не прослушиваются, и ClickHouse Cloud никогда не подключается к вашей среде: он может только отвечать через исходящий WebSocket средства устранения неполадок.

<div id="clickhouse-grants">
  ### Привилегии ClickHouse
</div>

При провизионировании для каждого компонента создаётся один пользователь с доступом только для чтения. Единственное исключение — указанная ниже привилегия scraper'а `SYSTEM FLUSH LOGS`: она не позволяет читать или изменять данные, а лишь принудительно записывает в хранилище уже буферизованные записи из таблиц логов. Пользователи создаются с `IDENTIFIED WITH bcrypt_hash`, поэтому в SQL провизионирования содержится только хеш bcrypt с солью; пароль в открытом виде хранится лишь в файле учётных данных, который демон читает во время выполнения. Привилегии в точности следующие, с наборами таблиц по умолчанию:

```sql theme={null}
CREATE USER IF NOT EXISTS `pcm_scraper` IDENTIFIED WITH bcrypt_hash BY '<bcrypt-hash>';

GRANT SELECT ON `system`.`asynchronous_metric_log` TO `pcm_scraper`;
GRANT SELECT ON `system`.`metric_log` TO `pcm_scraper`;
GRANT SELECT ON `system`.`server_settings` TO `pcm_scraper`;
GRANT SELECT ON `system`.`tables` TO `pcm_scraper`;
GRANT SELECT ON `system`.`warnings` TO `pcm_scraper`;
GRANT SELECT ON `system`.`user_directories` TO `pcm_scraper`;
GRANT READ ON REMOTE TO `pcm_scraper`;
GRANT SYSTEM FLUSH LOGS ON *.* TO `pcm_scraper`;
```

`READ ON REMOTE` требуется, поскольку scrape-запросы оборачивают каждую системную таблицу в `clusterAllReplicas()`. `SYSTEM FLUSH LOGS` необходимо выдать в глобальной области видимости, поскольку ClickHouse отклоняет более узкие области действия этой привилегии; ClickHouse учитывает её только для системных таблиц `*_log`, поэтому выданная привилегия шире фактически доступной возможности.

```sql theme={null}
CREATE USER IF NOT EXISTS `pcm_troubleshooter` IDENTIFIED WITH bcrypt_hash BY '<bcrypt-hash>';

GRANT SELECT ON `system`.`asynchronous_metrics` TO `pcm_troubleshooter`;
GRANT SELECT ON `system`.`build_options` TO `pcm_troubleshooter`;
GRANT SELECT ON `system`.`clusters` TO `pcm_troubleshooter`;
GRANT SELECT ON `system`.`columns` TO `pcm_troubleshooter`;
GRANT SELECT ON `system`.`databases` TO `pcm_troubleshooter`;
GRANT SELECT ON `system`.`detached_parts` TO `pcm_troubleshooter`;
GRANT SELECT ON `system`.`disks` TO `pcm_troubleshooter`;
GRANT SELECT ON `system`.`events` TO `pcm_troubleshooter`;
GRANT SELECT ON `system`.`formats` TO `pcm_troubleshooter`;
GRANT SELECT ON `system`.`functions` TO `pcm_troubleshooter`;
GRANT SELECT ON `system`.`grants` TO `pcm_troubleshooter`;
GRANT SELECT ON `system`.`merges` TO `pcm_troubleshooter`;
GRANT SELECT ON `system`.`metrics` TO `pcm_troubleshooter`;
GRANT SELECT ON `system`.`mutations` TO `pcm_troubleshooter`;
GRANT SELECT ON `system`.`parts` TO `pcm_troubleshooter`;
GRANT SELECT ON `system`.`parts_columns` TO `pcm_troubleshooter`;
GRANT SELECT ON `system`.`parts_summary` TO `pcm_troubleshooter`;
GRANT SELECT ON `system`.`processes` TO `pcm_troubleshooter`;
GRANT SELECT ON `system`.`replicas` TO `pcm_troubleshooter`;
GRANT SELECT ON `system`.`replication_queue` TO `pcm_troubleshooter`;
GRANT SELECT ON `system`.`roles` TO `pcm_troubleshooter`;
GRANT SELECT ON `system`.`settings` TO `pcm_troubleshooter`;
GRANT SELECT ON `system`.`settings_profile_elements` TO `pcm_troubleshooter`;
GRANT SELECT ON `system`.`settings_profiles` TO `pcm_troubleshooter`;
GRANT SELECT ON `system`.`storage_policies` TO `pcm_troubleshooter`;
GRANT SELECT ON `system`.`table_engines` TO `pcm_troubleshooter`;
GRANT SELECT ON `system`.`tables` TO `pcm_troubleshooter`;
GRANT SELECT ON `system`.`users` TO `pcm_troubleshooter`;
GRANT SELECT ON `system`.`user_directories` TO `pcm_troubleshooter`;
```

Разрешение `system.user_directories` предоставлено обоим пользователям исключительно для диагностики: `clicklink clctl preflight` запускается с учетными данными самого коннектора и проверяет, как экземпляр хранит пользователей ClickHouse — реплицированно или локально. В этой таблице содержатся метаданные конфигурации хранилища пользователей, а не пользовательские данные; она не входит ни в набор целей для сбора метрик, ни в список разрешённых таблиц сеанса, поэтому ни один путь вывода сбора метрик или сеанса её не читает. Без этого разрешения единственная соответствующая предварительная проверка будет отмечена как пропущенная, а всё остальное продолжит выполняться.

Помимо `SELECT` для каждой таблицы, единственная системная привилегия скрапера — `SYSTEM FLUSH LOGS`: она принудительно записывает буферизованные записи из системных таблиц `*_log` на диск, чтобы при сборе были доступны актуальные данные, и больше ничего не делает; ClickHouse применяет её только к таблицам логов, хотя выдать эту привилегию можно только на глобальном уровне. Привилегии для `INSERT`, DDL, управления пользователями, настроек или управления процессами отсутствуют. Если экземпляр совместно используется вторым развертыванием connector, его пользователи получают суффикс (`pcm_scraper_<suffix>`) с теми же наборами привилегий.

<div id="kubernetes-rbac">
  ### Kubernetes RBAC
</div>

Chart создает только роли, ограниченные Пространством имен; РольКластера и ClusterRoleBinding не создаются.

| Ресурсы                                                                                         | Операции               | Область действия                                                                                                           |
| ----------------------------------------------------------------------------------------------- | ---------------------- | -------------------------------------------------------------------------------------------------------------------------- |
| `secrets`                                                                                       | `get`                  | Только точно указанные имена: секрет mTLS, секрет HMAC и секрет пакета доступа для каждого экземпляра                      |
| `secrets`                                                                                       | `update`               | Только секрет mTLS с точно указанным именем, чтобы демоны могли сохранять автоматически обновляемый клиентский сертификат  |
| `serviceaccounts/token`                                                                         | `create`               | Только точно указанные имена: собственный ServiceAccount компонента и ServiceAccount пакета доступа для каждого экземпляра |
| `pods`, `pods/log`, `pods/status`, `services`, `configmaps`, `events`, `persistentvolumeclaims` | `get`, `list`, `watch` | Только для средства устранения неполадок                                                                                   |
| `deployments`, `statefulsets`, `replicasets` (`apps`)                                           | `get`, `list`, `watch` | Только для средства устранения неполадок                                                                                   |

<div id="what-the-connector-cannot-do">
  ## Чего коннектор не может делать
</div>

* **Не записывает данные или состояние в ClickHouse.** Указанные выше привилегии не включают `INSERT`, DDL, а также привилегии для управления пользователями, настройками или процессами; единственная системная привилегия — `SYSTEM FLUSH LOGS` для скрапера — лишь обеспечивает сохранение в таблицах логов уже буферизованных данных. Коннектор не может изменять данные, схемы, пользователей или настройки.
* **Не выполняет команды.** RBAC не включает `pods/exec`; коннектор не может запускать команды в ваших подах.
* **Не удаляет и не применяет patch.** RBAC разрешает две мутации: `update` с точным именем для собственного mTLS секрета коннектора и `create` для `serviceaccounts/token`, который выпускает краткоживущие токены для собственных ServiceAccounts коннектора и не изменяет ни один сохраненный объект.
* **Нет области действия уровня кластера.** Каждая роль привязана к пространству имен; коннектор не может перечислять или читать ресурсы за пределами предоставленных вами пространств имен.
* **Никакого входящего трафика.** ClickHouse Cloud никогда не открывает соединение с вашей средой. Единственный путь выполнения команд — исходящий WebSocket средства устранения неполадок; оно отклоняет любые команды, пока не активен включенный вами сеанс поддержки. Даже во время сеанса область действия ограничена с обеих сторон: запросы ClickHouse ограничены списком разрешённых таблиц, а `query_log` и `text_log` отклоняются валидатором независимо от конфигурации; доступ к Kubernetes отдельно ограничен представлениями только для чтения и журналами подов, предоставляемыми ролями в пределах пространства имен.

<div id="what-requires-your-action">
  ## Что требует ваших действий
</div>

* **Сеансы поддержки.** Интерактивное устранение неполадок возможно только в включённом вами сеансе: по умолчанию он ограничен 4 часами, максимум — 24 часами. Отключение действует немедленно. См. [сеансы поддержки](/docs/ru/products/bring-your-own-cloud/connector/support-sessions).
* **Список разрешённых операторов.** Каждый запрос к шлюзу должен содержать токен OIDC, подтверждённый адрес электронной почты которого указан в вашем списке разрешённых. Пустой список разрешённых означает запрет доступа. Вы управляете этим списком; см. [руководство по настройке](/docs/ru/products/bring-your-own-cloud/connector/configuration).
* **Доступность шлюза.** Шлюз сеанса отключён, пока вы его не включите, и доступен только через проброс порта, если вы не настроите Входной шлюз. На виртуальной машине каждый оператор должен закрепить отпечаток его самоподписанного сертификата, прежде чем команды сеанса смогут подключиться к нему.
* **Исходящий сетевой трафик.** При использовании CNI с принудительным применением политик у коннектора нет исходящего трафика, пока вы не добавите CIDR конечных точек в список разрешённых в NetworkPolicy чарта.

<div id="how-access-is-attributed">
  ## Как определяется принадлежность доступа
</div>

* **Идентификация развертывания.** Общее имя клиентского mTLS-сертификата — это ID вашей организации, а с хостом конечной точки связано одно DNS-имя, поэтому каждое API-подключение можно однозначно отнести к вашей организации. Сертификат продлевается автоматически внутри демона; ключевой материал не обрабатывается операторами.
* **Целостность запроса.** Каждый API-запрос также содержит подпись HMAC-SHA256 (`Authorization: HMAC-SHA256 AccessKey=..., Signature=..., Timestamp=...`), вычисляемую по методу, пути, временной метке и хешу тела с использованием пары ключей, выданной при регистрации.
* **Идентификация оператора.** Вызовы шлюза связываются с адресом электронной почты, подтвержденным OIDC ID-токеном оператора и проверенным по JWKS вашего провайдера идентификации; если токен доступен, самостоятельно указанному имени никогда не доверяют.
* **Журнал аудита.** Каждый вызов шлюза и каждая команда устранения неполадок — независимо от того, были они приняты или заблокированы, — добавляются в журнал аудита NDJSON: записи шлюза содержат подтвержденный адрес электронной почты оператора, изменения локального сеанса VM — имя пользователя хоста, выполнившего вызов, а команды сеанса — идентификатор организации, переданный по аутентифицированному каналу. Для просмотра используйте `clicklink clctl troubleshoot audit tail`; см. [справочник CLI](/docs/ru/products/bring-your-own-cloud/connector/reference/cli).

<div id="data-minimization-defaults">
  ## Настройки минимизации данных по умолчанию
</div>

* **`query_log` по умолчанию исключён из сбора метрик.** Его столбцы содержат необработанный SQL с литеральными значениями, которые могут включать персональные данные или секреты, поэтому он не покидает ваш периметр, пока вы намеренно не добавите его.
* **Средство устранения неполадок читает только таблицы из списка разрешённых**, а валидатор безусловно запрещает `query_log` и `text_log`, поэтому история запросов никогда не доступна для чтения. Список разрешённых по умолчанию включает `system.processes` (текст выполняемого запроса); ограничьте список разрешённых таблиц для сеанса (`troubleshooter.allowedTables` в Kubernetes, `troubleshooter.allowed_tables` на виртуальной машине), если эта информация должна оставаться скрытой во время сеансов.
* **Все выходные данные средства устранения неполадок маскируются** встроенными шаблонами для IPv4- и IPv6-адресов, Bearer-токенов, ключей доступа AWS, адресов электронной почты, JWT, закрытых ключей SSH и учётных данных в строках подключения, а также любыми определёнными вами шаблонами. Демон не запускается при недействительном файле шаблонов, вместо того чтобы работать без маскирования.
* **Учётные данные сводятся к минимуму при хранении.** SQL для провизионирования содержит хеши bcrypt, но никогда не содержит пароли в открытом виде; токен регистрации никогда не записывается в командную строку, на диск или в журналы; ключи хранятся в Kubernetes Secrets или файлах с режимом 0600.
