- 新しい順
- 投票が多い順
- コメントが多い順
お世話になっております。 元々記載されていた AI によるコメントを修正いたしました。
エラーが非常に分かりにくく大変恐れ入りますが、RDS Proxy の IAM 認証を実行しているにも関わらず postgresiam ユーザーが rds_iam のメンバーであることが原因と考えられます。 対処としては "revoke rds_iam from postgresiam" を実行して postgresiam ユーザーから rds_iam ロールをはく奪していただけないでしょうか。
RDS Proxy で IAM 認証を使う場合はアプリケーション(クライアント)から RDS Proxy への接続において IAM 認証を利用することになります。 一方、RDS Proxy から PostgreSQL の接続では、PostgreSQL のユーザー名とパスワードを使った認証をすることになります。
ここで、postgresiam ユーザーが rds_iam ロールのメンバーである場合は、PostgreSQL としては postgresiam ユーザーの認証において IAM 認証(ユーザー名と認証トークンを用いた認証)を期待し、通常のパスワード認証を受け付けません。 しかしながら、前述の通り RDS Proxy に対して IAM 認証をする場合は、RDS Proxy から PostgreSQL の接続で通常のパスワード認証を実施いただくことになります。 このような挙動となっているため、実質的に DB に接続ができず該当のエラーが出たと考えられます。 ※ 当方の手元でも同様の事象を再現でき、rds_iam ロールを接続ユーザーから revoke すると無事にIAM 認証を有効にした RDS Proxy 経由で PostgreSQL に接続できました。
参考資料 [1], [2] を以下に記載します。
RDS Proxy で IAM 認証を使用する場合は、通常のユーザー名とパスワードで認証するようにデータベースユーザーを設定します。IAM 認証は、Secrets Manager からユーザー名とパスワードの認証情報 RDS Proxy を取得する場合に適用されます。RDS Proxy から基礎となるデータベースへの接続は IAM を経由しません。
RDS Proxy での IAM の使用方法の主な違いは以下のとおりです。
認可プラグインで個々のデータベースユーザーを設定することはありません。データベースユーザーが通常使用するユーザー名とパスワードはデータベース内に保管されています。これらのユーザー名とパスワードを含む Secrets Manager シークレットを設定し、RDS Proxy に Secrets Manager からの認証情報の取得を認可します。
IAM 認証がクライアントプログラムとプロキシ間の接続に適用されます。その後、プロキシは、Secrets Manager から取得したユーザー名とパスワードの認証情報を使用して、データベースに対して認証します。
IAM 認証が有効になっている Aurora DB クラスターで RDS プロキシを使用する場合、ユーザー認証を確認してください。プロキ>シ経由で接続するユーザーは、サインイン認証情報で認証する必要があります。
以上、よろしくお願いします。