あなたはAPI GatewayのREST APIを構築しており、Cognito User Poolsで認証されたユーザーのみがアクセスできるよう保護する必要があります。クライアント(モバイルアプリ)はCognitoから取得したIDトークン(JWT形式)をAuthorizationヘッダーに付与してリクエストを送信します。JWT署名検証のカスタムコードを書かずに、最も運用負荷が低い方法で実装するには何を選択すべきですか?(※JWT=JSON Web Token、ユーザー認証情報をJSON形式でエンコードした標準的なトークン規格)
API GatewayのリソースにCognito User Poolsオーソライザーを設定し、対象のUser Pool ARNとクライアントIDを指定する
✓ 正解
API GatewayのCognito User Poolsオーソライザーは、User Pool ARNとクライアントIDを設定するだけでJWTの署名検証・有効期限チェック・クライアントID照合を自動実施します。カスタムコード不要でCognito認証をネイティブに統合できる最も運用負荷の低い方法です。
C
API GatewayのIAMオーソライザーを有効にし、クライアントにAWS署名バージョン4(SigV4)でリクエストを署名させる
API GatewayのリソースにCognito User Poolsオーソライザーを設定し、対象のUser Pool ARNとクライアントIDを指定する。
API GatewayはCognito User Poolsとのネイティブ統合をオーソライザーとして提供しており、カスタムコード不要でJWTトークンの署名検証・有効期限チェック・クライアントID確認を自動的に行います。User Pool ARNとクライアントIDを設定するだけで機能します。
選択肢A は LambdaオーソライザーでJWT署名の検証ロジックをカスタム実装する方法は、カスタムコードが必要であり運用負荷が高い。
選択肢C は API GatewayのIAMオーソライザーを有効にし、クライアントにAWS署名バージョン4(SigV4)でリクエストを署名させる方法はAWS SDKを使ったサービス間通信向けであり、モバイルアプリのJWT認証には不適切。
選択肢D は AWS WAF(Web Application Firewall)にJWT検証用のカスタムルールを作成してAPI Gatewayの前段に配置する方法はWAFはL7ファイアウォールであり認証機能はない。