Group ReplicationクラスタのSSL構成
Group ReplicationクラスタでのSSL構成について学習します。
Group Replication用のデータベース・クラスタSSL構成の概要
クラスタ化されたデータベース環境には、1つのプライマリ・ノードと1つ以上のセカンダリ・ノードを構成する異なるノードが含まれます。一度に1つのプライマリ・ノードのみが存在できます。各ノードには、MySQLデータベース・インスタンスを持つ固有の個別ホスト名があり、その特定のノードの個別の構成によって維持されます。クラスタ内のすべてのノードが集合的にデータベースを表します。
また、データベースに接続しようとするクライアントの最初の接点であるルーターもあります。
SSL接続を有効にする場合、すべてのデータベース・ノードとルーターに独自の認可キーとサーバー証明書が必要です。これらの証明書は、共通認証局(CA)によって認可される必要があります。
-
ca.pem: 共通CA (認証局)の証明書 -
server-cert.pem: データベース・ノードを識別するためにCAによって認定されている証明書 -
server-key.pem: 個々のデータベース・ノードの秘密キー -
router-cert.pem: ルーターを識別するためにCAによって認定されている証明書 -
router-key.pem: ルーターの秘密キー
次の表で、ルーターおよびデータベース・ノードの構成について説明します。この説明のために、次の例は1つのルーターと3つのデータベース・ノードを示しています。
表9-1 ルーターおよびデータベース・ノードの構成
| ルーター | - |
|---|---|
|
ホスト名 |
|
|
構成ファイル名 |
|
|
ポート |
|
|
共通名 |
|
|
証明書名 |
|
|
キー・ファイル名 |
|
|
データベース・ノード1 |
- |
|
ホスト名 |
|
|
構成ファイル名 |
|
|
ポート |
|
|
共通名 |
|
|
証明書名 |
|
|
キー・ファイル名 |
|
|
ノード・ランク |
プライマリ |
|
データベース・ノード2 |
- |
|
ホスト名 |
|
|
構成ファイル名 |
|
|
ポート |
|
|
共通名 |
|
|
証明書名 |
|
|
キー・ファイル名 |
|
|
ノード・ランク |
セカンダリ |
|
データベース・ノード3 |
- |
|
ホスト名 |
|
|
構成ファイル名 |
|
|
ポート |
|
|
共通名 |
|
|
証明書名 |
|
|
キー・ファイル名 |
|
|
ノード・ランク |
セカンダリ |
サーバー証明書の作成
ルーターおよびデータベース・ノードの構成を開始する前に、SSLサーバー証明書を作成する必要があります。SSLを使用してデータベース・ノードおよびルーターを接続するには、セキュアな通信のために適切なSSLキーおよび証明書が必要です。すべての証明書が、共通認証局(CA)によって認識される必要があります。データベース/ルーターのインストール中にキーおよび証明書が自動生成された場合(または自己署名された場合)、接続が失敗する可能性があります。続行できるのは、CAによって承認された証明書のみです。
認可されたサーバー・キーおよび証明書がすでに使用可能な場合は、証明書に正しい権限があり、ルーター/データベース・ノードの正しいパスに配置されていることを確認します。
サーバーのSSL証明書を生成するステップは、次を参照してください:
SSL証明書を構成するためのタスク
-
データベース・ノードごとに個別の証明書とキーを生成します。
-
すべてのデータベース・ノードおよびルーターに共通する同じ
ca.pemを使用します。 -
データベース・ノードのサーバー証明書で、ドメイン名なしで共通名を指定します。詳細は、「Group Replication用のデータベース・クラスタSSL構成の概要」の表9-1の共通名を参照してください。
-
サーバーの証明書名およびキー・ファイル名が、対応するデータベース・ノードおよびルーターの値と一致していることを確認します。
-
生成された各サーバー証明書のCN値を検証するには、次のコマンドを使用してopenSSLを起動します:
openssl x509 -text -in ca.pem openssl x509 -text -in server-cert.pem openssl x509 -text -in client-cert.pem発行者CNは、すべて同じである必要があります。サブジェクトCNには、ドメイン名のないホスト名のみを含める必要があります。
-
証明書を生成したら、それらをCAファイルと照合して検証します。
-
生成された証明書およびキー・ファイルを、データベース・ノードおよびルーターごとにMySQLデータ・ディレクトリにコピーします。すべてのユーザーに読取り権限を指定し、ファイル所有者のみに書込み権限を保持していることを確認してください。
-
共通
ca.pemをすべてのノードおよびルーターにコピーし、すべてのユーザーに読取り権限を付与します。
データベース・ノードおよびルーターの構成
- ルーター
-
ルーター構成ファイルで、次の設定が存在することを確認します:
CLIENT_SSL_MODE=PREFERRED CLIENT_SSL_CERT=absolute path of the generated router certificate CLIENT_SSL_KEY=absolute path of the generated router key SERVER_SSL_MODE=AS_CLIENT SERVER_SSL_VERIFY=VERIFY_IDENTITY SERVER_SSL_CA=absolute path of the common ca.pem placed on this server構成後、すべてのユーザーに読取り権限を付与し、グループおよびその他のユーザーからの書込み権限を取り消します。
- データベース・ノード
-
各MySQLデータベース・ノードで、適切なセクションで次が設定されていることを確認します:
SSL_CAPATH=absolute path of the common ca.pem placed on this node SSL_CA=ca.pem SSL_CERT=server-cert.pem SSL_KEY=server-key.pem GROUP_REPLICATION_SSL_MODE=REQUIRED REQUIRE_SECURE_TRANSPORT=ONデータベース・ノードの構成後、すべてのユーザーに読取り権限を付与し、グループおよびその他のユーザーからの書込み権限を取り消します。
接続のテスト
構成が設定され、適切な権限が構成ファイルに付与されたら、データベース・ノードおよびルーターを再起動して設定をテストします。
- データベース・ノード接続のテスト
-
データベース・ノードが終了していないことを確認します。構成ファイルのログ・エラー設定のログで、SSL設定が受け入れられなかったことを示すエラーまたは警告がないか確認します。次のコマンドラインを使用して特定のノードに接続してみます(このノードの証明書で指定された共通名を使用します):
mysql -u username -p password -h db_common_name -P db_port --ssl-mode=VERIFY_IDENTITY --ssl-ca=path/of/ca.pem接続でエラーが生成されないことを確認します。
同様に、適切なパラメータ値を指定して、異なるSSLモードで接続します。
ノート:
VERIFY_IDENTITYでは、ssl-certおよびssl-keyは必須ではありません。ただし、データベース・ユーザーがX509認証を必要とする場合は、ssl-certとssl-keyの両方をclient-certとclient-keyで指定する必要があります。この方法を使用してすべてのデータベース・ノードをテストしてから、ルーター接続をテストします。
- ルーター接続のテスト
-
データベース・ノードが起動したら、ルーターを再起動し、終了しないように監視します。
構成ファイルのログ・エラー設定のログで、SSL設定が受け入れられなかったことを示すエラーまたは警告がないか確認します。エラーや警告がない場合は、次のコマンドを使用して、ルータからデータベースへの接続を試みます。ルーターの証明書に指定されている共通名を使用していることを確認します:mysql -u username -p password -h router_common_name -P router_port --ssl-mode=VERIFY_IDENTITY --ssl-ca=path/of/ca.pem接続がエラーなしで行われることを確認します。
- ルーターからデータベース・ノードへの接続の確認
-
最初に、次のコマンドを使用して、現在アクティブなプライマリノードを確認します:
MySQL> SHOW VARIABLES like '%hosts%';データベースからログアウトし、データベースを別のノードに切り替えます。次に、次のコマンドを使用して、ルーターからデータベースに再度ログインします:mysql -u username -p password -h router_common_name -P router_port --ssl-mode=VERIFY_IDENTITY --ssl-ca=path/of/ca.pem同じコマンドを再度使用して、現在アクティブなプライマリ・ノードを確認します:
MySQL> SHOW VARIABLES like '%hosts%';