Настройка 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
, и так далее.)
Рекомендуемый порт — 9281
для ClickHouse Keeper. Однако порт можно настроить и задать, если этот порт уже используется другим приложением в окружении.
Для полного объяснения всех параметров посетите 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 | порт ClickHouse Keeper Raft |
- Проверьте состояние 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. Настройки будут различаться в зависимости от различных требований в производственных средах; например, уровни проверки сертификатов, протоколы, шифры и т. д. Но теперь у вас должно быть хорошее понимание шагов, связанных с настройкой и реализацией безопасных соединений.