Настройка 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, сертификат узла и ключ, соответствующий каждому узлу, в новый каталог certs.
-
Обновите владельца и разрешения, чтобы ClickHouse мог читать сертификаты:
4. Настройка окружения с базовыми кластерами с использованием ClickHouse Keeper
Для этой среды развертывания используются следующие настройки ClickHouse Keeper на каждом узле. Каждый сервер будет иметь свой собственный <server_id>
. (Например, <server_id>1</server_id>
для узла chnode1
и так далее.)
Рекомендуемый порт - 9281
для ClickHouse Keeper. Однако порт можно настроить и изменить, если этот порт уже используется другим приложением в окружении.
Для полного объяснения всех параметров посетите 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
Настройки ниже конфигурируются в 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
-
Настройте gRPC для SSL на каждом узле:
Для получения дополнительной информации посетите https://clickhouse.com/docs/interfaces/grpc/
-
Настройте клиент ClickHouse на одном из узлов для использования SSL для соединений в своем собственном файле
config.xml
(по умолчанию в/etc/clickhouse-client/
): -
Отключите стандартные эмуляционные порты для MySQL и PostgreSQL:
6. Тестирование
-
Запустите все узлы, по одному за раз:
-
Проверьте, что защищенные порты активны и прослушиваются, должно выглядеть примерно так на каждом узле:
ClickHouse Port Описание 8443 интерфейс https 9010 порт межсерверного https 9281 защищенный порт ClickHouse Keeper 9440 защищённый протокол Native TCP 9444 порт Raft ClickHouse Keeper -
Проверьте здоровье ClickHouse Keeper Типичные команды 4 letter word (4lW) не будут работать с использованием
echo
без TLS, вот как использовать команды сopenssl
.- Запустите интерактивную сессию с
openssl
- Запустите интерактивную сессию с
- Отправьте команды 4LW в сеансе openssl
-
Запустите клиент ClickHouse с использованием флага
--secure
и порта SSL: -
Войдите в пользовательский интерфейс Play, используя интерфейс
https
по адресуhttps://chnode1.marsnet.local:8443/play
.примечаниебраузер покажет недоверенный сертификат, так как он был достигнут с рабочего места, и сертификаты не находятся в корневых CA в хранилищах на клиентской машине. При использовании сертификатов, выданных публичным органом или корпоративным CA, он должен отображаться как доверенный.
-
Создайте реплицированную таблицу:
-
Добавьте несколько строк на
chnode1
: -
Проверьте репликацию, просматривая строки на
chnode2
:
Резюме
Эта статья сосредоточена на получении среды ClickHouse, настроенной с SSL/TLS. Настройки будут отличаться для различных требований в производственных средах; например, уровни проверки сертификатов, протоколы, шифры и т.д. Но теперь у вас должно быть хорошее понимание шагов, связанных с конфигурацией и внедрением защищенных соединений.