本記事は Introducing Keyring Components in MySQL の翻訳版です。MySQLにおけるキーリング・プラグインからキーリング・コンポーネントへの移行と、キーリング・プラグインと比較したときのキーリング・コンポーネントの利点を解説します。

 

キーリング・コンポーネント導入の背景

MySQL5.7以前はMySQLへの機能追加にはプラグインを作成するしかありませんでしたが、MySQL8.0以降ではコンポーネントを作成することでMySQL Serverの機能拡張がしやすくなりました。

MySQLのコンポーネント・サブシステムは、プラグイン・サブシステムが抱えていた下記のようなアーキテクチャ上の課題を克服しています。

  • サーバーのみと通信可能で、他のプラグインとは通信できない
  • プラグインはカプセル化されておらず、サーバーのシンボルに直接アクセスしている
  • 依存関係の明示的な情報がないため、適切な初期化が難しい
  • プラグインの動作には実行中のサーバーが必要

MySQLのコンポーネント・サブシステムは、MySQLサーバーの機能要素の集合体として扱う「カプセル化」を実現します。実行中のサーバーに対しても、コンポーネントを追加することで機能拡張が可能になります。

MySQL HeatWaveはキーリングをサポートしています。すなわち、後で取得するまで機密情報をセキュアに保管するために、コンポーネントやプラグインがサーバー内で有効化されています。保管される機密情報には、以下のようなものが含まれます。

  • テーブルスペースの暗号化に必要なInnoDBキー
  • 監査ログファイルの暗号化パスワード
  • バイナリおよびリレーログファイルのパスワード暗号化に必要なキー
  • 機密性の高い永続化されるシステム変数値を暗号化するためのファイル・キーを復号するマスター・キー

MySQLキーリングは当初、キーストアの実装にプラグインを使用していましたが、先述したプラグインの課題を解決するため、MySQL8.0.24からコンポーネントによる実装への移行を開始しました。キーリング・コンポーネントとしてMySQL 8.0.24ではcomponent_keyring_filecomponent_keyring_encrypted_file、MySQL 8.0.31ではcomponent_keyring_oci を導入しました。そしてMySQL 8.4.0では、これらに対応するキーリング・プラグイン(keyring_file、keyring_encryped_file、keyring_oci)を削除しました。

MySQL 8.4.0で削除される上記のキーリング・プラグインを現在も使用している場合は、対応するキーリング・コンポーネントへの移行を検討してください。

 

キーリング・コンポーネントとキーリング・プラグインの比較

このセクションではMySQLをお使いの皆様にキーリング・コンポーネントへ移行していただくために、キーリング・コンポーネントとキーリング・プラグインの違いを説明します。

  • キーリング・プラグインは –early-plugin-load オプションを使用してロードします。一方、キーリング・コンポーネントはマニフェスト・ファイルを使用します。
  • キーリング・プラグインの設定は、各プラグイン特有のシステム変数で行います。キーリング・コンポーネントはシステム変数に代わって、各キーリング・コンポーネントの独自の構成ファイルを使用します。
  • キーリング・コンポーネントは、キー・タイプとキーの長さに関する制限事項が緩和されています。
  • キーリング・コンポーネントは、永続化されるシステム変数値をセキュアに保管しますが、キーリング・プラグインに同様のサポートはありません。保管の対象となる機密データには、システム変数に含まれる秘密キーやパスワードなども含まれます。永続化されるシステム変数が保存されるオペレーティング・システム上のファイルには、機密性の高いシステム変数の名前と値が、それらの復号化用に生成されたファイル・キーと共に暗号化されて保存されます。この生成されたファイル・キーは、キーリングに保存されているマスター・キーを使用して暗号化されます。

以上のように、キーリング・コンポーネントはキーリング・プラグインよりも高度で柔軟性があり、制限が緩和されているのが特徴です。

 

キーリング・コンポーネントへ移行する際の考慮事項

