TLS の設定
このページは ClickHouse Cloud には適用されません。ここで説明している手順は、ClickHouse Cloud サービスでは自動化されています。
このガイドでは、ClickHouse が接続を検証するために OpenSSL 証明書を使用するよう構成するための、シンプルで最小限の設定方法を説明します。このデモンストレーションでは、自己署名の認証局 (CA) 証明書と秘密鍵を作成し、ノード証明書とともに使用して、適切な設定で接続を確立します。
TLS の実装は複雑であり、完全に安全で堅牢なデプロイメントを実現するには、多くのオプションを検討する必要があります。ここでは、基本的な 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. TLS 証明書を作成する
自己署名証明書の使用はデモ目的に限定され、本番環境では使用すべきではありません。証明書要求は組織によって署名されるように作成し、設定で構成する予定の 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ファイルでdefaultUSER にパスワードを設定している場合は、<userおよび<password>を設定する必要があります。次の設定により、2 台のサーバー(各ノード 1 台ずつ)に、1 分片・2 レプリカ構成のクラスタが作成されます。
-
テスト用に ReplicatedMergeTree テーブルを作成できるよう、マクロの値を定義します。
chnode1の設定:chnode2の設定:
5. ClickHouse ノード上での 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 を参照してください。
-
すべてのノードで gRPC 用の TLS を設定します:
詳細については、https://clickhouse.com/docs/interfaces/grpc/ を参照してください。
-
少なくとも 1 つのノード上で、ClickHouse クライアントが接続に TLS を使用するよう、そのノード自身の
config.xmlファイル(デフォルトでは/etc/clickhouse-client/)を設定します: -
MySQL および PostgreSQL のデフォルトのエミュレーション用ポートを無効にします:
6. テスト
-
すべてのノードを、1 つずつ起動します:
-
セキュアなポートが起動して待ち受けていることを確認します。各ノードで、次の例と同様の出力が得られます:
ClickHouse ポート 説明 8443 HTTPS インターフェース 9010 サーバー間 HTTPS ポート 9281 ClickHouse Keeper セキュアポート 9440 セキュア Native TCP プロトコル 9444 ClickHouse Keeper Raft ポート -
ClickHouse Keeper の状態を確認します 一般的な 4 letter word (4lW) コマンドは、TLS なしで
echoを使っても動作しません。opensslを使ってこれらのコマンドを実行する方法を以下に示します。opensslで対話型セッションを開始します
-
OpenSSL セッション内で 4LW コマンドを実行します
-
--secureフラグと TLS ポートを使用して ClickHouse クライアントを起動します: -
https://chnode1.marsnet.local:8443/playのhttpsインターフェイスを使用して Play UI にログインします。
注記ワークステーションからアクセスしており、証明書がクライアントマシンのルート CA ストアに存在しないため、ブラウザには信頼されていない証明書である旨の警告が表示されます。 パブリック認証局または企業内 CA が発行した証明書を使用する場合は、信頼された証明書として扱われます。
-
レプリケーション対応テーブルを作成します:
-
chnode1上で数行のデータを追加します: -
chnode2上で行を表示し、レプリケーションを検証します:
要約
この記事では、ClickHouse 環境で TLS を用いた設定方法に焦点を当てました。本番環境では要件に応じて、証明書検証レベル、プロトコル、暗号スイートなどの設定が異なります。ここまでの内容により、安全な接続を構成し実装するための手順について十分に理解できているはずです。