Настройка TLS
Эта страница не относится к ClickHouse Cloud. Описанная здесь процедура выполняется автоматически в сервисах ClickHouse Cloud.
В этом руководстве приводятся простые и минимальные настройки для конфигурирования ClickHouse на использование сертификатов OpenSSL при проверке соединений. В рамках этого примера создаются самоподписанные сертификат и ключ центра сертификации (CA), а также сертификаты узлов для установления соединений с соответствующими настройками.
Реализация TLS — сложная задача, и существует множество вариантов, которые необходимо учитывать для обеспечения полностью безопасного и надежного развертывания. Это базовое руководство с простыми примерами конфигурации 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 |
См. раздел Quick Start для более подробной информации по установке ClickHouse.
2. Создайте TLS-сертификаты
Самоподписанные сертификаты предназначены только для демонстрационных целей и не должны использоваться в рабочей (production) среде. Запросы на сертификаты должны создаваться для подписи вашей организацией и проверяться с использованием цепочки сертификатов 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 и так далее.)
Рекомендуемый порт для 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. Настройка TLS-интерфейсов на узлах ClickHouse
Параметры ниже настраиваются в config.xml сервера ClickHouse.
-
Задайте отображаемое имя для развертывания (необязательно):
-
Разрешите ClickHouse прослушивать внешние интерфейсы:
-
Настройте порт
httpsи отключите портhttpна каждом узле: -
Настройте защищенный ClickHouse Native TCP-порт и отключите незащищенный порт по умолчанию на каждом узле:
-
Настройте порт
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:
6. Тестирование
-
Запустите все узлы по очереди:
-
Убедитесь, что защищённые порты запущены и прослушиваются; на каждом узле вывод должен выглядеть примерно так:
Порт ClickHouse Описание 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и через TLS-порт: -
Войдите в Play UI через интерфейс
httpsпо адресуhttps://chnode1.marsnet.local:8443/play.
Примечаниебраузер покажет недоверенный сертификат, поскольку доступ осуществляется с рабочей станции, а сертификаты отсутствуют в хранилищах корневых центров сертификации на клиентской машине. При использовании сертификатов, выданных публичным или корпоративным центром сертификации, сертификат будет отображаться как доверенный.
-
Создайте реплицируемую таблицу:
-
Добавьте пару строк на
chnode1: -
Проверьте репликацию, просмотрев строки на
chnode2:
Итоги
В этой статье основное внимание было уделено настройке среды ClickHouse с использованием TLS. Параметры будут отличаться в зависимости от требований в продуктивных средах, например уровни проверки сертификатов, протоколы, шифры и т. д. Теперь у вас должно быть хорошее понимание последовательности шагов по настройке и использованию защищённых соединений.