[アップデート] Amazon RDS Proxy でクライアント/プロキシ/データベースでのエンドツーエンドの IAM 認証がサポートされました
いわさです。
Amazon RDS Proxy は Amazon RDS インスタンス/クラスターへの接続を管理するマネージドサービスです。
RDS Proxy がデータベースへの接続を管理するのですが、これまでプロキシからデータベースへの認証情報は AWS Secrets Manager 上で管理し、RDS Proxy のサービスロールがシークレットにアクセスするという仕組みでした。そのため RDS の IAM 認証情報は使えず、Secretes Manager の併用が必須となっていました。(クライアントからプロキシへの接続については IAM 認証がサポートされていた)
先日のアップデートで、RDS Proxy の「デフォルト認証スキーム」追加され「IAM 認証」を指定できるようになりました。
これによって次のようにクライアントからプロキシ・データベースまでエンドツーエンドでの IAM 認証が可能になります。
今回この機能をつかって Aurora PostgreSQL へ接続を行ってみましたので、その様子を紹介します。
RDS Proxy の準備
詳しい手順は割愛しますが、前提として Amazon Aurora PostgreSQL クラスターを新規作成しており、次のデータベース認証オプションで「IAM データベース認証」を有効化しています。
クラスター作成時の「RDS Proxy 作成オプション」は今回は使わず、新規 RDS Proxy を手動で作成しましょう。
RDS Proxy 作成オプションを使った場合の挙動も確認していますので後ほど紹介します。
今回のアップデートで次のように「デフォルト認証スキーム」が選択できるようになっています。
ここで「IAM 認証」を選択しましょう。
そして、シークレットを指定せずにプロキシを作成することができるのでこのまま作成します。
ちなみに、従来のモードはデフォルト認証スキーム「なし」になるのですが、この場合は次のようにシークレットの指定が必須となっています。
接続
プロキシが作成できたらまずはクラスター上に直接接続して IAM 認証用のユーザーなどを作成しておきます。
~ $ psql -h hoge0916rds.cluster-cpnu9ipu74g4.ap-northeast-1.rds.amazonaws.com -p 5432 -U postgres -d postgres
Password for user postgres:
psql (15.14, server 16.6)
WARNING: psql major version 15, server major version 16.
Some psql features might not work.
SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, compression: off)
Type "help" for help.
postgres=> CREATE USER hogeiam;
CREATE ROLE
postgres=> GRANT rds_iam TO hogeiam;
GRANT ROLE
postgres=> GRANT CONNECT ON DATABASE hogedb TO hogeiam;
GRANT
postgres=>
そして、プロキシのエンドポイントを使って IAM 認証用のトークンを取得し、それを使ってプロキシのエンドポイント経由で接続してみましょう。
~ $ export PGPASSWORD=$(aws rds generate-db-auth-token --hostname hoge0916proxy.proxy-cpnu9ipu74g4.ap-northeast-1.rds.amazonaws.com --port 5432 --username hogeiam)
~ $ echo $PGPASSWORD
hoge0916proxy.proxy-cpnu9ipu74g4.ap-northeast-1.rds.amazonaws.com:5432/?Action=connect&DBUser=hogeiam&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=ASIAYANTVHXIBZXLYH4S%2F20250915%2Fap-northeast-1%2Frds-db%2Faws4_request&X-Amz-Date=20250915T210226Z&X-Amz-Expires=900&X-Amz-SignedHeaders=host&X-Amz-Security-Token=IQoJb3JpZ2luX2VjEAUaDmFwLW5vcnRoZWFzdC0xIkYwRAIgJimAE1LvZQA69iON70Tl1CGh0h0W9twZ5Wf%2BWVktK9ACIAQMbH%2B%2FcK%2Bsj5kziwUdA8xlqEt54uoJIN8PizYjcL3OKvcCCH4QAxoMNTUwNjY5NDY3MDg4IgxNSLpwH6v020EEZQ8q1AJVeeqamYZR7cw%2BClQNLopNJrBr9nYKzVAfou5pugcA4WKflFSXWIrsYtfh3s1FOrWIzhSvlKiZvTx%2B%2FXx4N0fDqIyCM2jg7JqHga4inNHTZMCPG6W9Jr%2B8vfwX6GCm%2B5KQ0KdvnkoPeQPLEU9xKwM%2F8IkN2xbEcdWr33KN36tZ6Vj4jIC89kGkEmugSCf7auUCmn2EUWai%2B43EWWx8GkLIr%2FyVC%2B1YNbRaFU%2F3yJlhxwuk6LhliXtI5qf9NmNK8c9BpvUERjkCdsxxhQLhy5JH3Ew%2B1mSIfCLU8vLPAruZa1W0twVaFWTR6WHjigjX4PqxB9rrHn%2BBYnzzThlTYWKxLWqXkBD3bhxhtKvwW9MSWDA6O8bhqbFJU39c9FB2kN2q8vElYsFcGLanUrqDwvJr25kZCGSJ%2FD8%2BxIPi4MYd0SdoN18HK5VDTU5zRuDTd%2FPirB8HMKv6ocYGOogCqGzQn%2BtxN9PPnZpvLJZQ9%2BPymXOOzXaK0Qka2SrvoYkVVX%2BAQY02j7ChFnDaYjN0vBWnKumeRKiZ%2FdK8GE7Wm8XVZ8xFGaZGWvxvwQW1tekToW8abGkGQu7bS7YkrT5bMHPnxGuPfp5llIvvKy5xBhQyjsWIQ0W0emqNaklaZcOa%2F%2F0SiTOKgZ%2F7lN3KCaqSEbc90Vmq%2F8JDGBiVdCbr4CcHTQKhxrp9SdNJHdTzVZHdjtSFH8kGqf9OnkwlNKa4kU1WeOSZ70QrzICubb8XCcyxXDaH7LigkD5U3Hve7tC5yCdfSJ1P4uj4GqpA0lCeTZGumFvld5euoH5GPzDM4CSv8rl4oY03&X-Amz-Signature=5a1aa538c7eac551ffef98969aa30fa933aecb2c446bb29cf6ddad50b02ceecb
~ $ psql "host=hoge0916proxy.proxy-cpnu9ipu74g4.ap-northeast-1.rds.amazonaws.com port=5432 dbname=hogedb user=hogeiam password=$PGPASSWORD sslmode=require"
psql (15.14, server 16.6)
WARNING: psql major version 15, server major version 16.
Some psql features might not work.
SSL connection (protocol: TLSv1.3, cipher: TLS_AES_128_GCM_SHA256, compression: off)
Type "help" for help.
hogedb=>
プロキシにシークレットを設定していないのですが、IAM 認証に成功していますね。
なお、デフォルト認証スキームが「なし」の場合でデフォルト構成の IAM 認証を使おうとすると、次のように Credentials エラーとなります。
~ $ export PGPASSWORD=$(aws rds generate-db-auth-token --hostname proxy-1757966353217-hoge0916rds.proxy-cpnu9ipu74g4.ap-northeast-1.rds.amazonaws.com --port 5432 --username hogeiam)
~ $ psql "host=proxy-1757966353217-hoge0916rds.proxy-cpnu9ipu74g4.ap-northeast-1.rds.amazonaws.com port=5432 dbname=hogedb user=hogeiam password=$PGPASSWORD sslmode=require"
psql: error: connection to server at "proxy-1757966353217-hoge0916rds.proxy-cpnu9ipu74g4.ap-northeast-1.rds.amazonaws.com" (172.31.3.26), port 5432 failed: FATAL: This RDS proxy has no credentials for the role hogeiam. Check the credentials for this role and try again.
RDS Proxy 作成オプションだとデフォルト認証スキーム「なし」で作成される
なお、新規 RDS クラスター/インスタンスの作成時に RDS Proxy も同時作成することができます。
その場合は認証情報が自動でシークレットに格納されるのですが、今回のアップデートでこのあたりの挙動は変わるのでしょうか?
試してみたところ、上記のようにオプションを使って RDS Proxy を自動作成した場合、以下のようにデフォルト認証スキームが「なし」(従来のもの)となりました。
RDS Proxy にシークレットが自動設定されていることも確認できますね。
さいごに
本日は Amazon RDS Proxy でクライアント/プロキシ/データベースでのエンドツーエンドの IAM 認証がサポートされたので試してみました。
IAM 認証がサポートされていないデータベースのセキュリティを向上させるためにプロキシで IAM 認証を有効化するケースはよくありますが、IAM 認証が有効化できるクラスターであればシークレットが不要になるので今回のオプションは使えそうですね。