- 新しい順
- 投票が多い順
- コメントが多い順
このエラーは、IAM認証が失敗していることを示しています。RDS Proxyを介してLambdaからRDS(Aurora PostgreSQL)に接続する際に、以下の点を確認し設定する必要があります:
-
IAM認証の有効化:
- RDS ProxyでIAM認証を有効にしていることを確認してください。
- Aurora PostgreSQLクラスターでもIAM認証を有効にする必要があります。
-
IAMロールの設定:
- Lambdaに適切なIAMロールが割り当てられていることを確認してください。
- このロールには、RDS Proxyへの接続とIAM認証トークンの生成に必要な権限が必要です。
-
シークレットの設定:
- RDS ProxyがSecretsManagerのシークレット(prod/appBeta/Postgresql)にアクセスできることを確認してください。
- シークレットに正しいマスターユーザー名とパスワードが設定されていることを確認してください。
-
データベースユーザーの設定:
- PostgreSQLデータベース内に、IAM認証用のユーザーを作成してください。
- このユーザーに対して、必要なデータベース権限(特に
CONNECT
権限)を付与してください。
-
接続文字列の設定:
- Lambdaの接続文字列で、RDS Proxyのエンドポイントを使用していることを確認してください。
- IAM認証を使用する場合、パスワードの代わりに認証トークンを使用する必要があります。
-
セキュリティグループの設定:
- LambdaのセキュリティグループからRDS Proxyのセキュリティグループへの接続が許可されていることを確認してください。
-
VPC設定:
- LambdaとRDS Proxyが同じVPC内にあり、適切なサブネットに配置されていることを確認してください。
これらの設定を確認し、必要に応じて修正することで、LambdaからRDS Proxyを介してAurora PostgreSQLに接続できるはずです。エラーが解決しない場合は、IAMロールの権限やデータベースユーザーの設定を再確認してください。
Sources
Use Amazon RDS Proxy with IAM authentication for cross-account access | AWS Database Blog
Connecting to a database through RDS Proxy - Amazon Relational Database Service
Connecting to a database through RDS Proxy - Amazon Aurora
エラーメッセージを見る限りだとネットワークの問題ではなくIAMの問題だと思います。
接続に使用しているコードを見ていないので詳細は不明ですが、IAM認証でRDS Proxyに接続していてIAMのトークンを発行する部分がうまくいっていないのではないかと予想しています。
Lambdaに以下のIAMポリシーが設定されていることとトークン発行部分が正常に動いていることを確認してみてください。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"rds-db:connect"
],
"Resource": [
"arn:aws:rds-db:ap-northeast-1:<アカウントID>:dbuser:<RDSProxyのARNの末尾>/proxy_user"
]
}
]
}
少し古いブログですが、IAM認証を使用したRDS Proxy経由での接続のサンプルコードが記載されているので参考になると思います。
https://qiita.com/thirosue/items/a76d974a8bca36db42b6#%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0
公式ドキュメントにもサンプルコードがあったのでこちらも確認してみると良さそうです。
https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/services-rds.html#rds-connection