はじめに
API Gateway を初めて触って、作った API を curl で叩いたら、毎回これが返ってきました。
{"message":"Missing Authentication Token"}
「Authentication Token が無い」と言われるので、てっきり認証の設定が足りないんだと思い込み、しばらく API キーや認可の設定をいじっていました。
でも原因は認証ではなく、叩いていた URL のパスが存在しなかっただけでした😅
先に結論:API Gateway のこのメッセージは、多くの場合「認証が必要」ではなく、**「そのパス/メソッドが見つからない」**のサインです。
環境
- Amazon API Gateway(REST API)
- バックエンドは AWS Lambda
- 動作確認は curl
- リージョン: ap-northeast-1(東京)
起きたこと
こんな感じで、自分のエンドポイントを叩いていました(ID 類はマスクしています)。
curl -s https://xxxxxxxxxx.execute-api.ap-northeast-1.amazonaws.com/prod/items
返ってくるのは毎回これ。
{"message":"Missing Authentication Token"}
HTTP のステータスも 403 で、見た目が認証エラーそっくりなので、最初は完全に「認証まわりの設定ミス」だと思い込んでいました。
原因:そのパスにメソッドが無かった
認証を疑うのをやめて、まず「API のパス構造がどうなっているか」を確認しました。
aws apigateway get-resources \
--rest-api-id xxxxxxxxxx \
--region ap-northeast-1
出力を見て気づきました。POST(や GET)メソッドが、/items のようなリソースではなく、ルート(/)側に付いていたのです。
/ ← ここに POST が付いていた
/items ← メソッドが無い(空のリソース)
つまり私は「存在しないパス(/items)」を叩いていたので、API Gateway 的には「該当するルートが無い」状態でした。このとき返るのが Missing Authentication Token です。HTTP ステータスは 403 ですが、実態としては「未対応のパス、またはメソッドを呼んでいる」状態でした。名前もステータスも認証っぽいのに中身はルート不一致なので、調べる順番としては 404 のようにルート定義から確認するのが近道でした。
ちなみに REST API は、ステージに反映済みのデプロイメントを使っている場合、リソースやメソッドを変更したあとにそのステージへ再デプロイしないと反映されません。私は途中、直したつもりで叩いて「まだ直ってない?」と一度混乱しました。
対処
やったことは2つです。
- メソッドを正しいリソース(
/items)側に作り直す - 変更をステージへ再デプロイする
aws apigateway create-deployment \
--rest-api-id xxxxxxxxxx \
--stage-name prod \
--region ap-northeast-1
そのうえで、正しいパスを叩いたら通りました。
curl -s https://xxxxxxxxxx.execute-api.ap-northeast-1.amazonaws.com/prod/items
# → 期待どおりのレスポンスが返ってくる
「URL に余計なパスが付いていただけ」「メソッドの付け先を間違えていただけ」というケースも多いので、まずは 本当にそのパスが存在するかを確認するのが近道でした。
学び
-
Missing Authentication Tokenは、**多くの場合は認証ではなく「パス/メソッドが無い」**サイン。名前に惑わされない。 - ただし IAM 認証の API で署名や
Authorizationヘッダーが足りないと、本当に認証由来で出ることもある。だから「状況を確認してから」判断する。 - 認証設定をいじる前に、
aws apigateway get-resourcesでパス構造を目で確認する。 - REST API は変更後にステージへ再デプロイしないと反映されない。
- エラーメッセージの“見た目”と“原因”がズレることがある。ステータス 403 = 認証問題、とは限らない。
おわりに
「認証エラーっぽいのに認証が原因じゃない」というのは、最初すごく混乱しました😅 同じメッセージで固まっている人は、まずパスが存在するかを疑ってみると早いかもしれません🙌
参考
- AWS公式: API Gateway の Gateway responses(未対応のメソッド/リソースでもこのレスポンスが使われる根拠)
https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-gateway-response-types.html - AWS re:Post: API Gateway REST API の 403「Missing Authentication Token」のトラブルシュート(リソース/メソッド定義とデプロイの確認手順)
https://repost.aws/knowledge-center/api-gateway-authentication-token-errors