🦔

【Cloudfront + API Gateway】Cloudfront経由だとMissing Authentication Token😩

2022/07/29に公開

結論

オリジンとビヘイビアをちゃんと理解して適切に設定しましょう。
ビヘイビアはオリジンにアクセスした後の下のリンク階層を指定するものだそうです。
なので、以下のように

amazon.com /dev/api/userの場合
オリジン: https:// ~~~amazon.com
オリジンパス: /dev
ビヘイビアパスパターン: /api/user

と設定するといけるはず。

困りごと

Cloudfront + API Gateway + lambdaを使おうとしていたある日のことでした。
API GatewayとLambdaの連携を行い、無事に"Hello from lambda"が返ってきました!

次はCloudfront経由でオリジンとビヘイビアを設定し、意気揚々とURLを叩きます。
なんとそこにはMissing Authentication Tokenの文字...

調べてみるとエンドポイントが間違ってんだぜという記事が多数。
CloudFront + API Gateway + Lambda の環境でうまくいかない場合のレスポンスとその原因
API Gateway REST API エンドポイントからの 403「Missing Authentication Token」エラーをトラブルシューティングするにはどうすればよいですか?

でもどう間違ってるのかわからない!!!!!

原因:ビヘイビアを適当に決めすぎていた

こちらのMedium記事 “Missing Authentication Token” — CloudFront/APIG Troubleshootingに全て載っていました。

要約すると、

「ビヘイビアはオリジンにアクセスした後の下のリンク階層を指定しているものであって、
適当に書いて良いわけねーだろ、このヤロー!」

と書いてあります。
つまり、ビヘイビアとオリジンを正しく設定しないと叩く先のエンドポイントまで違ってきちゃうよということ。
なので、以下のように

amazon.com /dev/api/userの場合の場合
オリジン: https:// ~~~amazon.com
オリジンパス: /dev (ステージ名までが柔軟性があって良い?)
ビヘイビアパスパターン: /api/user

と設定するといけるはず。

Discussion