データベース管理者があるキーストアから別のキーストアにキーをコピーし、MySQLのキーストアを別のものに切り替えるには、キーストア間で鍵の移行を行う際の手順が使えます。そして移行サーバーを使用することで、キーリング・プラグインからキーリング・コンポーネントへの移行ができます。MySQL Serverはキーの移行をサポートする動作モードで起動することで、移行サーバーとして利用できます。この移行サーバーはクライアント接続を受け付けませんが、キーの移行に必要な時間のみ実行されその後終了します。

移行元と移行先になるキーリング・プラグインとキーリング・コンポーネントの指定、オフライン移行またはオンライン移行かの指定をするには、次のキー移行オプションを用います。

オフライン移行の場合は、他のキー移行オプションは必要ありません。実行中のサーバーが移行元または移行先のキーストアを使用中の場合は、オンライン移行となります。オンライン移行には、実行中のサーバーへの接続と、移行操作中にキーリングを一時使用停止するために必要な下記のオプションを使用します。

  • --keyring-migration-host: 実行中のサーバーが配置されているホストを指定するオプションです。移行サーバーはローカルのプラグインとコンポーネントによって管理されるキーストア間でのみキーを移行するため、常にローカル・ホストになります。
  • --keyring-migration-user, --keyring-migration-password: 実行中のサーバーへの接続に必要な、アカウントの資格情報を指定します。
  • --keyring-migration-port: TCP/IP接続において、実行中のサーバーで使用するポート番号を指定します。
  • --keyring-migration-socket: Unixソケット・ファイル、またはWindowsの名前付きパイプを使った接続において、実行中のサーバーでのソケット・ファイルまたは名前付きパイプを指定します。

また、キーリング・プラグインの構成パラメータなど他のサーバー・オプションが必要になる場合があります。例えばkeyring_fileが移行元である際、キーリング・データ・ファイルの場所がデフォルトの場所ではない場合には、システム変数keyring_file_dataを設定します。キーリング以外の他のオプションが必要になる場合もありますが、それを指定する方法の一つに –defaults-file を使用して必要なオプションを含むオプション・ファイルを指定するやり方があります。

下記はキーリング・プラグインからキーリング・コンポーネントにオフライン移行する際のコマンド例です。

mysqld --defaults-file=/usr/local/mysql/etc/my.cnf
  --keyring-migration-to-component
  --keyring-migration-source=keyring_okv.so
  --keyring-okv-conf-dir=/usr/local/mysql/mysql-keyring-okv
  --keyring-migration-destination=component_keyring_encrypted_file.so

コンポーネントの構成オプションはここでは指定されておらず、コンポーネント構成ファイルに設定されていることに留意して下さい。特定のキーリング・コンポーネントの設定ファイルの詳細については公式Webマニュアルを参照してください。

下記はキーリング・プラグインからキーリング・コンポーネントにオンライン移行する際のコマンド例です。

mysqld --defaults-file=/usr/local/mysql/etc/my.cnf
  --keyring-migration-to-component
  --keyring-migration-source=keyring_okv.so
  --keyring-okv-conf-dir=/usr/local/mysql/mysql-keyring-okv
  --keyring-migration-destination=component_keyring_encrypted_file.so
  --keyring-migration-host=127.0.0.1
  --keyring-migration-user=root
  --keyring-migration-password=root_password

移行後にマニフェストと構成ファイルを使用してキーリング・コンポーネントをロードすれば、機密情報の保存に使用できるようになります。各キーリング・コンポーネントを初期化および構成する手順については、下記ブログ記事にて別途ご紹介しております(英語版)。


まとめ

キーリング・コンポーネントは高度で柔軟性があり、キーリング・プラグインと比べ制限が緩和されているのが特徴です。また、MySQL 8.4.0にて一部のキーリング・プラグイン(keyring_file、keyring_encryped_file、keyring_oci)が削除されました。簡単な手順でできますので、ぜひキーリング・コンポーネントへの移行をご検討下さい。