AWS Identity Access Management (IAM) 認証を使用して Amazon Relational Database Service (Amazon RDS) for MySQL インスタンスに接続しようとしたところ、「Access Denied」エラーが発生します。
簡単な説明
エラーメッセージは、IAM ロールのアクセス許可が不十分であったり、IAM 認証が無効であったり、データベースユーザーの構成ミスがあったり、接続文字列にエラーがあったりする場合に発生する可能性があります。次のようなエラーメッセージが表示される場合があります。
「ERROR 1045 (28000): Access denied for user 'root'@'10.0.4.253' (using password: YES)」
AWS Support-TroubleshootRDSiamAuthentication ランブックを使用して、Amazon RDS インスタンスでの IAM 認証に必要な設定を自動的に検証し、解決策を使用してこのエラーを解決してください。
解決策
IAM ロールのアクセス許可が不十分である
IAM データベース認証を使用して Amazon RDS for MySQL インスタンスに接続するには、rds-db:connect アクションにアクセスできる必要があります。詳細については、「IAM データベースアクセス用の IAM ポリシーを作成、使用する」を参照してください。
サービスコントロールポリシー (SCP) を使用する場合は、ポリシーでデータベースインスタンスへの接続を許可していることを確認してください。詳細については、「AWS Organizations で組織ポリシーを作成する」を参照してください。
IAM 認証を有効にする
デフォルトでは、データベースインスタンスでは IAM 認証は無効になっています。IAM 認証を有効にするには、次の手順を実行します。
- Amazon RDS コンソールを開きます。
- 該当するインスタンスを選択します。
- [変更] を選択します。
- [データベース認証] で [パスワード] を選択します。
- IAM データベース認証を選択します。
- 構成設定を更新するには、[続行] を選択します。
- インスタンスを変更するには、[適用] を選択します。
注: クラスターの構成設定を更新する際、[すぐに適用] を選択すると、保留中のすべての変更は、メンテナンス期間中ではなく直ちに適用されます。このアクションにより、Amazon RDS for MySQL インスタンスの停止時間が長くなる可能性があります。詳細については、「スケジュール変更の設定」を参照してください。
データベースユーザーに構成ミスがある
AWSAuthenticationPlugin は、Amazon RDS for MySQL インスタンスの IAM 認証を処理します。このプラグインが IAM ロールに接続していることを確認するには、次のコマンドを実行します。
select user,plugin,host from mysql.user where user like '%db-user-name%';
注: **db-user-name ** をデータベースの実際のユーザー名に置き換えます。
出力例:
+------+-------------------------+------+|
user | plugin | host |
+------+-------------------------+------+
| root | AWSAuthenticationPlugin | % |
+------+-------------------------+------+
1 row in set (0.00 sec)
IAM ロールが特定のホストを使用している場合は、そのホスト名を使用する必要があります。指定したデータベースにアクセスするためのアクセス許可があることも確認してください。
ユーザーに付与されたアクセス許可を確認するには、次のコマンドを実行します。
show grants for user;
注: user を実際のユーザー名に置き換えます。
別のユーザーにアクセス許可を付与するには、次のコマンドを実行します。
grant select on mydb.mytable to user;
注: 実際のものでそれぞれ、mydb をデータベースインスタンス名に、 mytable をテーブル名に、user をユーザー名に置き換えます。
詳細については、MySQL のウェブサイトで「GRANT ステートメント」を参照してください。
接続文字列が誤っている
Amazon RDS for MySQL データベースに接続するには、接続文字列で --enable-cleartext-plugin オプションを使用します。--enable-cleartext-plugin 構文は認証トークンとして機能するため、データベース接続やデータベースユーザーの設定時に使用する必要があります。
接続文字列の例:
$ mysql -h <endpoint> -P 3306 --enable-cleartext-plugin --user=RDSConnect --password=$
関連情報
ユーザーが IAM の認証情報を使用して Amazon RDS for MySQL の DB インスタンスで認証できるようにする方法を教えてください
IAM データベース認証