TLS の設定
このページは ClickHouse Cloud には適用されません。ここで説明している手順は、ClickHouse Cloud サービスでは自動化されています。
このガイドでは、ClickHouse が接続を検証するために OpenSSL 証明書を使用するよう構成するための、シンプルで最小限の設定方法を説明します。このデモンストレーションでは、自己署名の認証局 (CA) 証明書と秘密鍵を作成し、ノード証明書とともに使用して、適切な設定で接続を確立します。
TLS の実装は複雑であり、完全に安全で堅牢なデプロイメントを実現するには、多くのオプションを検討する必要があります。ここでは、基本的な TLS 構成例のみを扱う入門的なチュートリアルです。組織に適した証明書を生成するには、PKI / セキュリティチームに相談してください。
概要レベルの導入として、この 証明書の利用に関する基本チュートリアル を参照してください。
TLS 証明書を作成する
自己署名証明書の使用はデモ目的に限られ、本番環境では使用すべきではありません。証明書要求は組織によって署名されるように作成し、設定で構成される CA チェーンを使用して検証する必要があります。ただし、これらの手順は設定の構成とテストに使用でき、その後、実際に使用する証明書に置き換えることができます。
-
新しい CA に使用する鍵を生成します:
-
新しい自己署名 CA 証明書を生成します。以下のコマンドは、CA 鍵を使用して他の証明書に署名するための新しい証明書を作成します:
注記鍵と CA 証明書は、クラスタの外部にある安全な場所にバックアップしてください。ノード証明書の生成後、この鍵はクラスタノードから削除する必要があります。
-
新しい CA 証明書の内容を確認します:
-
各ノードについて、証明書要求(CSR)を作成し、鍵を生成します:
-
CSR と CA を使用して、新しい証明書と鍵のペアを作成します:
-
証明書のサブジェクトと発行者を確認します:
-
新しい証明書が CA 証明書に対して検証されることを確認します:
証明書と鍵を保存するディレクトリを作成して設定する。
これは各ノードで実行する必要があります。各ホストでは適切な証明書と鍵を使用してください。
-
各ノードで、ClickHouse からアクセス可能なディレクトリにフォルダを作成します。デフォルトの設定ディレクトリ(例:
/etc/clickhouse-server)を使用することを推奨します: -
CA 証明書と、各ノードに対応するノード証明書および鍵を、新しい certs ディレクトリにコピーします。
-
ClickHouse が証明書を読み取れるように、所有者とパーミッションを更新します:
ClickHouse Keeper を使用して基本クラスタで環境を構成する
このデプロイ環境では、各ノードで以下の ClickHouse Keeper 設定を使用します。各サーバーはそれぞれ独自の <server_id> を持ちます。(たとえば、ノード chnode1 では <server_id>1</server_id> です。以下同様です。)
ClickHouse Keeper の推奨ポートは 9281 です。ただし、このポートは構成可能であり、環境内で別のアプリケーションがすでに使用している場合は変更できます。
すべてのオプションの完全な説明については、https://clickhouse.com/docs/operations/clickhouse-keeper/ を参照してください。
-
ClickHouse サーバーの
config.xmlの<clickhouse>タグ内に以下を追加します注記本番環境では、
config.dディレクトリ内の個別の.xml設定ファイルを使用することを推奨します。 詳細については、https://clickhouse.com/docs/operations/configuration-files/ を参照してください。注記ClickHouse Keeper が ClickHouse サーバーに埋め込まれている場合(上記のとおり)、Keeper は ClickHouse ノードで TLS インターフェースを設定する の OpenSSL セクションで定義されたサーバーの OpenSSL 設定を使用します。ClickHouse Keeper をスタンドアロンプロセスとして実行する場合は、同じ CA 証明書とノード証明書/鍵の設定を含む
<openSSL>セクションを Keeper 設定ファイルに追加する必要があります。詳細については、以下の スタンドアロンの ClickHouse Keeper 向けに OpenSSL を設定する を参照してください。 -
すべてのノードで keeper 設定のコメントを解除して更新し、
<secure>フラグを 1 に設定します: -
chnode1とchnode2に、以下のクラスタ設定を更新して追加します。chnode3は ClickHouse Keeper クォーラムに使用されます。注記この構成では、1 つのサンプルクラスタのみを構成します。テスト用サンプルクラスタは削除するか、コメントアウトする必要があります。あるいは、テスト対象の既存クラスタがある場合は、ポートを更新し、
<secure>オプションを追加する必要があります。インストール時またはusers.xmlファイルでdefaultユーザーに最初からパスワードが設定されていた場合は、<userと<password>を設定する必要があります。以下により、2 台のサーバー(各ノードに 1 台ずつ)上に、1 シャード 2 レプリカのクラスタが作成されます。
-
テスト用の ReplicatedMergeTree テーブルを作成できるように、macros の値を定義します。
chnode1では:chnode2では:
ClickHouse ノードで TLS インターフェースを設定する
以下の設定は ClickHouse サーバーの config.xml で構成します
-
デプロイメントの表示名を設定します(任意):
-
ClickHouse が外部ポートで待ち受けるように設定します:
-
各ノードで
httpsポートを構成し、httpポートを無効にします: -
各ノードで ClickHouse Native のセキュアな TCP ポートを構成し、デフォルトの非セキュアポートを無効にします:
-
各ノードで
interserver httpsポートを構成し、デフォルトの非セキュアポートを無効にします: -
証明書とパスを指定して OpenSSL を構成します
注記各ファイル名とパスは、設定対象のノードに合わせて更新する必要があります。 たとえば、
chnode2ホストで設定する場合は、<certificateFile>エントリをchnode2.crtに更新します。詳細については、https://clickhouse.com/docs/operations/server-configuration-parameters/settings/#server_configuration_parameters-openssl を参照してください。
-
すべてのノードで gRPC 用の TLS を構成します:
詳細については、https://clickhouse.com/docs/interfaces/grpc/ を参照してください。
-
少なくとも 1 つのノードで、ClickHouse クライアントが接続に TLS を使用するように、そのノード自身の
config.xmlファイル(デフォルトでは/etc/clickhouse-client/)で設定します: -
MySQL と PostgreSQL のデフォルトのエミュレーションポートを無効にします:
テスト
-
すべてのノードを 1 台ずつ起動します:
-
セキュアポートが起動して待ち受けていることを確認します。各ノードで、次の例のように表示されるはずです:
ClickHouse Port Description 8443 https インターフェース 9010 interserver https ポート 9281 ClickHouse Keeper セキュアポート 9440 セキュアな Native TCP プロトコル 9444 ClickHouse Keeper Raft ポート -
ClickHouse Keeper の正常性を確認します The typical 4 letter word (4lW) commands won't work using
echowithout TLS, here is how to use the commands withopenssl.opensslで対話セッションを開始します
-
OpenSSL セッションで 4LW コマンドを送信します
-
--secureフラグと TLS ポートを指定して ClickHouse クライアントを起動します: -
https://chnode1.marsnet.local:8443/playにあるhttpsインターフェースを使用して Play UI にログインします。
注記ワークステーションからアクセスしており、証明書がクライアントマシンのルート CA ストアに含まれていないため、ブラウザには信頼されていない証明書として表示されます。 公開認証局またはエンタープライズ CA によって発行された証明書を使用している場合は、信頼済みとして表示されるはずです。
-
レプリケートテーブルを作成します:
-
chnode1に数行追加します: -
chnode2で行を表示してレプリケーションを確認します:
スタンドアロンの ClickHouse Keeper 向けに OpenSSL を設定する
ClickHouse Keeper をスタンドアロン プロセスとして実行する場合 (ClickHouse サーバーに組み込むのではなく) 、OpenSSL の証明書と設定は Keeper の設定ファイルで個別に設定する必要があります。これを行わないと、Keeper はクライアント通信用のセキュアな接続 (tcp_port_secure) や、Keeper ノード間の Raft レプリケーションのためのセキュアな接続を確立できません。
各ノードのスタンドアロン ClickHouse Keeper 設定ファイルに、次の <openSSL> セクションを追加します。
各ファイル名は、設定対象のノードに合わせて更新する必要があります。
たとえば、chnode2 ホストで設定する場合は、<certificateFile> の項目を chnode2.crt に更新します。
<server> セクションは、セキュアな Keeper ポート (tcp_port_secure) で受信するクライアント接続に使用します。<client> セクションは、Raft レプリケーション中に Keeper ノード間で確立される送信接続に使用します。
上記の証明書パスには /etc/clickhouse-keeper/certs/ を使用しています。これはスタンドアロンの Keeper インストールで一般的なパスです。別のパスで Keeper をインストールした場合は、それに合わせて調整してください。証明書自体は、手順 2 で作成したものと同じです。
要約
この記事では、ClickHouse 環境で TLS を用いた設定方法に焦点を当てました。本番環境では要件に応じて、証明書検証レベル、プロトコル、暗号スイートなどの設定が異なります。ここまでの内容により、安全な接続を構成し実装するための手順について十分に理解できているはずです。