validate_password プラグインを使用して、Amazon RDS MySQL DB インスタンスのセキュリティを強化するには、どうすればよいですか ?
最終更新日: 2020 年 10 月 19 日
Amazon Relational Database Service (Amazon RDS) DB インスタンスを使用して、MySQL を実行させています。validate_password プラグインを使用して、パスワードをテストし、DB インスタンスのセキュリティを強化したいと考えています。どうすればよいですか?
簡単な説明
MySQL には、RDS MySQL DB インスタンスのセキュリティを強化できる validate_password プラグインが用意されています。このプラグインでは、使用しているDB インスタンスの DB パラメータグループにあるパラメータを使用して、パスワードポリシーが適用されます。MySQL バージョン 5.6、5.7、8.0 を実行する DB インスタンスでサポートされています。
注 : validate_password プラグインは、MySQL のデフォルト設定の一部ではなく、独立したプラグインです。Amazon RDS が MySQL DB インスタンスを作成する場合、プラグインはデフォルトではインストールされません。
解決方法
RDS MySQL DB インスタンスの validate_password プラグインを有効にする
マスターユーザーとして RDS MySQL DB インスタンスに接続 し、次のコマンドを実行します。
MySQL [(none)]> INSTALL PLUGIN validate_password SONAME 'validate_password.so';
これにより、validate_password プラグインがインストールされます。インストール後、デフォルトのパラメータ値でプラグインが実行されます。
validate_password プラグインが RDS MySQL DB インスタンスにインストールされ、アクティブ化されていることを確認します。
DB インスタンスで次のクエリを実行して、validate_password プラグインのステータスを確認します。
MySQL [(none)]> SELECT plugin_name, plugin_status,
plugin_type, plugin_library FROM information_schema.plugins WHERE
plugin_name='validate_password';
+-------------------+---------------+-------------------+----------------------+
| plugin_name | plugin_status | plugin_type | plugin_library |
+-------------------+---------------+-------------------+----------------------+
| validate_password | ACTIVE | VALIDATE PASSWORD | validate_password.so |
+-------------------+---------------+-------------------+----------------------+
validate_password プラグインのデフォルト値を確認する
次のクエリを実行して、プラグインのデフォルトのパラメータ値を確認します。
MySQL [(none)]> SHOW GLOBAL VARIABLES LIKE 'validate_password%';
以下に、各パラメータの説明を示します。
名前 | 値 | 説明 |
validate_password_check_user_name | OFF | |
validate_password_dictionary_file | ||
validate_password_length | 8 | パスワードの最小長 |
validate_password_mixed_case_count | 1 | パスワードに大文字と小文字を含める |
validate_password_number_count | 1 | パスワードには、少なくとも 1 つの数字を含める |
validate_password_policy | MEDIUM | 設定グループレベル |
validate_password_special_char_count | 1 | パスワードには、最低 1 文字の特殊文字を含める |
validate_password_dictionary_file とvalidate_password_check_user_nameを除くパラメータが、DB インスタンスで使用されているカスタム DB パラメータグループに設定できます。
注 : DB インスタンスがデフォルトのパラメータグループを使用している場合は、新しいパラメータグループを作成し、この DB インスタンスにアタッチする必要があります。デフォルトのパラメータグループのパラメータ設定は変更できません。詳細については、「DB パラメータグループを使用する」をご参照ください。
注 : Amazon RDS では、パスワードを検証しません。ユーザーパスワードの設定を AWS マネジメントコンソールから行う、あるいは、AWS コマンドラインインターフェイス(AWS CLI)コマンドの modify-db-instanceか、RDS API オペレーションの ModifyDBInstance を使用して設定を行うと、新しいパスワードがパスワードポリシーを満たさない場合でも、変更が成功する可能性があります。
既存のパスワードをリセットし、ポリシー準拠のパスワードを作成する
password_validate プラグインをインストールして有効にしたら、新しい検証ポリシーに準拠させるために既存のパスワードをリセットします。
まず、DB インスタンスにインストールされた password_validate プラグインをテストします。これを行うには、上記のデフォルトのプラグインパラメータを使用して、新しい DB ユーザーを作成します。
MySQL [(none)]> CREATE USER 'USER123'@'%' identified by 'password';
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
validate_password_policy は MEDIUM に設定されているため、パスワードが MySQL validate_password_policy のドキュメントに記述されている条件を満たしていることを、確認する必要があります。上記の CREATE USER コマンドはパスワードポリシーを満たしていないため、"Your password does not satisfy the current policy requirements(パスワードは現在のポリシー要件を満たしていません)" というエラーで失敗します。
次のコマンドを実行して、パスワードポリシーを満たすパスワードでユーザーを作成します。
MySQL [(none)]> CREATE USER 'USER123'@'%' identified by 'Password@57';
Query OK, 0 rows affected (0.01 sec)
次のコマンドを実行して、ユーザーが正常に作成されたことを確認します。
MySQL [(none)]> SELECT user, host FROM mysql.user WHERE ( user='USER123' AND host='%' );
+-------------------+------+
| user | host |
+-------------------+------+
| validate_password | % |
+-------------------+------+
1 row in set (0.00 sec)
既存のユーザーのパスワードを変更するには、ポリシーに準拠するパスワードを使用しながら、次のコマンドを実行します。
5.6:
mysql> SET PASSWORD FOR 'USER123'@'%' = PASSWORD('Password@2020');
Query OK, 0 rows affected (0.01 sec)
5.7 and 8.0:
mysql> alter user 'USER123'@'%' identified by 'Password@2020';
Query OK, 0 rows affected (0.01 sec)
既存のユーザーのパスワードをリセットする方法の詳細については、MySQL ドキュメントの、How to reset the root password(ルートパスワードのリセット方法)を参照してください。
RDS MySQL DB インスタンスの validate_password プラグインを無効にする
DB インスタンスから validate_password プラグインを無効にするには、マスターユーザーを使用して次のコマンドを実行します。
MySQL [(none)]> UNINSTALL PLUGIN validate_password;