困っていた内容
API Gateway の HTTP API で、Lambda オーソライザーによる認証を設定しました。
テストリクエストを行ったところ{"message":"Unauthorized"}
が発生したので、調査のため Lambda のログを確認しましたが、ログが出力されていませんでした。
Lambda オーソライザーが原因と思いますが、確認すべき内容を教えてください。
どう対応すればいいの?
ID ソースと、クライアントがリクエストした内容を確認してください。
API Gateway は、Lambda オーソライザーの ID ソースが含まれないリクエストを受け取ると、Lambda を呼び出さず、401 Unauthorized をクライアントに返却します。
そのため、レスポンスが Unauthorized となり、Lambda のログも記録されない場合は、ID ソースに指定した値をリクエストに含めているか確認してください。
なお、リクエストしている内容は、curl コマンドの場合は-v
を追加することで確認でき、リクエストした内容をレスポンスとして返却する httpbin のようなツールでも確認できます。
postmanlabs/httpbin: HTTP Request & Response Service, written in Python + Flask.
※httpbin.orgで手軽に確認できますが、機密情報は含めないようにご注意ください。
httpbin.orgの実行例
$ curl "https://httpbin.org/get" -H "Hato-Authorization: hatoToken"
{
"args": {},
"headers": {
"Accept": "*/*",
"Hato-Authorization": "hatoToken",
"Host": "httpbin.org",
"User-Agent": "curl/8.1.2",
"X-Amzn-Trace-Id": "Root=1-67891233-abcdef012345678912345678"
},
"origin": "203.0.113.0",
"url": "https://httpbin.org/get"
}
参考資料
クライアントのリクエストに ID ソースが含まれていない場合、API Gateway は Lambda オーソライザーを呼び出さず、クライアントは 401 エラーを受け取ります。