RDS Proxy経由で「RDS Proxy supports only IAM, MD5, or SCRAM authentication」のエラーが発生

0

Aurora PostgreSQL (password_encryption = 'scram-sha-256') を使用しており、 IAM認証ユーザをRDS Proxy経由で接続する構成で以下の問題に直面しています。

・ユーザpostgresiam を LOGIN 付きで作成し、rds_iam を GRANT ・ALTER ROLE postgresiam WITH PASSWORD '***'; を RDS に直接接続して実行(pasword_encryptionはscram-sha-256) ・Secrets Manager に username と password を含むシークレットを作成し、Proxy に登録 ・Proxy 側の設定は IAM認証を有効化、クライアント認証タイプ: POSTGRES_SCRAM_SHA_256、IAMロールでは上記Secrets ManagerへのGetを許可 ・Lambdaから aws rds generate-db-auth-token を用いてIAMトークンを取得し接続 → 接続成功 ・しかし SELECT 1などの通常のSQLを実行すると "RDS Proxy supports only IAM, MD5, or SCRAM authentication." で失敗

ユーザーはパスワード認証では直接RDSにログインできるため、ハッシュは正しく登録されているはずです。 Proxyが内部的に認証方式を認識できていないように見えます。

このような状況で考えられる原因や、RDS Proxyにおける内部キャッシュ・既知の問題などがあれば教えていただけませんか?

1回答
0

お世話になっております。 元々記載されていた 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] を以下に記載します。

[1] https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/AuroraUserGuide/rds-proxy-connecting.html#rds-proxy-connecting-iam

RDS Proxy で IAM 認証を使用する場合は、通常のユーザー名とパスワードで認証するようにデータベースユーザーを設定します。IAM 認証は、Secrets Manager からユーザー名とパスワードの認証情報 RDS Proxy を取得する場合に適用されます。RDS Proxy から基礎となるデータベースへの接続は IAM を経由しません。

RDS Proxy での IAM の使用方法の主な違いは以下のとおりです。

認可プラグインで個々のデータベースユーザーを設定することはありません。データベースユーザーが通常使用するユーザー名とパスワードはデータベース内に保管されています。これらのユーザー名とパスワードを含む Secrets Manager シークレットを設定し、RDS Proxy に Secrets Manager からの認証情報の取得を認可します。

IAM 認証がクライアントプログラムとプロキシ間の接続に適用されます。その後、プロキシは、Secrets Manager から取得したユーザー名とパスワードの認証情報を使用して、データベースに対して認証します。

[2] https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/AuroraUserGuide/rds-proxy.html#rds-proxy.limitations

IAM 認証が有効になっている Aurora DB クラスターで RDS プロキシを使用する場合、ユーザー認証を確認してください。プロキ>シ経由で接続するユーザーは、サインイン認証情報で認証する必要があります。

以上、よろしくお願いします。

profile picture
回答済み 1ヶ月前
AWS
サポートエンジニア
修正済み 24日前
AWS
サポートエンジニア
修正済み 24日前

ログインしていません。 ログイン 回答を投稿する。

優れた回答とは、質問に明確に答え、建設的なフィードバックを提供し、質問者の専門分野におけるスキルの向上を促すものです。

質問に答えるためのガイドライン

関連するコンテンツ