Кодеки шифрования
ADQM поддерживает возможность шифрования конфиденциальных данных (паролей, которые хранятся в конфигурационных файлах ClickHouse) и данных столбцов таблиц на диске с помощью алгоритма AES-128 или AES-256 в режиме GCM-SIV.
Настройка ключей шифрования
Параметры алгоритмов шифрования AES-128 и AES-256 настраиваются на странице конфигурации сервиса ADQMDB в секции Encryption, которая становится видимой при включенной опции Show advanced.

В параметрах этой секции для нужного алгоритма шифрования укажите ключ и nonce или откуда их загрузить (рекомендуется хранить ключи шифрования в переменных окружения или узлах ZooKeeper, не в конфигурационных файлах). Описание параметров приведено в соответствующем разделе статьи Конфигурационные параметры.
-
Загрузка ключей из переменных окружения:
-
В параметрах aes_128_key_env и aes_128_nonce_env укажите переменные окружения, которые содержат ключ и nonce для алгоритма шифрования соответственно.
-
Для параметра aes_128_source установите значение
from_env
.
-
-
Загрузка ключей из узлов ZooKeeper:
-
В параметрах aes_128_key_zk_path и aes_128_nonce_zk_path укажите узлы ZooKeeper, которые содержат ключ и nonce для алгоритма шифрования соответственно.
-
Для параметра aes_128_source установите значение
from_zk
.
-
-
Хранение ключей в конфигурационном файле (не рекомендуется):
-
В параметрах AES-128 GCM-SIV key и AES-128 GCM-SIV nonce укажите ключ и nonce для алгоритма шифрования соответственно.
-
Для параметра aes_128_source установите значение
none
.
-
-
Загрузка ключей из переменных окружения:
-
В параметрах aes_256_key_env и aes_256_nonce_env укажите переменные окружения, которые содержат ключ и nonce для алгоритма шифрования соответственно.
-
Для параметра aes_256_source установите значение
from_env
.
-
-
Загрузка ключей из узлов ZooKeeper:
-
В параметрах aes_256_key_zk_path и aes_256_nonce_zk_path укажите узлы ZooKeeper, которые содержат ключ и nonce для алгоритма шифрования соответственно.
-
Для параметра aes_256_source установите значение
from_zk
.
-
-
Хранение ключей в конфигурационном файле (не рекомендуется):
-
В параметрах AES-256 GCM-SIV key и AES-256 GCM-SIV nonce укажите ключ и nonce для алгоритма шифрования соответственно.
-
Для параметра aes_256_source установите значение
none
.
-
После назначения параметров нажмите Save и выполните действие Reconfig and restart для сервиса ADQMDB.
Настройки алгоритмов шифрования сохраняются в секции encryption_codecs
конфигурационного файла /etc/clickhouse-server/config.d/encryption.xml.
Применение алгоритмов шифрования данных
После того как для алгоритмов AES-128/AES-256 указаны ключи, можно включить шифрование:
-
паролей, записанных в конфигурационном файле;
-
данных столбцов таблиц на диске.
Шифрование паролей
В секции Encryption конфигурации сервиса ADQMDB установите значение параметра Credentials encrypt равным AES-128
или AES-128
. Сохраните конфигурацию и выполните сервисное действие Reconfig and restart.
После этого в конфигурационном файле /etc/clickhouse-server/credentials.xml значения следующих параметров (если они настроены) будут храниться в зашифрованном виде:
-
interserver_http_password
— пароль для аутентификации между репликами; -
shard_secret
— ключ кластера для проверки распределенных запросов на шардах; -
default_user_password
— пароль пользователя default.
<clickhouse>
<interserver_http_password>
<password hide_in_preprocessed="true" encrypted_by="AES_256_GCM_SIV">...encrypted value...</password>
</interserver_http_password>
<shard_secret>
<secret hide_in_preprocessed="true" encrypted_by="AES_256_GCM_SIV">...encrypted value...</secret>
</shard_secret>
<default_user_password>
<password hide_in_preprocessed="true" encrypted_by="AES_256_GCM_SIV">...encrypted value...</password>
</default_user_password>
</clickhouse>
ВНИМАНИЕ
Для шифрования паролей в настоящее время не поддерживается загрузка ключей из узлов ZooKeeper, если для соединений между ClickHouse и ZooKeeper используется SSL.
|
Шифрование данных столбцов таблиц
В ClickHouse алгоритм шифрования данных, применяемый к столбцу таблицы, определяется кодеком шифрования. Назначить кодек шифрования столбцу можно в запросе CREATE TABLE с помощью выражения CODEC
:
CREATE TABLE <table_name>
( <column_name1> <data_type1> CODEC(AES_128_GCM_SIV | AES_256_GCM_SIV) [...],
<column_name2> <data_type2> CODEC(AES_128_GCM_SIV | AES_256_GCM_SIV) [...],
...)
ENGINE = MergeTree()
...;
Кодеки шифрования фактически только шифруют данные столбца на диске, но не сжимают их. Если требуется применить сжатие, это нужно явно указать для столбца — для этого в выражении CODEC
перед кодеком шифрования перечислите через запятую нужные кодеки сжатия данных (сначала специализированные, затем кодеки общего назначения). Например:
CREATE TABLE <table_name>
( <column_name> <data_type> CODEC(Delta, LZ4, AES_256_GCM_SIV) [...],
...)
ENGINE = MergeTree()
...;
ВНИМАНИЕ
|
Пример
Следующий пример показывает, как указать сохраненный в ZooKeeper ключ для алгоритма шифрования данных AES-256 в ADQM, а также как применить этот алгоритм для шифрования пароля пользователя default
(должен быть установлен — см. Настройка авторизации для нового кластера) и данных столбца тестовой таблицы.
-
Создайте два узла ZooKeeper, в которых сохраните ключ и nonce для алгоритма шифрования AES-256 (для этого можно использовать консоль ZooKeeper CLI доступную на каждом хосте кластера, где установлен ZooKeeper):
$ sudo /usr/lib/zookeeper/bin/zkCli.sh
create /clickhouse/clickhouse/aes256_key_hex '00112233445566778899AABBCCDDEEFF00112233445566778899AABBCCDDEEFF' create /clickhouse/clickhouse/aes256_nonce_hex 'ABCDEFABCDEFABCDEFABCDEF'
-
В секции Encryption конфигурации сервиса ADQMDB установите следующие значения параметров:
-
aes_256_key_zk_path:
/clickhouse/aes256_key_hex
; -
es_256_nonce_zk_path:
/clickhouse/aes256_nonce_hex
; -
aes_256_source:
from_zk
; -
Credentials encrypt:
AES-256
.
Сохраните конфигурацию и запустите выполнение действия Reconfig and restart для сервиса ADQMDB.
Убедитесь, что настройки кодека шифрования сохранились в файле /etc/clickhouse-server/config.d/encryption.xml:
<clickhouse> <encryption_codecs> <aes_256_gcm_siv> <key_hex hide_in_preprocessed="true" from_zk="/clickhouse/aes256_key_hex"/> <nonce_hex hide_in_preprocessed="true" from_zk="/clickhouse/aes256_nonce_hex"/> </aes_256_gcm_siv> </encryption_codecs> </clickhouse>
-
-
Проверьте, что пароль пользователя
default
в конфигурационном файле /etc/clickhouse-server/credentials.xml теперь хранится в зашифрованном виде:<clickhouse> <default_user_password> <password hide_in_preprocessed="true" encrypted_by="AES_256_GCM_SIV">...encrypted password...</password> </default_user_password> </clickhouse>
-
Создайте таблицу ADQM и вставьте в нее тестовые данные:
CREATE TABLE encryption_test (x String CODEC(AES_256_GCM_SIV), y String) ENGINE = MergeTree ORDER BY x; INSERT INTO encryption_test VALUES ('1', '10'), ('2', '20'), ('3', '30');
Посмотрите содержимое файла /var/lib/clickhouse/data/default/encryption_test/all_1_1_0/data.bin, чтобы убедиться, что данные первого столбца таблицы хранятся на диске в зашифрованном виде.