SSL-TLSの設定
このページは ClickHouse Cloud には適用されません。ここに記載されている手順は、ClickHouse Cloud サービスで自動化されています。
このガイドでは、ClickHouseをOpenSSL証明書を使用して接続を検証するために構成するための簡単かつ最小限の設定を提供します。このデモでは、自己署名の認証局 (CA) 証明書とキーを作成し、適切な設定で接続を確立するためのノード証明書を作成します。
TLSの実装は複雑であり、完全に安全で堅牢な展開を確保するために考慮すべきオプションが多数あります。これは基礎的なSSL/TLS設定の例を含む基本的なチュートリアルです。適切な証明書を生成するために、PKI/securityチームに相談してください。
証明書の使用に関する基本的なチュートリアルを確認して、基本的な概要を把握してください。
1. ClickHouseのデプロイメントを作成
このガイドは、Ubuntu 20.04および以下のホストにDEBパッケージ(aptを使用)でインストールされた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を使用して、新しい証明書とキーのペアを作成します:
-
主題と発行者を確認します:
-
新しい証明書が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>
オプションを追加する必要があります。<user>
と<password>
は、デフォルトユーザーに初期設定時にパスワードが付与されている場合には設定する必要があります。次の内容は、2つのサーバーで1つのシャードレプリカを持つクラスターを作成します(各ノードに1つずつ)。
-
テストのためにReplicatedMergeTreeテーブルを作成できるようにマクロの値を定義します。
chnode1
で:chnode2
で:
5. ClickHouseノードのSSL-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をSSL用に構成します:
詳細については、https://clickhouse.com/docs/interfaces/grpc/ を訪れてください。
-
少なくとも1つのノードでClickHouseクライアントを構成し、
config.xml
ファイル(デフォルトは/etc/clickhouse-client/
)で接続にSSLを使用させます: -
MySQLおよびPostgreSQLのデフォルトエミュレーションポートを無効にします:
6. テスト
-
すべてのノードを1つずつ起動します:
-
安全なポートが起動してリッスンしているか確認し、各ノードで次のように表示されるはずです:
ClickHouseポート 説明 8443 httpsインターフェイス 9010 interserver httpsポート 9281 ClickHouse Keeper安全ポート 9440 安全なNative TCPプロトコル 9444 ClickHouse Keeper Raftポート -
ClickHouse Keeperの健康状態を確認します 一般的な4文字のコマンド (4lW)は、TLSなしで
echo
を使用しては機能しません。ここでは、openssl
を使用してコマンドを実行する方法を示します。openssl
でインタラクティブセッションを開始します
- opensslセッション内で4LWコマンドを送信します
-
--secure
フラグとSSLポートを使用してClickHouseクライアントを起動します: -
https
インターフェイスを通してhttps://chnode1.marsnet.local:8443/play
でPlay UIにログインします。注記ブラウザは信頼されていない証明書を表示します。これは、ワークステーションからアクセスされており、クライアントマシンのルートCAストアに証明書がないためです。 公的機関または企業CAから発行された証明書を使用する場合、信頼されていることを示すべきです。
-
複製テーブルを作成します:
-
chnode1
でいくつかの行を追加します: -
chnode2
で行を表示して複製を確認します:
まとめ
この記事は、SSL/TLSで構成されたClickHouse環境のセットアップに焦点を当てました。本番環境での要件によって設定は異なります。たとえば、証明書の検証レベル、プロトコル、暗号などです。しかし、これで安全な接続の設定と実装に関する手順についての良い理解が得られるはずです。