AWS認定資格 WEB問題集&徹底解説

ソリューションアーキテクト-プロフェッショナル

Amazon Cognito の概要と試験出題ポイントは?

AWSサービスの一つであるAmazon Cognitoはどんな内容なのでしょうか?また、AWS認定資格のソリューションアーキテクト-プロフェッショナル(SAP)に合格するためには、サービスのどんなポイントを押さえておけばよいのでしょうか?
ここでは、そんなあなたの疑問に回答していきたいと思います

Amazon Cognito 徹底解説 | AWS認定試験の頻出ポイントまとめ

1. サービス概要

Amazon Cognito は、Web・モバイルアプリケーションにユーザー認証・認可・ユーザー管理機能を提供するフルマネージドサービスです。 独自ユーザーディレクトリ(ユーザープール)の管理と、AWS リソースへの一時的な認証情報付与(IDプール)の2つの主要機能を提供します。

OIDC / OAuth 2.0 / SAML 2.0 準拠で、Google・Facebook・Apple などのソーシャルログインや企業 IdP(Active Directory 等)との連携も可能。 主なユースケース: SPA / モバイルアプリのユーザー認証、API Gateway / ALB のオーソライザー、AWS リソースへの一時アクセス付与。

2. 主な特徴と機能

2.1 ユーザープール(User Pool)

  • アプリユーザーのサインアップ・サインイン・パスワード管理を担うディレクトリ。
  • 認証成功後に ID トークン・アクセストークン・リフレッシュトークン(JWT) を発行。
  • Hosted UI: Cognito が提供するマネージドのサインイン/サインアップ画面(カスタムドメイン設定可)。
  • ID フェデレーション: Google / Facebook / Apple / SAML / OIDC IdP を外部 ID プロバイダーとして設定可能。
  • MFA: SMS・TOTP(Authenticator アプリ)を設定可能。
  • Lambda トリガー: Pre-SignUp / Post-Confirmation / Pre-Token Generation など認証フロー各フェーズに Lambda を実行可能。
  • 高度なセキュリティ機能: リスクベース認証(不審なログインを検出して MFA を強制)。

2.2 ID プール(Identity Pool / フェデレーティッド ID)

  • 認証済みユーザー(Cognito ユーザープール / Google / SAML 等)または未認証ゲストに、一時的な AWS 認証情報(STS AssumeRoleWithWebIdentity)を付与。
  • 用途: S3 直接アップロード、DynamoDB アクセスなど、AWS SDK をクライアントから直接呼ぶ場合。
  • 認証済みロールと未認証ロールを分けて IAM で定義できる。

2.3 API Gateway / ALB との統合

  • API Gateway Cognito オーソライザー: リクエストヘッダーの JWT を Cognito ユーザープールで検証。有効ならバックエンドに転送。
  • ALB 組み込み認証: ALB リスナールールで Cognito ユーザープールを認証プロバイダーとして設定(authenticate-cognito アクション)。バックエンドは認証後のリクエストのみ受信。

2.4 ユーザープール vs ID プール(最重要)

  • ユーザープール: 「誰であるか」を証明する(認証 = Authentication)。JWT トークンを発行。
  • ID プール: 「何にアクセスできるか」を AWS リソースへの一時認証情報として付与(認可 = Authorization)。
  • 両方を組み合わせる典型パターン: ユーザープールで認証 → JWT を ID プールに渡す → 一時 AWS 認証情報を取得 → S3 に直接アクセス。

3. アーキテクチャおよび技術要素

  1. ユーザーがアプリからサインアップ / サインイン(またはソーシャル IdP 経由)。
  2. Cognito ユーザープールが認証し、JWT(ID/Access/Refresh トークン)を返す。
  3. アプリが JWT を API Gateway / ALB に送信 → Cognito オーソライザーが検証。
  4. (オプション)JWT を Cognito ID プールに渡し、STS から一時 AWS 認証情報を取得。
  5. 取得した一時認証情報で S3 / DynamoDB 等の AWS リソースに直接アクセス。

