あるWebアプリケーションでAPI GatewayとLambdaを使ったAPIが稼働している。クライアントからのリクエストに対して「HTTP 403 Forbidden」が返される事象が発生した。Lambda関数のログには何もエラーが記録されていない。最もあり得る原因はどれか。
- A. API GatewayのリソースポリシーまたはLambdaオーソライザーがリクエストを拒否している
- B. DynamoDBへのアクセス権限がLambdaのIAMロールに不足している
- C. Lambda関数の同時実行数の上限に達してスロットリングが発生している(HTTP 429が正しいが内部マッピングで403になっている)
- D. Lambda関数内でエラーが発生しているが、エラーがキャッチされてログに出力されていない
解答と解説を見る
正解: A
HTTP 403 ForbiddenはAPI Gateway側での認可拒否を意味し、Lambdaが呼ばれる前に返される。Lambda関数ログに何もない(選択肢A)のはLambdaがそもそも実行されていないことを示す。API Gatewayのリソースポリシー、Lambdaオーソライザー(Cognito認証やカスタムオーソライザー)によるアクセス拒否が403の主因。選択肢Dは403ではなくLambda内部エラーであれば500系になり、ログが空にはならない。選択肢CのLambdaスロットリングはHTTP 429として返される(API Gatewayのデフォルトマッピング)。選択肢BのDynamoDB権限不足はLambda実行後に発生するエラーであり、Lambda関数内のログに記録されるはず。トラブルシューティングの順序として、まずAPI Gatewayのアクセスログを確認し、次にオーソライザーの設定を確認することが推奨される。
📚 関連サービスの解説: Amazon API Gateway ・ AWS Lambda