SSL-TLS の構成
このページは ClickHouse Cloud には適用されません。ここで説明している手順は、ClickHouse Cloud サービスでは自動化されています。
このガイドでは、ClickHouse が接続を検証するために OpenSSL 証明書を使用するよう構成するための、シンプルで最小限の設定を示します。このデモンストレーションでは、自己署名の認証局 (CA) 証明書とキーを作成し、それをノード証明書と組み合わせて使用し、適切な設定で接続を確立します。
TLS の実装は複雑であり、完全に安全かつ堅牢なデプロイメントを実現するには、多くのオプションを検討する必要があります。ここで扱うのは、基本的な SSL/TLS 構成例を示す入門的なチュートリアルです。組織に適した証明書を発行する際は、PKI/セキュリティチームに相談してください。
概要をつかむために、この 証明書利用に関する基本的なチュートリアル を参照してください。
1. ClickHouse デプロイメントを作成する
このガイドは、Ubuntu 20.04 上で、以下のホストに apt を用いて DEB パッケージから ClickHouse をインストールした環境を前提としています。ドメインは marsnet.local です。
| Host | IP Address |
|---|---|
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 を使用して、新しい証明書およびキーのペアを作成します:
-
証明書の Subject および Issuer を確認します:
-
新しい証明書が CA 証明書に対して検証できることを確認します:
3. 証明書と鍵を保存するディレクトリを作成および構成する
これは各ノード上で実行する必要があります。各ホストに対して適切な証明書と鍵を使用してください。
-
各ノードで、ClickHouse からアクセス可能なディレクトリ内にディレクトリを作成します。デフォルトの設定ディレクトリ(例:
/etc/clickhouse-server)の使用を推奨します: -
各ノードに対応する CA 証明書、ノード証明書、および秘密鍵を、新しい
certsディレクトリにコピーします。 -
ClickHouse が証明書を読み取れるように、所有者とパーミッションを更新します:
4. 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/ を参照してください。 -
すべてのノードで keeper 設定のコメントアウトを解除して更新し、
<secure>フラグを 1 に設定します。 -
次のクラスタ設定を
chnode1とchnode2に追加および更新します。chnode3は ClickHouse Keeper のクォーラム用に使用します。注記この構成では、例として 1 つのクラスタのみを設定しています。テスト用のサンプルクラスタは削除するか、コメントアウトするか、既存クラスタでテストを行う場合はポートを更新し、
<secure>オプションを追加する必要があります。インストール時またはusers.xmlファイルでdefaultユーザーにパスワードを設定している場合は、<userと<password>を適切に設定する必要があります。以下の設定により、2 台のサーバー(各ノードに 1 台ずつ)上に 1 シャード 2 レプリカ構成のクラスタを作成します。
-
テスト用に ReplicatedMergeTree テーブルを作成できるよう、マクロ値を定義します。
chnode1上では次のように設定します:chnode2上では次のように設定します:
5. ClickHouse ノード上で SSL/TLS インターフェースを設定する
以下の設定は ClickHouse サーバーの config.xml で行います。
-
デプロイメントの表示名を設定する(任意):
-
ClickHouse が外部からの接続を受け付けるように設定する:
-
各ノードで
httpsポートを設定し、httpポートを無効化する: -
各ノードで ClickHouse ネイティブプロトコル用のセキュア TCP ポートを設定し、デフォルトの非セキュアなポートを無効化する:
-
各ノードで
interserver httpsポートを設定し、デフォルトの非セキュアなポートを無効化する: -
証明書とパスを指定して OpenSSL を設定する
注記それぞれのファイル名とパスは、設定対象のノードに合わせて更新する必要があります。 たとえば、
chnode2ホストを設定する場合は<certificateFile>の値をchnode2.crtに更新します。詳細については https://clickhouse.com/docs/operations/server-configuration-parameters/settings/#server_configuration_parameters-openssl を参照してください。
-
すべてのノードで SSL を有効にするよう gRPC を設定する:
詳細については https://clickhouse.com/docs/interfaces/grpc/ を参照してください。
-
少なくとも 1 つのノード上で、そのノードの
config.xmlファイル(デフォルトでは/etc/clickhouse-client/)を編集し、ClickHouse クライアントが接続に SSL を使用するように設定する: -
MySQL および PostgreSQL のデフォルトのエミュレーションポートを無効化します:
6. テスト
-
すべてのノードを、1つずつ起動します:
-
セキュアなポートが起動して待ち受けていることを確認します。各ノードで、次の例と同様の出力が得られるはずです:
ClickHouse Port 説明 8443 HTTPS インターフェイス 9010 サーバー間 HTTPS ポート 9281 ClickHouse Keeper セキュアポート 9440 セキュアなネイティブ TCP プロトコル用ポート 9444 ClickHouse Keeper Raft ポート -
ClickHouse Keeper の状態を確認します
通常の 4 letter word (4lW) コマンドは、TLS を使用せずにechoを使った場合は動作しません。ここではopensslを使ってそれらのコマンドを実行する方法を示します。opensslでインタラクティブセッションを開始します
-
openssl セッション内で 4LW コマンドを実行します
-
--secureフラグと SSL ポートを使用して ClickHouse クライアントを起動します: -
https://chnode1.marsnet.local:8443/playのhttpsインターフェースを使用して Play UI にログインします。
注記この接続はワークステーションから行われ、証明書がクライアントマシンのルート CA ストアに存在しないため、ブラウザには証明書が信頼されていないものとして表示されます。 公的な認証局または企業内 CA が発行した証明書を使用している場合は、信頼された証明書として表示されます。
-
レプリケートテーブルを作成します:
-
chnode1上で 2 行のデータを追加します: -
chnode2上で行を表示し、レプリケーションを検証します:
まとめ
この記事では、ClickHouse 環境で SSL/TLS を用いたセキュア接続の設定方法に焦点を当てました。本番環境では要件に応じて、たとえば証明書検証レベル、プロトコル、暗号スイートなどの設定は異なります。ここまでの内容により、安全な接続を構成・実装するために必要な手順を把握できているはずです。