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証明書、ノード証明書、キーを新しい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
の<remote_servers>
セクションに次のクラスター設定を更新して追加します。chnode3
はClickHouse Keeperの過半数として使用されます。注記この構成では、1つの例としてクラスターが構成されています。テストサンプルクラスターは削除、コメントアウトするか、既存のクラスターがテスト中であればポートを更新し、
<secure>
オプションを追加する必要があります。デフォルトユーザーがインストール時またはusers.xml
ファイルにパスワードを設定されている場合は、<user>
と<password>
を設定する必要があります。以下は、2つのサーバー(各ノードに1つ)のシャードレプリカを持つクラスターを作成します。
-
テスト用のReplicatedMergeTreeテーブルを作成できるようにマクロ値を定義します。
chnode1
では:chnode2
では:
5. ClickHouseノードでSSL-TLSインターフェースを構成する
以下の設定は、ClickHouseサーバーのconfig.xml
に構成されます。
-
デプロイメントの表示名を設定します(オプション):
-
ClickHouseが外部ポートでリッスンするように設定します:
-
各ノードの
https
ポートを構成し、http
ポートを無効にします: -
各ノードでClickHouse NativeセキュアTCPポートを構成し、デフォルトの非セキュアポートを無効にします:
-
各ノードで
interserver https
ポートを構成し、デフォルトの非セキュアポートを無効にします: -
OpenSSLを証明書とパスで構成します
注記各ファイル名とパスは、構成されるノードに合わせて更新する必要があります。 例えば、
chnode2
ホストで構成する際に<certificateFile>
項目をchnode2.crt
に更新します。 -
各ノードでSSL用にgRPCを構成します:
詳細情報については、https://clickhouse.com/docs/interfaces/grpc/をご覧ください。
-
少なくとも1つのノードのClickHouseクライアントをSSL接続を使用するように設定します(デフォルトでは
/etc/clickhouse-client/
にあります): -
MySQLおよびPostgreSQLのデフォルトエミュレーションポートを無効にします:
6. テスト
-
ノードを一つずつ起動します:
-
セキュアポートが起動してリッスンしていることを確認します。各ノードでの出力は次のようになります:
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コマンドを送信します:
-
ClickHouseクライアントを
--secure
フラグとSSLポートを使用して起動します: -
https
インターフェースを使用してPlay UIにログインします:https://chnode1.marsnet.local:8443/play
。注記ブラウザは信頼されていない証明書を表示します。これは、ワークステーションからアクセスされており、証明書がクライアントマシンのルートCAストアに存在しないためです。 公的な権威または企業CAから発行された証明書を使用すると、信頼されることになります。
-
レプリケートテーブルを作成します:
-
chnode1
にいくつかの行を追加します: -
chnode2
で行を表示してレプリケーションを確認します:
まとめ
この記事では、SSL/TLSで構成されたClickHouse環境の設定に焦点を当てました。設定は本番環境での異なる要件に応じて異なります。たとえば、証明書の検証レベル、プロトコル、暗号などです。しかし、設定および安全な接続を実装するために関与するステップを理解できたと思います。