Настройка SSL-TLS
Эта страница не применима к ClickHouse Cloud. Процедура, задокументированная здесь, автоматизирована в службах ClickHouse Cloud.
Этот гид предоставляет простые и минимальные настройки для конфигурации ClickHouse с использованием сертификатов OpenSSL для проверки соединений. Для этой демонстрации был создан самоподписанный сертификат центра сертификации (CA) и ключ с использованием сертификатов узлов для установления соединений с соответствующими настройками.
Реализация TLS сложна, и существует множество вариантов, которые необходимо учитывать для обеспечения полностью безопасного и надежного развертывания. Это базовый учебник с примерами базовой конфигурации SSL/TLS. Проконсультируйтесь с вашей командой PKI/безопасности, чтобы сгенерировать правильные сертификаты для вашей организации.
Просмотрите этот базовый учебник по использованию сертификатов для получения вводного обзора.
1. Создайте развертывание 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 |
Просмотрите Быстрый старт для получения дополнительных сведений о том, как установить ClickHouse.
2. Создайте SSL сертификаты
Использование самоподписанных сертификатов предназначено только для демонстрационных целей и не должно использоваться в производстве. Запросы на сертификаты должны быть созданы для подписания организацией и проверены с использованием цепочки CA, которая будет настроена в настройках. Тем не менее, эти шаги могут быть использованы для настройки и тестирования параметров, после чего они могут быть заменены фактическими сертификатами, которые будут использоваться.
-
Сгенерируйте ключ, который будет использоваться для нового CA:
-
Сгенерируйте новый самоподписанный сертификат CA. Следующая команда создаст новый сертификат, который будет использоваться для подписи других сертификатов с помощью ключа CA:
примечаниеСоздайте резервную копию ключа и сертификата CA в безопасном месте, не в кластере. После генерации сертификатов узлов, ключ следует удалить с узлов кластера.
-
Проверьте содержимое нового сертификата CA:
-
Создайте запрос на сертификат (CSR) и сгенерируйте ключ для каждого узла:
-
Используя CSR и CA, создайте новые сертификаты и пары ключей:
-
Проверьте сертификаты на предмет субъекта и издателя:
-
Убедитесь, что новые сертификаты подтверждаются сертификатом CA:
3. Создайте и настройте директорию для хранения сертификатов и ключей.
Это необходимо сделать на каждом узле. Используйте соответствующие сертификаты и ключи на каждом хосте.
-
Создайте папку в директории, доступной для ClickHouse, на каждом узле. Мы рекомендуем использовать директорию по умолчанию (например,
/etc/clickhouse-server
): -
Скопируйте сертификат CA, сертификат узла и ключ, соответствующий каждому узлу, в новую директорию сертификатов.
-
Обновите владельца и права доступа, чтобы разрешить ClickHouse читать сертификаты:
4. Настройте окружение с базовыми кластерами с использованием ClickHouse Keeper
Для этого развертывания на каждом узле используются следующие параметры ClickHouse Keeper. Каждый сервер будет иметь свой собственный <server_id>
. (Например, <server_id>1</server_id>
для узла chnode1
и так далее.)
Рекомендуемый порт для ClickHouse Keeper — 9281
. Однако порт можно настроить и изменить, если этот порт уже используется другим приложением в вашей среде.
Для полного объяснения всех параметров посетите https://clickhouse.com/docs/operations/clickhouse-keeper/
-
Добавьте следующее внутрь тега
<clickhouse>
в конфигурации сервера ClickHouseconfig.xml
примечаниеДля производственных сред рекомендуется использовать отдельный файл конфигурации
.xml
в директорииconfig.d
. Для получения дополнительной информации посетите https://clickhouse.com/docs/operations/configuration-files/ -
Раскомментируйте и обновите настройки keeper на всех узлах, установив флаг
<secure>
в значение 1: -
Обновите и добавьте следующие параметры кластера к
chnode1
иchnode2
.chnode3
будет использоваться для кворума ClickHouse Keeper.примечаниеДля этой конфигурации настроен только один пример кластера. Примеры тестовых кластеров должны быть либо удалены, либо закомментированы, или, если существует существующий кластер для тестирования, то порт должен быть обновлен, а опция
<secure>
должна быть добавлена.<user>
и<password>
должны быть установлены, если пользовательdefault
был изначально настроен на использование пароля во время установки или в файлеusers.xml
.Следующий код создает кластер с одной репликой шардов на двух серверах (по одной на каждом узле).
-
Определите значения макросов, чтобы иметь возможность создать таблицу ReplicatedMergeTree для тестирования. На
chnode1
:На
chnode2
:
5. Настройте интерфейсы SSL-TLS на узлах ClickHouse
Ниже приведены настройки, которые конфигурируются в файле конфигурации ClickHouse config.xml
.
-
Установите отображаемое имя для развертывания (по желанию):
-
Установите ClickHouse на прослушивание внешних портов:
-
Настройте порт
https
и отключите портhttp
на каждом узле: -
Настройте безопасный TCP порт ClickHouse Native и отключите порт по умолчанию без шифрования на каждом узле:
-
Настройте порт
interserver https
и отключите порт по умолчанию без шифрования на каждом узле: -
Настройте OpenSSL с сертификатами и путями.
примечаниеКаждый файл и путь должны быть обновлены, чтобы соответствовать узлу, на котором они настраиваются. Например, обновите запись
<certificateFile>
наchnode2.crt
, когда настраиваетесь на хостеchnode2
.Для получения дополнительной информации посетите https://clickhouse.com/docs/operations/server-configuration-parameters/settings/#server_configuration_parameters-openssl
-
Настройте gRPC для SSL на каждом узле:
Для получения дополнительной информации посетите https://clickhouse.com/docs/interfaces/grpc/
-
Настройте клиент ClickHouse на как минимум одном из узлов для использования SSL при соединениях в своем
config.xml
файле (по умолчанию в/etc/clickhouse-client/
): -
Отключите порты эмуляции по умолчанию для MySQL и PostgreSQL:
6. Тестирование
-
Запустите все узлы по одному:
-
Убедитесь, что защищенные порты запущены и слушают; они должны выглядеть примерно так на каждом узле:
ClickHouse Port Описание 8443 интерфейс https 9010 порт interserver https 9281 защищенный порт ClickHouse Keeper 9440 защищенный протокол Native TCP 9444 порт Raft ClickHouse Keeper -
Проверьте состояние ClickHouse Keeper Типичные команды 4 буквы (4lW) не будут работать с использованием
echo
без TLS; вот как использовать команды сopenssl
.- Начните интерактивную сессию с
openssl
- Начните интерактивную сессию с
- Отправьте команды 4LW в сессии openssl
-
Запустите клиент ClickHouse, используя флаг
--secure
и порт SSL: -
Войдите в Play UI, используя интерфейс
https
по адресуhttps://chnode1.marsnet.local:8443/play
.примечаниебраузер покажет неподписанный сертификат, так как он достигается с рабочего места, а сертификаты не находятся в корневых хранилищах CA на клиентском компьютере. При использовании сертификатов, выданных публичным органом или корпоративным CA, он должен отображаться как доверенный.
-
Создайте реплицированную таблицу:
-
Добавьте несколько строк на
chnode1
: -
Проверьте репликацию, просмотрев строки на
chnode2
:
Вывод
Эта статья сосредоточена на настройке окружения ClickHouse с SSL/TLS. Настройки будут отличаться в зависимости от различных требований в производственных средах; например, уровни проверки сертификатов, протоколы, шифры и т. д. Но теперь у вас должно быть хорошее понимание шагов, связанных с настройкой и реализацией безопасных соединений.