Lazy Diary @ Hatena Blog

PowerShell / Java / miscellaneous things about software development, Tips & Gochas. CC BY-SA 4.0/Apache License 2.0

API Gatewayでオーソライザーの実行結果がGET/HEAD/OPTIONSで変わるように見える

背景

  • API Gatewayで同一リソースに対するGET/HEAD/OPTIONSを作成している。
  • どのメソッドにも同じオーソライザ(Lambda関数)を設定している。

事象

  • GETメソッドの[統合リクエスト]-[マッピングテンプレート]-[リクエスト本文のパススルー]を[リクエストの Content-Type ヘッダーに一致するテンプレートがない場合]に設定すると、GETリクエストではステータスコード200でレスポンスが返るが、HEADとOPTIONSリクエストでは403 Forbiddenが返る。403 Forbiddenのレスポンスボディは{"Message":"User is not authorized to access this resource"}

  • 一方、GETメソッドの[統合リクエスト]-[マッピングテンプレート]-[リクエスト本文のパススルー]を[テンプレートが定義されていない場合 (推奨)]に設定すると、GETリクエストではステータスコード403 Forbiddenでレスポンスが返る。403 Forbiddenのレスポンスボディは{"Message":"User is not authorized to access this resource"}。一方、HEADとOPTIONSリクエストでは200が返る。

原因

因果関係はよく分からなかったが、下記ヘルプに従いオーソライザで認可のキャッシュの[有効]のチェックを外すと、GET/HEAD/OPTIONSともオーソライザが成功した場合は200、失敗した場合は403 Forbiddenを返すようになった。 https://aws.amazon.com/jp/premiumsupport/knowledge-center/api-gateway-403-error-lambda-authorizer/#Resolve_.22not_authorized_to_access_this_resource.22_errors_from_the_Lambda_authorizer