SSL-TLSの構成
このページは ClickHouse Cloud に適用されません。ここに記載された手順は、ClickHouse Cloud サービスで自動化されています。
このガイドでは、ClickHouseを構成してOpenSSL証明書を使用して接続を検証するためのシンプルで最小限の設定を提供します。このデモでは、自己署名の証明書機関(CA)証明書とキーを作成し、適切な設定で接続を行うためのノード証明書を作成します。
TLSの実装は複雑であり、完全に安全で堅牢な展開を確保するために考慮すべき多くのオプションがあります。これは基本的なSSL/TLS構成の例を含む基本的なチュートリアルです。組織のために正しい証明書を生成するには、PKI/セキュリティチームに相談してください。
証明書の使用に関するこの基本的なチュートリアルを確認して、概要を把握してください。
1. ClickHouseのデプロイメントを作成する
このガイドは、Ubuntu 20.04を使用し、DEBパッケージ(aptを使用)を使用して次のホストにClickHouseをインストールして書かれています。ドメインは marsnet.local
です。
ホスト | IPアドレス |
---|---|
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証明書、ノード証明書、および各ノードに対応するキーを新しい証明書ディレクトリにコピーします。
-
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>
は、インストール時またはusers.xml
ファイル内でdefault
ユーザーがパスワードを持つように最初に構成されている場合は設定する必要があります。次のコマンドは、2つのサーバー(各ノードに1つずつ)で1つのシャードレプリカを持つクラスターを作成します。
- テスト用に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つで、接続にSSLを使用するようにClickHouseクライアントを設定します(デフォルトでは
/etc/clickhouse-client/
にあります):
- 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://chnode1.marsnet.local:8443/play
のhttps
インターフェースを使用してPlay UIにログインします。注記ブラウザは信頼されていない証明書を表示します。なぜなら、ワークステーションからアクセスされており、クライアントマシンのルートCAストアに証明書がないからです。 公的な機関または企業CAから発行された証明書を使用している場合は、信頼されていると表示されるべきです。
-
レプリケートテーブルを作成します:
chnode1
に行をいくつか追加します:
chnode2
で行を表示してレプリケーションを確認します:
まとめ
この記事では、ClickHouse環境をSSL/TLSで構成することに焦点を当てました。本番環境での要件によって設定は異なります。たとえば、証明書検証レベル、プロトコル、暗号スイートなどです。ただし、セキュアな接続を構成し実装する手順について良い理解を持っているはずです。