Настройка SSL-TLS
Эта страница не применима к ClickHouse Cloud. Процедура, описанная здесь, автоматизирована в сервисах ClickHouse Cloud.
Этот гайд предоставляет простые и минимальные настройки для конфигурации ClickHouse с использованием сертификатов OpenSSL для валидации соединений. В этом демонстрационном примере создается самоподписанный сертификат и ключ удостоверяющего центра (CA) с сертификатами узлов, чтобы установить соединения с соответствующими настройками.
Реализация TLS является сложной, и существует множество вариантов, которые необходимо учитывать для обеспечения полностью безопасного и надежного развертывания. Это базовый учебник с примерами базовой конфигурации SSL/TLS. Проконсультируйтесь с вашей командой PKI/безопасности, чтобы сгенерировать правильные сертификаты для вашей организации.
Ознакомьтесь с этим базовым руководством по использованию сертификатов для получения вводного обзора.
1. Создать развертывание ClickHouse
Этот гайд был написан с использованием Ubuntu 20.04 и ClickHouse, установленного на следующих хостах с использованием пакета DEB (через apt). Домен — marsnet.local
:
Хост | IP-адрес |
---|---|
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>
в файлеconfig.xml
сервера ClickHouseпримечаниеДля производственных сред, рекомендуется использовать отдельный файл конфигурации
.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
Настройки ниже настраиваются в файле config.xml
сервера ClickHouse
-
Установите имя отображения для развертывания (по желанию):
-
Установите 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 Описание 8443 интерфейс https 9010 порт interserver https 9281 безопасный порт ClickHouse Keeper 9440 безопасный протокол Native TCP 9444 порт Raft ClickHouse Keeper -
Проверьте здоровье ClickHouse Keeper Типичные команды четырехбуквенного слова (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. Настройки будут отличаться для различных требований в производственных средах; например, уровни проверки сертификатов, протоколы, шифры и т. д. Но теперь у вас должно быть хорошее понимание шагов, вовлеченных в конфигурирование и реализацию безопасных соединений.