Lambda 関数 URL に IAM 認証を使用した場合にリクエストが失敗するので原因と解決策を教えてください

2023.10.24

困っていた内容

Lambda 関数を HTTP エンドポイント経由で実行するために Lambda 関数 URL を設定しました。
要件上、実行のためには認証が必要なため、リクエスト元の権限に lambda:InvokeFunctionUrl を付与して IAM 認証を設定したのですがリクエストが失敗しました。
IAM 認証を使用しない場合にはリクエストが成功することは確認しています。

Lambda 関数 URL に IAM 認証を使用した場合にリクエストが失敗するので原因と解決策を教えてください。

どう対応すればいいの?

AWS Signature Version 4 (SigV4) による署名を実施してください。

関数 URL が認証タイプに AWS_IAM を使用している場合、各 HTTP リクエストには、AWS Signature Version 4 (SigV4) による署名が必要です。awscurl、Postman、および AWS SigV4 Proxy などのツールには、Sigv4 でリクエストに署名するための方法が既に組み込まれています。

AWS 公式ドキュメントより

IAM 認証を使用しない場合にはリクエストには Sigv4 を使用した署名の必要はありませんが、IAM 認証では明示的に SigV4 での署名が必要です。
署名ツールについてはドキュメントでも紹介されている他、弊社ブログでもサンプルコードがありますのでご参照ください。

参考資料