DVAセキュリティ

既存のサーバーレスAPIはAmazon API GatewayのHTTP APIで構築され、フロントエンドはAmazon Cognito User Poolsで認証します。各エンドポイントは、アクセストークン内のOAuthスコープ(例:orders/read)に基づいてアクセスを制御する必要があります。Lambda関数のコードを追加せず、最小のコストと運用負荷で実現する方法はどれですか。

A
HTTP APIにJWTオーソライザーを構成し、issuerにUser Pool、audienceにアプリクライアントID、authorizationScopesでスコープを検証する
✓ 正解
HTTP APIのJWTオーソライザーはCognitoのJWTをコードなしで検証でき、issuer/audienceの設定とauthorizationScopesによりOAuthスコープ認可まで自動化できる。追加Lambdaが不要で最小コスト・運用負荷を満たす。
B
REST APIに移行してCognito User Poolオーソライザーを構成し、各メソッドのOAuthスコープでアクセスを制御する
REST APIへの移行が必要でHTTP APIより従量コストが高く改修負荷も大きい。Cognitoオーソライザー自体は機能するが『既存HTTP APIで最小コスト・運用負荷』という要件を満たさない。
C
HTTP APIにLambdaオーソライザー(REQUEST形式)を構成し、関数内でJWTの署名検証とスコープ判定を行う
Lambdaオーソライザーは認可ロジックを関数コードで実装する必要があり、『コードを追加せず』の要件に反する。さらに関数の実行コストとコールドスタートによるレイテンシーも増える。
D
HTTP APIの前段にAmazon CloudFrontを配置し、Lambda@EdgeでJWTを検証してスコープを判定する
CloudFrontの追加とLambda@Edgeのコード実装が必要となり、コードを追加せず最小コストという要件に反する。HTTP APIネイティブの機能で完結できるため過剰な構成である。

解説

HTTP APIにはネイティブのJWTオーソライザーがあり、Cognito User Poolsの発行するJWTをコードなしで検証できます。 issuer(User PoolのエンドポイントURL)とaudience(アプリクライアントID)を設定し、ルートごとにauthorizationScopesを指定すればOAuthスコープによる認可も自動化され、追加のLambdaも不要で最小コスト・最小運用負荷を実現します。 選択肢BのREST API移行はコスト・改修負荷が増え『既存HTTP APIで最小』の要件に反する。 選択肢CのLambdaオーソライザーは関数コードと追加の実行コスト・レイテンシーが発生する。 選択肢DのLambda@EdgeはCloudFront追加とコード実装が必要で要件に反する。

ドメイン別正答率・予想スコアでリアルタイムに実力把握

無限ノックでDVAを徹底対策。全問AI生成のオリジナル問題。

無料で演習を始める →
DVA の問題一覧に戻る