keyring_aws
プラグインは、商用製品である MySQL Enterprise Edition に含まれている拡張機能です。 商用製品の詳細は、https://www.mysql.com/products/ を参照してください。
keyring_aws
キーリングプラグインは、キー生成のバックエンドとして Amazon Web Services Key Management Service (AWS KMS) と通信し、キーの格納にローカルファイルを使用します。 すべてのキーリングデータは、AWS サーバーによってのみ生成され、keyring_aws
によっては生成されません。
keyring_aws
は、次のプラットフォームで使用できます:
EL7
macOS 10.13 および 10.14
SLES 12
Ubuntu 14.04 および 16.04
Windows
ここでの説明は、AWS 全般および KMS に精通していることを前提としています。 いくつかの関連情報ソース:
次の各セクションでは、keyring_aws
キープラグインの構成および使用方法について説明します:
keyring_aws
プラグインをインストールするには、ここにあるプラグイン固有の構成情報とともに、セクション6.4.4.1「キーリングプラグインのインストール」 にある一般的なキーリングインストール手順を使用します。
プラグインライブラリファイルには、keyring_aws
プラグインと、keyring_aws_rotate_cmk()
および keyring_aws_rotate_keys()
の 2 つのユーザー定義関数 (UDF) が含まれます。
keyring_aws
を構成するには、AWS KMS と通信するための資格証明を提供する秘密アクセスキーを取得し、それを構成ファイルに書き込む必要があります:
AWS KMS アカウントを作成します。
AWS KMS を使用して、秘密アクセスキー ID および秘密アクセスキーを作成します。 アクセスキーは、アイデンティティおよびアプリケーションのアイデンティティを検証するために機能します。
AWS KMS アカウントを使用して、顧客マスターキー (CMK) ID を作成します。 MySQL の起動時に、
keyring_aws_cmk_id
システム変数を CMK ID 値に設定します。 この変数は必須であり、デフォルトはありません。 (この値は、必要に応じてSET GLOBAL
を使用して実行時に変更できます。)-
必要に応じて、構成ファイルを配置するディレクトリを作成します。 ディレクトリには制限モードがあり、MySQL サーバーの実行に使用されるアカウントからのみアクセスできる必要があります。 たとえば、Unix および Unix に似たシステムでは、
/usr/local/mysql/mysql-keyring/keyring_aws_conf
をファイル名として使用するために、次のコマンド (root
として実行) によって親ディレクトリが作成され、ディレクトリのモードと所有権が設定されます:shell> cd /usr/local/mysql shell> mkdir mysql-keyring shell> chmod 750 mysql-keyring shell> chown mysql mysql-keyring shell> chgrp mysql mysql-keyring
MySQL の起動時に、
keyring_aws_conf_file
システム変数を/usr/local/mysql/mysql-keyring/keyring_aws_conf
に設定して、構成ファイルの場所をサーバーに示します。 -
次の 2 つの行を含む
keyring_aws
構成ファイルを準備します:明細 1: 秘密アクセスキー ID
明細 2: 秘密アクセスキー
たとえば、キー ID が
wwwwwwwwwwwwwEXAMPLE
で、キーがxxxxxxxxxxxxx/yyyyyyy/zzzzzzzzEXAMPLEKEY
の場合、構成ファイルは次のようになります:wwwwwwwwwwwwwEXAMPLE xxxxxxxxxxxxx/yyyyyyy/zzzzzzzzEXAMPLEKEY
サーバーの起動プロセス中に使用できるようにするには、--early-plugin-load
オプションを使用して keyring_aws
をロードする必要があります。 keyring_aws_cmk_id
システム変数は必須であり、AWS KMS サーバーから取得した顧客マスターキー (CMK) ID を構成します。 keyring_aws_conf_file
および keyring_aws_data_file
システム変数は、オプションで、keyring_aws
プラグインが構成情報およびデータ記憶域に使用するファイルの場所を構成します。 ファイルの場所変数のデフォルト値はプラットフォーム固有です。 場所を明示的に構成するには、起動時に変数値を設定します。 たとえば、サーバー my.cnf
ファイルで次の行を使用して、プラットフォームの .so
接尾辞とファイルの場所を必要に応じて調整します:
[mysqld]
early-plugin-load=keyring_aws.so
keyring_aws_cmk_id='arn:aws:kms:us-west-2:111122223333:key/abcd1234-ef56-ab12-cd34-ef56abcd1234'
keyring_aws_conf_file=/usr/local/mysql/mysql-keyring/keyring_aws_conf
keyring_aws_data_file=/usr/local/mysql/mysql-keyring/keyring_aws_data
keyring_aws
プラグインを正常に起動するには、構成ファイルが存在し、前述のように初期化された有効な秘密アクセスキー情報が含まれている必要があります。 ストレージファイルが存在する必要はありません。 そうでない場合、keyring_aws
はそれを (必要に応じて親ディレクトリとともに) 作成しようとします。
keyring_aws
プラグインの構成に使用されるシステム変数の詳細は、セクション6.4.4.13「キーリングシステム変数」 を参照してください。
MySQL サーバーを起動し、keyring_aws
プラグインに関連付けられた UDF をインストールします。 これはワンタイム操作で、次のステートメントを実行して、プラットフォームの .so
接尾辞を必要に応じて調整します:
CREATE FUNCTION keyring_aws_rotate_cmk RETURNS INTEGER
SONAME 'keyring_aws.so';
CREATE FUNCTION keyring_aws_rotate_keys RETURNS INTEGER
SONAME 'keyring_aws.so';
keyring_aws
UDF の詳細は、セクション6.4.4.11「プラグイン固有のキーリングキー管理関数」 を参照してください。
プラグインの起動時に、keyring_aws
プラグインは AWS 秘密アクセスキー ID とキーをその構成ファイルから読み取ります。 また、記憶域ファイルに含まれる暗号化されたキーをメモリー内キャッシュに読み取ります。
操作中、keyring_aws
は暗号化されたキーをインメモリーキャッシュに保持し、記憶域ファイルをローカル永続記憶域として使用します。 各キーリング操作はトランザクション型です: keyring_aws
では、メモリー内キーキャッシュとキーリングストレージファイルの両方が正常に変更されるか、操作が失敗してキーリングの状態は変更されません。
正しい鍵リングストレージファイルが存在する場合にのみ鍵が確実にフラッシュされるように、keyring_aws
は鍵リングの SHA-256 チェックサムをファイルに格納します。 ファイルを更新する前に、プラグインは、予想されるチェックサムが含まれていることを確認します。
keyring_aws
プラグインは、標準の MySQL キーリングサービスインタフェースを構成する関数をサポートしています。 これらの関数によって実行されるキーリング操作には、次の 2 つのレベルでアクセスできます:
SQL インタフェース: SQL ステートメントで、セクション6.4.4.10「汎用キーリングキー管理関数」 で説明されているユーザー定義関数 (UDF) をコールします。
C インタフェース: C 言語コードでは、セクション5.6.8.2「キーリングサービス」 で説明されているキーリングサービス関数をコールします。
例 (UDF を使用):
SELECT keyring_key_generate('MyKey', 'AES', 32);
SELECT keyring_key_remove('MyKey');
また、keyring_aws_rotate_cmk()
および keyring_aws_rotate_keys()
UDF は、標準のキーリングサービスインタフェースでカバーされていない AWS 関連の機能を提供するために、キーリングプラグインインタフェースを 「extend」 に提供します。 これらの機能には、UDF を呼び出すことによってのみアクセスできます。 対応する C 言語キーサービス関数はありません。
keyring_aws
で許可されるキータイプの詳細は、セクション6.4.4.8「サポートされているキーリングキーのタイプと長さ」 を参照してください。
keyring_aws
プラグインがサーバーの起動時に適切に初期化されていると仮定すると、AWS KMS との通信に使用される資格証明を変更できます:
AWS KMS を使用して、新しい秘密アクセスキー ID および秘密アクセスキーを作成します。
新しい資格証明を構成ファイル (
keyring_aws_conf_file
システム変数で指定されたファイル) に格納します。 ファイル形式は前述のとおりです。-
keyring_aws
プラグインを再初期化して、構成ファイルを再読み込みします。 新しい資格証明が有効であると仮定すると、プラグインは正常に初期化されます。プラグインを再初期化するには、2 つの方法があります:
サーバーを再起動します。 これは単純で副作用はありませんが、できるだけ再起動が少ないサーバーの停止時間を最小限に抑えるインストールには適していません。
-
次のステートメントを実行して、必要に応じてプラットフォームの
.so
接尾辞を調整し、サーバーを再起動せずにプラグインを再初期化します:UNINSTALL PLUGIN keyring_aws; INSTALL PLUGIN keyring_aws SONAME 'keyring_aws.so';
注記INSTALL PLUGIN
では、実行時にプラグインをロードするだけでなく、プラグインをmysql.plugin
システムテーブルに登録するという副作用もあります。 このため、keyring_aws
の使用を停止する場合は、サーバーの起動に使用される一連のオプションから--early-plugin-load
オプションを削除するだけでは不十分です。 これにより、プラグインの早期ロードは停止されますが、サーバーは、mysql.plugin
に登録されているプラグインをロードする起動シーケンス内のポイントに到達したときに、プラグインのロードを試行します。したがって、AWS KMS 資格証明を変更するために説明した
UNINSTALL PLUGIN
とINSTALL PLUGIN
の順序を実行した場合、keyring_aws
の使用を停止するには、--early-plugin-load
オプションの削除に加えて、UNINSTALL PLUGIN
を再度実行してプラグインを登録解除する必要があります。