Instiq
第3章 · セキュリティ·v2.1.0·更新 2026/6/14·読了目安 約9分

変更要約: in-scopeサービス網羅(軸B): s3にSystems Manager(Parameter Store)とAppConfigによる設定/フィーチャーフラグ外部化の定義・役割・選択基準を追記。

3.2Amazon Cognito によるユーザー認証

この節の要点

Cognito のユーザープール(サインアップ/サインイン・JWT 発行)とアイデンティティプール(トークンを一時 AWS 認証情報に交換)の違い、アプリのユーザー認証フローを理解します。

アプリのエンドユーザーのサインイン/サインアップを担うのが Amazon Cognito です。ユーザープールアイデンティティプールの役割の違いが重要です。

3.2.1ユーザープールとアイデンティティプール

ユーザープール(サインアップ/サインイン=認証・JWT トークンを発行・「あなたは誰か」)と、アイデンティティプール(トークンを一時 AWS 認証情報に交換・「どの AWS アクセスを与えるか」)の役割の違いを対比した図。
ユーザープール(認証)とアイデンティティプール(AWS 認可)
  • ユーザープールサインアップ/サインイン(認証)を提供し、成功すると JWT トークン(ID/アクセストークン)を発行する。「あなたは誰か」を扱う。
  • アイデンティティプール(フェデレーテッド ID):トークンを 一時的な AWS 認証情報 に交換し、S3 等へ直接アクセスさせる。「どの AWS アクセスを与えるか」を扱う。
  • 外部 ID プロバイダー(Google・Facebook・SAML/OIDC 等)とのフェデレーションにも対応。
  • API Gateway の Cognito オーソライザーでユーザープールの JWT を検証できる。

アプリのエンドユーザーをどう扱うかは、まず「認証(誰か)」と「AWS 認可(何にアクセスできるか)」を分けて考えます。ユーザープール はサインアップ/サインインを担い、成功すると JWT トークンを返します。アプリはこのトークンを API Gateway の Cognito オーソライザーに渡して保護 API を呼び出せます。一方、クライアントから S3 や DynamoDB などの AWS サービスを直接呼び出したい場合は アイデンティティプール を使い、ユーザープールや外部 ID プロバイダーのトークンを 一時的な AWS 認証情報 に交換します。両者は併用が基本で、「ユーザープールで認証 → アイデンティティプールで AWS 認可」という流れになります。MFA や Hosted UI、SRP によるパスワード保護もユーザープール側の機能です。

観点ユーザープールアイデンティティプール
役割認証(誰か)AWS 認可(何にアクセス)
出力JWT トークン一時的な AWS 認証情報
用途サインイン・API 保護S3/DynamoDB を直接呼ぶ

ユーザープールが発行するトークンは3種類あります。ID トークン はユーザーの属性(メール等)を含み、アクセストークン は API へのアクセス可否、リフレッシュトークン は失効したトークンの再取得に使います。いずれも JWT で、有効期限が切れたらリフレッシュトークンで更新します。セキュリティを高めるには MFA(SMS・TOTP)や、パスワードを平文で送らない SRP(Secure Remote Password) を使います。サインアップ前後やトークン生成時に独自処理を挟みたいときは Lambda トリガー(Pre/Post 認証、Pre トークン生成など)を使い、独自の検証やクレーム追加ができます。ログイン画面を自作せず素早く用意したいなら Hosted UI が便利で、Google などの外部 IdP ボタンも統合できます。これらはすべてユーザープール側の機能で、アイデンティティプールはあくまで「AWS 認証情報への交換役」に徹します。

シナリオ:モバイルアプリがログイン後に S3 へ写真を直接アップロード。 まず ユーザープールでサインインし JWT を取得。保護 API は API Gateway の Cognito オーソライザーで JWT を検証。クライアントが S3 へ直接書き込むため、アイデンティティプールで JWT を一時 AWS 認証情報に交換し、最小権限(そのユーザー領域だけ)で PutObject を許可します。

補足

Q. ユーザープールとアイデンティティプールの違いは? ユーザープール=認証(JWT 発行)、アイデンティティプール=トークンを一時 AWS 認証情報に交換。Q. API Gateway で JWT を検証するには? Cognito オーソライザーを使う。Q. 外部の Google ログインを使える? はい、フェデレーションで対応。

注意

混同に注意: 「JWT を発行=ユーザープール」「一時 AWS 認証情報=アイデンティティプール」を取り違えないこと。クライアントから AWS サービスを直接呼ぶならアイデンティティプールが必要で、ユーザープールだけでは AWS 認証情報は得られません。

試験ポイント

「アプリのサインイン/サインアップ=ユーザープール(JWT 発行)」「トークンを一時 AWS 認証情報に交換=アイデンティティプール」 の役割分担は DVA で頻出です。API Gateway は Cognito オーソライザーでこの JWT を検証できます。

3.2.2この節のまとめ

  • ユーザープール=認証(JWT)/アイデンティティプール=一時 AWS 認証情報
  • API Gateway は Cognito オーソライザーで JWT を検証

進捗の記録にはログインが必要です。

理解度チェック

(軽い確認用)

Q1. アプリのエンドユーザーのサインアップ/サインインを提供し、JWT トークンを発行するのはどれですか?

Q2. サインイン後のトークンを、S3 等へ直接アクセスするための一時 AWS 認証情報に交換するのはどれですか?

Q3. API Gateway で Cognito ユーザープールの JWT を検証してアクセスを制御する仕組みはどれですか?

理解度を確認第3章「セキュリティ」の問題を解く