Amazon Aurora DB クラスターに接続しようとすると「Access Denied」(アクセス拒否) エラーが表示されるのはなぜですか?

所要時間2分
0

Amazon Aurora MySQL 互換エディションの DB クラスターに対して認証をしたいと考えていますが、「Access Denied」(アクセス拒否) エラーが表示されます。

簡単な説明

Aurora MySQL 互換 DB クラスターに対して認証するには、次のいずれかのオプションを使用できます。

「Access Denied」(アクセス拒否) エラーは通常、正しくないユーザー名またはパスワードが入力された場合に発生します。ただし、このエラーの原因として、次のようなものも考えられます。

  • 入力されたユーザー名またはパスワードが無効である。
  • 誤ったホストを使用して接続が試行された。
  • ユーザーが存在しない。
  • ユーザーは存在するが、接続するための許可がクライアントホストに付与されていない。
  • SSL が必須だが、クライアントは SSL を使用していない。
  • パスワードの特殊文字が Bash によって変換されている。
  • IAM 認証がオフになっている。
  • IAM ロールの許可が不十分である (IAM 認証を使用する場合)。
  • 接続文字列が正しくない。
  • Amazon RDS Proxy に接続するために使用されている認証情報が正しくない。これは、ネイティブユーザー名/パスワードモードが使用されている場合に適用されます。
  • クライアントに関連付けられた AWS Identity and Access Management (IAM) のユーザーまたはロールが Amazon RDS Proxy への接続することを許可されていない。これは、IAM DB 認証が使用されている場合に適用されます。

このエラーの詳細については、MySQL ドキュメントの「Access denied」(アクセス拒否) を参照してください。

解決方法

DB インスタンスが接続を受け付けていることを確認する

DB インスタンスが現在、[AVAILABLE] (使用可能) 状態であることを確認します。詳細については、DB インスタンスのステータスに関する Amazon Relational Database Service (Amazon RDS) および Aurora のドキュメントを参照してください。また、「Amazon RDS DB インスタンスに接続する際の問題を解決するにはどうすればよいですか?」も参照してください。

DB 認証情報を使用する接続をトラブルシューティングする

正しくないパスワード

データベースへの接続を試みる際には、正しいユーザー名とパスワードを入力していることを確認してください。パスワードには特殊文字を使用しないでください。詳細については、「Amazon RDS DB インスタンスのプライマリユーザーパスワードをリセットするにはどうすればよいですか?」を参照してください。

正しくないユーザー名

ユーザーが存在するかどうかを確認します。

mysql> SELECT user FROM mysql.user WHERE User='username';

ユーザーが存在しない場合は、新しいユーザーを作成します。

mysql> CREATE USER 'username'@'%' IDENTIFIED BY 'new-password-here';
mysql> FLUSH
        PRIVILEGES;

詳細については、「プライマリユーザーアカウント特権」を参照してください。

誤ったホストからの接続

DB インスタンスへの接続を試みる際には、必ず正しいホスト (-h フラグ付き) とポートを指定してください。Amazon RDS コンソールインスタンスページを確認して、Amazon RDS のホスト名とポートを確認します。詳細については、「Amazon Aurora DB クラスターへの接続」を参照してください。

ユーザーは存在するが、接続するための許可クライアントがクライアントホストに付与されていない

MySQL が次からの接続を許可しているホストユーザー/ホストを確認します。

mysql> SELECT host, user FROM mysql.user WHERE User='username';

その後、正しいホスト (クライアント IP) を持つユーザー、または任意の可能な IP アドレスと一致する % (ワイルドカード) を持つユーザーを作成します。

mysql> CREATE USER 'dbuser'@'%' IDENTIFIED BY 'new-password-here';

SSL が必須だが、クライアントは SSL を使用していない

DB インスタンスで次のクエリを実行して、SSL が強制されているユーザーがいるかどうかを確認します。

mysql> SELECT * FROM mysql.user WHERE ssl_type <> '';

ユーザーに SSL が強制されている場合は、SSL を使用して接続する必要があります。詳細については、「SSL/TLS を使用した DB クラスターへの接続の暗号化」を参照してください。

重複ユーザー

同じユーザー名のユーザーがいるかどうかを確認します。

mysql> SELECT host, user FROM mysql.user WHERE User='username';

この問題を解決するには、別のユーザー (重複プライマリユーザー) または他のユーザーを DROP するための許可を持つユーザーを使用してログインします。セカンダリユーザーがドロップされると、最初のユーザーは通常どおり接続できます。

詳細については、「MySQL が実行されている Amazon RDS DB インスタンスの別のプライマリユーザーを作成する方法を教えてください」を参照してください。

パスワードの特殊文字が Bash によって変換されている

パスワードを一重引用符で囲むことによって、Bash が特殊文字を解釈しないようにします。

接続パケットに正しい情報が含まれていない

接続パケットを取得するには、connect_timeout 秒を超える時間がかかります。DBA と話し合うことで、この DB パラメータの値を調整して、クエリとワークロードをより良く理解できます。

max_allowed_packet の変数の値が小さすぎるか、または DB インスタンスに割り当てたメモリよりも多くのメモリがクエリに必要

max_allowed_packet の値は、デフォルトでは小さく設定されています。これにより、この値では大きなパケット、場合によっては正しくないパケットをキャッチできます。大きな BLOB 列や長い文字列を使用している場合は、max_allowed_packet の値を大きくします。詳細については、「Best practices for configuring parameters for Amazon RDS for MySQL」(Amazon RDS for MySQL の設定パラメータのベストプラクティス) セクションを参照してください。

IAM 認証を使用する接続をトラブルシューティングする

接続するには、「ユーザーが IAM 認証情報を使用して Amazon RDS MySQL DB インスタンスに認証できるようにするにはどうすればよいですか?」を参照してください。

接続できない場合は、「IAM 認証を使用して Amazon RDS for MySQL に接続しようとすると、アクセス拒否エラーが発生するのはなぜですか?」を参照してください。

Amazon RDS Proxy を使用する接続をトラブルシューティングする

接続するには、「Amazon RDS Proxy を使用して、Amazon RDS MySQL DB インスタンスまたは Aurora MySQL DB クラスターに接続する方法を教えてください」を参照してください。

接続できない場合は、「RDS Proxy を使用して Amazon RDS DB または Amazon Aurora DB インスタンスに接続できないのはなぜですか」を参照してください。


関連情報

Amazon Aurora MySQL DB クラスターへの接続

MariaDB、MySQL、および PostgreSQL の IAM データベース認証

パラメータグループを使用する

VPC のパブリックサブネットまたはプライベートサブネットを使用する Amazon RDS DB インスタンスへの接続問題を解決するには、どうすれば良いですか?

AWS公式
AWS公式更新しました 1年前
コメントはありません