4. セキュリティと認証・認可

  • JWT 検証: ID トークン・アクセストークンは RS256 署名。有効期限・署名を API Gateway / ALB が自動検証。
  • MFA: SMS(電話番号必須)・TOTP(Authenticator アプリ)。高度なセキュリティ機能でリスクベース MFA も設定可能。
  • Lambda トリガーによる拡張: Pre-SignUp でメールドメイン制限、Pre-Token Generation でカスタムクレーム追加などが可能。
  • ID プール IAM ロール: 認証済み / 未認証ロールを最小権限で定義。ユーザー属性でロールを動的選択可能。
  • KMS 統合: カスタムドメイン用 ACM 証明書、Cognito の高度なセキュリティ機能ログは KMS 暗号化に対応。

5. 料金形態

  • ユーザープール: 月間アクティブユーザー(MAU)数で課金。一定数まで無料枠あり。
  • 高度なセキュリティ機能(Adaptive Authentication): MAU ベースで追加課金。
  • ID プール: 月間アクティブユーザー数(一定数まで無料)。
  • SMS MFA: SMS 送信は SNS の料金が発生。
  • TOTP MFA は追加料金なし。

6. よくあるアーキテクチャ・設計パターン

  • SPA + API Gateway: React/Vue → Amplify SDK でサインイン → JWT を API Gateway に送信 → Cognito オーソライザーで検証 → Lambda バックエンド。
  • ALB 認証: ALB + Cognito ユーザープールで Web アプリ全体を保護。バックエンド(EC2/ECS)は認証後のリクエストのみ受信。
  • S3 直接アップロード: Cognito ユーザープール → ID プール → 一時 AWS 認証情報 → S3 PutObject(バックエンド経由不要)。
  • 企業 SAML 統合: AD FS / Okta / Azure AD を SAML IdP として Cognito に設定。社員は社内アカウントで AWS アプリにサインイン。
  • Lambda トリガーによる制御: Pre-SignUp でメールドメイン検証、Post-Confirmation で DynamoDB にユーザー登録、Pre-Token Generation でカスタムクレーム追加。

7. 設定・デプロイ手順(ハンズオン例)

  1. Cognito コンソールでユーザープールを作成(サインイン方法・パスワードポリシー・MFA を設定)。
  2. アプリクライアントを作成(クライアント ID を取得)。
  3. Hosted UI のカスタムドメインを設定(myapp.auth.ap-northeast-1.amazoncognito.com)。
  4. Google など OIDC IdP を追加し、外部ログインを有効化。
  5. API Gateway の Cognito オーソライザーにユーザープール ARN を設定。
  6. (オプション)ID プールを作成してユーザープールと連携し、S3 への一時アクセス権を付与。

8. 試験で問われやすいポイント

8.1 ユーザープール vs ID プール(最頻出)

Q: 「アプリのユーザー認証(サインイン/JWT発行)」をしたい場合は?
A: Cognito ユーザープール。ID プールはユーザーに一時 AWS 認証情報を付与するためのもので認証自体は行わない。

Q: モバイルアプリのユーザーが S3 に直接アップロードするための AWS 認証情報を取得するには?
A: Cognito ID プール。ユーザープールの JWT を ID プールに渡し、STS 経由で一時認証情報を取得する。

8.2 API Gateway オーソライザーの種類

Q: API Gateway で Cognito ユーザープールの JWT を検証してバックエンドを保護するには?
A: API Gateway に Cognito ユーザープールオーソライザーを設定。Lambda オーソライザー(カスタム)不要で JWT を自動検証できる。

8.3 Lambda トリガーの活用

Q: 特定のメールドメイン(例: @example.com)のみ登録を許可したい場合は?
A: Pre-SignUp Lambda トリガーでメールドメインを検証し、条件外の場合は例外をスローしてサインアップを拒否する。

8.4 ALB 統合

Q: ALB の背後にある Web アプリを Cognito ユーザープールで認証したい場合は?
A: ALB リスナールールに authenticate-cognito アクションを設定。ユーザーは Hosted UI でサインインし、認証後のみバックエンドにアクセス可能。

8.5 Cognito vs IAM

Q: 外部ユーザー(一般消費者)向けの Web アプリ認証に使うべきサービスは?
A: Amazon Cognito(ユーザープール)。IAM はAWSアカウント内のユーザー/ロール管理用であり、アプリのエンドユーザー管理には不向き。