このガイドでは、SSL ユーザー証明書を使用した認証を設定するための、シンプルで最小限の設定について説明します。このチュートリアルは、TLS の設定ガイドを前提としています。
SSLユーザー証明書を作成する
- Certificate Signing Request (CSR) と秘密鍵を生成します。基本的な形式は次のとおりです。
この例では、このサンプル環境で使用するドメインとユーザーに対して次を使用します。openssl req -newkey rsa:2048 -nodes -subj "/CN=<my_host>:<my_user>" -keyout <my_cert_name>.key -out <my_cert_name>.csropenssl req -newkey rsa:2048 -nodes -subj "/CN=chnode1.marsnet.local:cert_user" -keyout chnode1_cert_user.key -out chnode1_cert_user.csr
- 認証に使用する新しいユーザー証明書を生成して署名します。基本的な形式は次のとおりです。
この例では、このサンプル環境で使用するドメインとユーザーに対して次を使用します。openssl x509 -req -in <my_cert_name>.csr -out <my_cert_name>.crt -CA <my_ca_cert>.crt -CAkey <my_ca_cert>.key -days 365openssl x509 -req -in chnode1_cert_user.csr -out chnode1_cert_user.crt -CA marsnet_ca.crt -CAkey marsnet_ca.key -days 365
SQLユーザーを作成し、権限を付与する
-
証明書認証を使用する SQL ユーザーを作成します。
CREATE USER cert_user IDENTIFIED WITH ssl_certificate CN 'chnode1.marsnet.local:cert_user'; -
新しい証明書ユーザーに権限を付与します。
GRANT ALL ON *.* TO cert_user WITH GRANT OPTION;
検証
-
ユーザー証明書、ユーザー秘密鍵、および CA 証明書をリモートノードにコピーします。
-
証明書とパスを指定して、ClickHouse の client config で OpenSSL を設定します。
<openSSL> <client> <certificateFile>my_cert_name.crt</certificateFile> <privateKeyFile>my_cert_name.key</privateKeyFile> <caConfig>my_ca_cert.crt</caConfig> </client> </openSSL> -
clickhouse-clientを実行します。clickhouse-client --user <my_user> --query 'SHOW TABLES'
HTTP のテスト
-
ユーザー証明書、ユーザー秘密鍵、および CA 証明書をリモートノードにコピーします。
-
curlを使用してサンプルの SQL コマンドをテストします。基本的な形式は次のとおりです。echo 'SHOW TABLES' | curl 'https://<clickhouse_node>:8443' --cert <my_cert_name>.crt --key <my_cert_name>.key --cacert <my_ca_cert>.crt -H "X-ClickHouse-SSL-Certificate-Auth: on" -H "X-ClickHouse-User: <my_user>" --data-binary @-例:
echo 'SHOW TABLES' | curl 'https://chnode1:8443' --cert chnode1_cert_user.crt --key chnode1_cert_user.key --cacert marsnet_ca.crt -H "X-ClickHouse-SSL-Certificate-Auth: on" -H "X-ClickHouse-User: cert_user" --data-binary @-出力は次のようになります。
INFORMATION_SCHEMA default information_schema system
まとめ
この記事では、SSL証明書認証用のユーザーを作成して設定するための基本事項を説明しました。この方法は、clickhouse-client、または https インターフェイスをサポートし、HTTPヘッダーを設定できる任意のクライアントで使用できます。生成された証明書と秘密鍵は、証明書が ClickHouse データベース上の操作に対するユーザーの認証と認可に使用されるため、非公開にし、アクセスを制限して保管してください。証明書と秘密鍵は、パスワードと同様に扱ってください。