proxy 経由で Lambda から RDS に接続するには。

0

前提: RDS(Aurora Postgresql):my-database-cluster、my-database-cluster-instance-1 Proxy:my-proxy(TLS有効) シークレット:prod/appBeta/Postgresql(マスターユーザー名,パスワードを設定)

セキュリティグループを rdb proxy用、lambda用で分けており、 lambda のアウトバウンドに rdb のインバウンドを設定しています。 lambdaからアクセスしたところ、以下のようなエラーが出ます。

{
  "statusCode": 500,
  "body": "{\"error\":\"The IAM authentication failed for the role njc_admin. Check the IAM token for this role and try again.\",\"code\":\"28P01\",\"stack\":\"error: The IAM authentication failed for the role njc_admin. Check the IAM token for this role and try again.\\n    at Parser.parseErrorMessage (/var/task/node_modules/pg-protocol/dist/parser.js:285:98)\\n    at Parser.handlePacket (/var/task/node_modules/pg-protocol/dist/parser.js:122:29)\\n    at Parser.parse (/var/task/node_modules/pg-protocol/dist/parser.js:35:38)\\n    at TLSSocket.<anonymous> (/var/task/node_modules/pg-protocol/dist/index.js:11:42)\\n    at TLSSocket.emit (node:events:517:28)\\n    at TLSSocket.emit (node:domain:489:12)\\n    at addChunk (node:internal/streams/readable:368:12)\\n    at readableAddChunk (node:internal/streams/readable:341:9)\\n    at Readable.push (node:internal/streams/readable:278:10)\\n    at TLSWrap.onStreamRead (node:internal/stream_base_commons:190:23)\"}"
}

何を設定すれば良いでしょうか。

質問済み 1ヶ月前56ビュー
2回答
0

このエラーは、IAM認証が失敗していることを示しています。RDS Proxyを介してLambdaからRDS(Aurora PostgreSQL)に接続する際に、以下の点を確認し設定する必要があります:

  1. IAM認証の有効化:

    • RDS ProxyでIAM認証を有効にしていることを確認してください。
    • Aurora PostgreSQLクラスターでもIAM認証を有効にする必要があります。
  2. IAMロールの設定:

    • Lambdaに適切なIAMロールが割り当てられていることを確認してください。
    • このロールには、RDS Proxyへの接続とIAM認証トークンの生成に必要な権限が必要です。
  3. シークレットの設定:

    • RDS ProxyがSecretsManagerのシークレット(prod/appBeta/Postgresql)にアクセスできることを確認してください。
    • シークレットに正しいマスターユーザー名とパスワードが設定されていることを確認してください。
  4. データベースユーザーの設定:

    • PostgreSQLデータベース内に、IAM認証用のユーザーを作成してください。
    • このユーザーに対して、必要なデータベース権限(特にCONNECT権限)を付与してください。
  5. 接続文字列の設定:

    • Lambdaの接続文字列で、RDS Proxyのエンドポイントを使用していることを確認してください。
    • IAM認証を使用する場合、パスワードの代わりに認証トークンを使用する必要があります。
  6. セキュリティグループの設定:

    • LambdaのセキュリティグループからRDS Proxyのセキュリティグループへの接続が許可されていることを確認してください。
  7. 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

profile picture
回答済み 1ヶ月前
0

エラーメッセージを見る限りだとネットワークの問題ではなく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

profile picture
エキスパート
回答済み 1ヶ月前

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

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

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

関連するコンテンツ