# Аспекты безопасности

> Вопросы безопасности для DCS, REST API и обработка учетных данных.

---

Индекс LLMS: [llms.txt](/ru/llms.txt)

---

<a id="security"></a>
Кластер Patroni имеет два интерфейса, которые необходимо защитить от несанкционированного доступа: распределённое хранилище конфигурации (DCS) и REST API Patroni.

--------

## Защита DCS {#protecting-dcs}

Patroni и [patronictl](/ru/docs/patroni/patronictl#patronictl) хранят и извлекают данные из DCS.

Даже если DCS не содержит конфиденциальной информации, он позволяет изменять часть конфигурации Patroni/Postgres. Поэтому первым делом следует защитить сам DCS.

Детали защиты зависят от типа используемого DCS. Параметры аутентификации и шифрования (токены/базовая аутентификация/сертификаты клиента) для поддерживаемых типов DCS описаны в [настройках](/ru/docs/patroni/config/yaml#yaml).

Общая рекомендация — включить TLS для всего обмена данными с DCS.

--------

## Защита REST API {#protecting-the-rest-api}

Защита REST API представляет собой более сложную задачу.

Patroni REST API используется самим Patroni во время выбора лидера, инструментом [patronictl](/ru/docs/patroni/patronictl#patronictl) для выполнения переключений при отказе, плановых переключений, повторной инициализации, перезапуска и перезагрузки конфигурации, HAProxy или любым другим балансировщиком нагрузки для выполнения проверок работоспособности HTTP, а также, разумеется, может использоваться для мониторинга.

С точки зрения безопасности, REST API содержит безопасные (запросы `GET`, только извлечение информации) и небезопасные (запросы `PUT`, `POST`, `PATCH` и `DELETE`, изменяющие состояние узлов) конечные точки.

Небезопасные конечные точки могут быть защищены с помощью базовой аутентификации HTTP путём установки параметров `restapi.authentication.username` и `restapi.authentication.password`. Невозможно защитить безопасные конечные точки без включения TLS.

Когда для REST API включён TLS и развёрнута инфраструктура PKI, возможна взаимная аутентификация сервера API и клиента API для всех конечных точек.

Параметры раздела `restapi` включают аутентификацию клиента на сервере по TLS. В зависимости от значения параметра `verify_client` сервер API требует успешной проверки сертификата клиента для безопасных и небезопасных вызовов API (`verify_client: required`), только для небезопасных вызовов API (`verify_client: optional`) либо не требует её ни для каких вызовов API (`verify_client: none`).

Параметры раздела `ctl` позволяют клиенту выполнять TLS-аутентификацию сервера (инструмент [patronictl](/ru/docs/patroni/patronictl#patronictl), использующий тот же конфигурационный файл, что и Patroni). Установите `insecure: true` для отключения проверки сертификата сервера клиентом. Подробное описание параметров TLS клиента см. в [настройках](/ru/docs/patroni/config/yaml#patronictl_settings).

Защита базы данных PostgreSQL от несанкционированного доступа выходит за рамки настоящего документа и рассматривается в <https://www.postgresql.org/docs/current/client-authentication.html>
