ある企業が、Amazon API Gateway + Lambda のサーバーレスアーキテクチャを使って公開 API を運用している。API のエンドポイントには認証が不要な Public API と、登録ユーザー向けの認証が必要な Private API がある。Private API では JWT トークンを使った認証を実装しており、最小限の運用負荷でトークンの検証とユーザー識別を実現したい。最も適切なソリューションはどれか。
- A. Amazon Cognito ユーザープールオーソライザーを API Gateway に設定し、Cognito で発行された JWT の検証を API Gateway が自動的に行う。
- B. API Gateway の Lambda オーソライザー(Lambda Authorizer)を設定し、リクエストの Authorization ヘッダーの JWT を検証して IAM ポリシーを返す。
- C. API Gateway のリソースポリシーで特定の IP アドレスからのアクセスのみを許可し、認証代わりに使用する。
- D. Lambda 関数内で JWT トークンの検証ロジックをすべて実装し、全エンドポイントで認証チェックを行う。
解答と解説を見る
正解: A
Amazon Cognito ユーザープールオーソライザーを API Gateway に設定すると、クライアントが Cognito から取得した JWT(ID トークンまたはアクセストークン)を Authorization ヘッダーに付けてリクエストするだけで、API Gateway が自動的に署名検証と有効期限確認を行う。認証ロジックを Lambda 関数に実装する必要がなく、運用負荷が最小限である。選択肢DはすべてのLambda 関数内にJWT検証ロジックを実装する方法で、コードの重複・更新コストが高く「最小限の運用負荷」要件に反する。選択肢BのLambda オーソライザーは柔軟な認証ロジックが必要な場合に有効だが、JWT 検証のための Lambda 関数を別途実装・管理する必要があり Cognito オーソライザーより運用コストが高い。選択肢CのIPアドレス制限は認証ではなくネットワーク制御であり、ユーザー識別(認証)の要件を満たさない。
📚 関連サービスの解説: Amazon Cognito ・ Amazon API Gateway