Настройка TLS
Эта страница не относится к ClickHouse Cloud. Описанная здесь процедура выполняется автоматически в сервисах ClickHouse Cloud.
В этом руководстве приводятся простые и минимальные настройки для конфигурирования ClickHouse на использование сертификатов OpenSSL при проверке соединений. В рамках этого примера создаются самоподписанные сертификат и ключ центра сертификации (CA), а также сертификаты узлов для установления соединений с соответствующими настройками.
Реализация TLS — сложная задача, и существует множество вариантов, которые необходимо учитывать для обеспечения полностью безопасного и надежного развертывания. Это базовое руководство с простыми примерами конфигурации TLS. Обратитесь к вашей команде по PKI/безопасности, чтобы сгенерировать корректные сертификаты для вашей организации.
Ознакомьтесь с этим базовым руководством по использованию сертификатов для вводного обзора.
Создайте развертывание ClickHouse
Это руководство было написано с использованием Ubuntu 20.04 и ClickHouse, установленного на следующих хостах из DEB-пакета (с помощью apt). Домен — marsnet.local:
| Host | IP Address |
|---|---|
chnode1 | 192.168.1.221 |
chnode2 | 192.168.1.222 |
chnode3 | 192.168.1.223 |
См. руководство Quick Start, чтобы получить более подробную информацию об установке ClickHouse.
Создайте TLS-сертификаты
Самоподписанные сертификаты используются только в демонстрационных целях и не должны использоваться в production-среде. Запросы на сертификаты должны создаваться для подписи организацией и проверяться с использованием цепочки CA, которая будет настроена в параметрах. Однако эти шаги можно использовать для настройки и тестирования параметров, а затем заменить сертификаты на фактические, которые будут использоваться.
-
Сгенерируйте ключ, который будет использоваться для нового CA:
-
Сгенерируйте новый самоподписанный сертификат CA. Следующая команда создаст новый сертификат, который будет использоваться для подписи других сертификатов с помощью ключа CA:
ПримечаниеСохраните резервные копии ключа и сертификата CA в безопасном месте вне кластера. После генерации сертификатов узлов ключ следует удалить с узлов кластера.
-
Проверьте содержимое нового сертификата CA:
-
Создайте запрос на сертификат (CSR) и сгенерируйте ключ для каждого узла:
-
Используя CSR и CA, создайте новые пары сертификатов и ключей:
-
Проверьте сертификаты на subject и issuer:
-
Убедитесь, что новые сертификаты успешно проверяются по сертификату CA:
Создайте и настройте каталог для хранения сертификатов и ключей.
Это необходимо сделать на каждом узле. На каждом хосте используйте соответствующие сертификаты и ключи.
-
Создайте папку в каталоге, доступном ClickHouse на каждом узле. Мы рекомендуем использовать каталог конфигурации по умолчанию (например,
/etc/clickhouse-server): -
Скопируйте сертификат CA, сертификат узла и ключ, соответствующие каждому узлу, в новый каталог certs.
-
Обновите владельца и права доступа, чтобы ClickHouse мог читать сертификаты:
Настройте среду с базовыми кластерами с использованием ClickHouse Keeper
Для этой среды развертывания на каждом узле используются следующие настройки ClickHouse Keeper. У каждого сервера будет собственный <server_id>. (Например, <server_id>1</server_id> для узла chnode1 и так далее.)
Рекомендуемый порт для ClickHouse Keeper — 9281. Однако порт настраиваемый и может быть изменён, если в этой среде он уже используется другим приложением.
Полное описание всех параметров см. по адресу https://clickhouse.com/docs/operations/clickhouse-keeper/
-
Добавьте следующее внутрь тега
<clickhouse>вconfig.xmlсервера ClickHouseПримечаниеДля production-сред рекомендуется использовать отдельный файл конфигурации
.xmlв каталогеconfig.d. Дополнительные сведения см. по адресу https://clickhouse.com/docs/operations/configuration-files/ПримечаниеКогда ClickHouse Keeper встроен в сервер ClickHouse (как показано выше), Keeper использует конфигурацию OpenSSL сервера, определённую в разделе OpenSSL статьи Configure TLS interfaces on ClickHouse nodes. Если вы запускаете ClickHouse Keeper как автономный процесс, необходимо добавить раздел
<openSSL>в файл конфигурации Keeper с теми же настройками сертификата CA и сертификата/ключа узла. Подробности см. в разделе Configure OpenSSL for standalone ClickHouse Keeper ниже. -
Раскомментируйте и обновите настройки keeper на всех узлах и установите флаг
<secure>в значение 1: -
Обновите и добавьте следующие настройки кластера на
chnode1иchnode2.chnode3будет использоваться для кворума ClickHouse Keeper.ПримечаниеВ этой конфигурации настраивается только один пример кластера. Тестовые примерные кластеры необходимо либо удалить, либо закомментировать, либо, если тестируется существующий кластер, следует обновить порт и добавить параметр
<secure>. Параметры<userи<password>должны быть заданы, если для пользователяdefaultпароль был изначально настроен во время установки или в файлеusers.xml.Следующий пример создаёт кластер с одним шардом-репликой на двух серверах (по одному на каждом узле).
-
Задайте значения macros, чтобы можно было создать таблицу ReplicatedMergeTree для тестирования. На
chnode1:На
chnode2:
Настройте TLS-интерфейсы на узлах ClickHouse
Приведённые ниже параметры настраиваются в config.xml сервера ClickHouse
-
Задайте отображаемое имя для развертывания (необязательно):
-
Настройте ClickHouse на прослушивание внешних портов:
-
Настройте порт
httpsи отключите портhttpна каждом узле: -
Настройте защищённый собственный TCP-порт ClickHouse и отключите стандартный незащищённый порт на каждом узле:
-
Настройте порт
interserver httpsи отключите стандартный незащищённый порт на каждом узле: -
Настройте OpenSSL с сертификатами и путями
ПримечаниеИмя каждого файла и путь должны быть обновлены в соответствии с узлом, на котором выполняется настройка. Например, обновите запись
<certificateFile>, указавchnode2.crtпри настройке на хостеchnode2.дополнительные сведения см. по адресу https://clickhouse.com/docs/operations/server-configuration-parameters/settings/#server_configuration_parameters-openssl
-
Настройте TLS для gRPC на каждом узле:
дополнительные сведения см. по адресу https://clickhouse.com/docs/interfaces/grpc/
-
Настройте клиент ClickHouse хотя бы на одном из узлов на использование TLS для подключений в его собственном файле
config.xml(по умолчанию в/etc/clickhouse-client/): -
Отключите стандартные порты эмуляции MySQL и PostgreSQL:
Тестирование
-
Запустите все узлы по одному:
-
Убедитесь, что защищённые порты подняты и прослушиваются; на каждом узле это должно выглядеть примерно так:
ClickHouse Port Description 8443 интерфейс https 9010 межсерверный порт https 9281 защищённый порт ClickHouse Keeper 9440 защищённый протокол Native TCP 9444 порт Raft ClickHouse Keeper -
Проверьте состояние ClickHouse Keeper The typical 4 letter word (4lW) commands won't work using
echowithout TLS, here is how to use the commands withopenssl.- Запустите интерактивную сессию
openssl
- Запустите интерактивную сессию
-
Отправьте команды 4LW в сеансе OpenSSL
-
Запустите клиент ClickHouse с флагом
--secureи TLS-портом: -
Войдите в Play UI через интерфейс
httpsпо адресуhttps://chnode1.marsnet.local:8443/play.
Примечаниебраузер покажет недоверенный сертификат, поскольку доступ к нему выполняется с рабочей станции, а сертификаты отсутствуют в хранилищах корневых CA на клиентской машине. При использовании сертификатов, выпущенных публичным центром сертификации или корпоративным CA, он должен отображаться как доверенный.
-
Создайте реплицируемую таблицу:
-
Добавьте пару строк на
chnode1: -
Проверьте репликацию, просмотрев строки на
chnode2:
Настройка OpenSSL для автономного ClickHouse Keeper
При запуске ClickHouse Keeper как автономного процесса (а не встроенного в сервер ClickHouse) сертификаты и параметры OpenSSL необходимо настраивать отдельно в файле конфигурации Keeper. Без этого Keeper не сможет устанавливать защищенные соединения ни для взаимодействия с клиентами (tcp_port_secure), ни для Raft-репликации между узлами Keeper.
Добавьте следующий раздел <openSSL> в файл конфигурации автономного ClickHouse Keeper на каждом узле:
Имя каждого файла необходимо изменить в соответствии с узлом, на котором выполняется настройка.
Например, при настройке на хосте chnode2 укажите в записи <certificateFile> значение chnode2.crt.
Раздел <server> используется для входящих клиентских подключений к защищённому порту Keeper (tcp_port_secure). Раздел <client> используется для исходящих подключений между узлами Keeper в процессе репликации Raft.
В приведённых выше путях к сертификатам используется /etc/clickhouse-keeper/certs/ — это типичный путь для автономных установок Keeper. Если вы установили Keeper в другой каталог, внесите соответствующие изменения. Сами сертификаты — те же, что были созданы на шаге 2.
Итоги
В этой статье основное внимание было уделено настройке среды ClickHouse с использованием TLS. Параметры будут отличаться в зависимости от требований в продуктивных средах, например уровни проверки сертификатов, протоколы, шифры и т. д. Теперь у вас должно быть хорошее понимание последовательности шагов по настройке и использованию защищённых соединений.