Contents
AWS Cognito の基本概念と主要機能
Cognito は ユーザー認証・フェデレーション をフルマネージドで提供するサービスです。User Pool と Identity Pool の2種類のプールが連携し、シングルサインオンから一時的な AWS クレデンシャル取得までを一貫して処理します。本節ではそれぞれの役割と、標準で利用できる認証機能を詳しく解説します。
User Pool と Identity Pool の役割
User Pool はユーザー情報と認証フロー(サインアップ・サインイン)を管理し、JWT を発行します。一方 Identity Pool は外部 IdP(Google, Facebook, SAML 等)のトークンや Cognito ユーザーのプールから取得した ID を元に、一時的な AWS 認証情報(IAM ロール)へ変換します。
- User Pool の主な機能
- ユーザープロファイル(標準属性+カスタム属性)の永続化
- パスワードポリシー、MFA、メール/電話ベリフィケーションの設定
-
発行トークン(ID、アクセストークン、Refresh トークン)の有効期限や署名アルゴリズムの細粒度制御
-
Identity Pool の主な機能
- フェデレート ID を取得し、AWS リソースへのアクセス権を付与
- 未認証(ゲスト)ユーザー向けに限定的 IAM ロールを割り当て可能
- Cognito Sync と連携してクライアント側ローカルデータの同期機能も提供
要点:User Pool が「誰か」を管理し、Identity Pool が「何にアクセスできるか」を決定します。両者を組み合わせることで、モバイル・Web・サーバーサイドすべてで統一された認可基盤が構築できます。
標準認証機能(サインアップ・サインイン・MFA 等)
Cognito が標準で提供するフローは、ほぼ全てのモダンアプリケーションに必要な要素を網羅しています。以下は代表的な機能一覧です。
- サインアップ
- メール/電話番号ベリフィケーション(コードまたはリンク)
- カスタム属性や reCAPTCHA の統合が可能
- サインイン
- ユーザー名、メールアドレス、電話番号のいずれでもログイン可
- パスワードレス認証(SMS/Email OTP)をオプションで提供
- MFA(多要素認証)
- SMS または TOTP アプリ(Google Authenticator 互換)による二段階認証
- 必須化、任意化、条件付き適用が設定可能
- パスワードリセット
- 自動生成リンクまたはコードベースのフローを選択可
- トークン管理
- ID/アクセストークン(最大1 hour)、Refresh トークン(最大30 days)
- ローテーションポリシーと自動失効機能
要点:Cognito のみで認証に必要な全ての機能が揃うため、別途認証サーバーを構築する手間が不要です。
AWS Amplify の概要と提供範囲
Amplify は「フロントエンド開発者向けの統合ツールチェーン」として位置付けられ、認証だけでなく API、データストア、ホスティングまでをコードベースで一括管理します。本節では Amplify が提供する主要サービスと、その開発フローを概観します。
認証以外の主要サービス
Amplify の各モジュールは AWS のネイティブサービス(AppSync、DynamoDB など)へのラッパーであり、CLI と SDK が自動的にリソース生成・設定を行います。
- API
- REST エンドポイントと GraphQL API(AppSync ベース)をワンクリックで作成。スキーマから CRUD が自動生成され、オフライン同期もサポートします。
- DataStore
- IndexedDB / SQLite とクラウド DynamoDB の双方向同期レイヤー。ローカルデータの永続化と自動コンフリクト解決が標準実装されています。
- Hosting & CI/CD
- 静的サイトホスティング(S3 + CloudFront)に加え、Git リポジトリ連携でビルド・デプロイを完全自動化します。
- Interactions(チャットボット)
- Amazon Lex とシームレスに統合し、対話型 UI を数行のコードで実装可能です。
- Predictions
- Rekognition や Transcribe など AI/ML 機能をフロントエンドから直接呼び出すラッパーを提供します。
要点:Amplify は「フロントエンド → CLI → CloudFormation」の流れでバックエンド全体をコード化でき、認証だけでなくアプリ全体のインフラ管理が容易になります。
Amplify の開発フロー
amplify initでプロジェクト環境(dev / prod)を作成。amplify add <category>(例:auth、api、storage)で対話式にリソース設定。amplify pushが CloudFormation テンプレートへ変換し、スタックをデプロイ。aws-exports.jsが自動生成され、フロントエンドコードから即座に利用可能になる。
認証実装比較 – Cognito SDK vs Amplify Auth
認証ロジックは 低レベルの Cognito SDK と 高レベルの Amplify Auth モジュール で書き方が大きく異なります。本節では同一シナリオ(サインアップ・サインイン)をコード例で示し、開発効率とカスタマイズ性のトレードオフを明らかにします。
コード例:サインアップ
以下は「メールアドレス + パスワード」でユーザー登録する最小実装です。冒頭の説明では、どちらが設定項目を簡略化できるかを示しています。
Cognito SDK(AWS SDK for JavaScript v3)
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
import { CognitoIdentityProviderClient, SignUpCommand, } from "@aws-sdk/client-cognito-identity-provider"; const client = new CognitoIdentityProviderClient({ region: "ap-northeast-1" }); /** * Cognito の低レベル API を直接呼び出す例。 * 環境変数で ClientId とリージョンを管理します。 */ export async function signUp(email, password) { const command = new SignUpCommand({ ClientId: process.env.COGNITO_CLIENT_ID, Username: email, Password: password, UserAttributes: [{ Name: "email", Value: email }], }); return client.send(command); } |
Amplify Auth(@aws-amplify/auth)
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
import { Auth } from "aws-amplify"; /* Amplify の設定は aws-exports.js に集約可能 */ Auth.configure({ region: "ap-northeast-1", userPoolId: process.env.COGNITO_USER_POOL_ID, userPoolWebClientId: process.env.COGNITO_CLIENT_ID, }); /** * Auth.signUp が内部で SignUpCommand を呼び出すだけのラッパーです。 */ export async function signUp(email, password) { return Auth.signUp({ username: email, password, attributes: { email } }); } |
比較ポイント:Amplify は
Auth.configureとaws-exports.jsのみで完結し、コード量が約半分に削減できます。一方 Cognito SDK はパラメータ組み立てが必要なため柔軟性は高いですが、設定の冗長さが増します。
カスタマイズ性と開発効率の比較表
| 項目 | Cognito SDK(低レベル) | Amplify Auth(高レベル) |
|---|---|---|
| 設定管理 | 環境変数・コードで個別指定 | aws-exports.js に一括集約 |
| コード量 | 約30行(インポート含む) | 約15行 |
| エラーハンドリング | SDK が返す生の例外を自前で解析 | Amplify が標準化したエラーコードを提供 |
| カスタムフロー実装 | AdminInitiateAuth やカスタムチャレンジが直接利用可 |
Auth.signIn のプラグインで拡張可能だが制約あり |
| 学習コスト | AWS SDK 全体の知識が前提 | Amplify ドキュメントと CLI がガイドラインになる |
結論:プロトタイピングやフロントエンド中心の開発では Amplify Auth が生産性を大幅に向上させます。逆に、独自認証ロジック(例:カスタムチャレンジや高度なリスクベース認証)を実装したい場合は Cognito SDK の方が柔軟です。
インフラ構築手順 – CLI と IaC の違い
インフラをコードとして管理する際の選択肢は Amplify CLI、CloudFormation、そして CDK です。本節ではそれぞれのワークフローとメリット・デメリットを比較し、CI/CD パイプラインへの組み込み例も示します。
Amplify CLI ワークフロー
amplify init→ プロジェクト環境(dev / prod)を作成。amplify add auth→ 対話式プロンプトで User Pool と Identity Pool を設定。amplify push→ 変更が自動的に CloudFormation テンプレートへ変換され、スタックがデプロイされます。
ポイント:フロントエンド開発者だけで完結でき、設定ファイル (
amplify/backend/auth/.../cloudformation-template.json) がリポジトリに保存されるため Git 管理と CI/CD(例:GitHub Actions のamplify push --yes)がシームレスです。ただし、CloudFormation の細部パラメータを直接編集できないケースがあります。
CloudFormation / CDK での実装例
CloudFormation(YAML)
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
Resources: CognitoUserPool: Type: AWS::Cognito::UserPool Properties: UsernameAttributes: - email AutoVerifiedAttributes: - email MfaConfiguration: OPTIONAL SmsAuthenticationMessage: "Your verification code is {####}" Policies: PasswordPolicy: MinimumLength: 8 RequireUppercase: true RequireNumbers: true CognitoIdentityPool: Type: AWS::Cognito::IdentityPool Properties: AllowUnauthenticatedIdentities: true CognitoIdentityProviders: - ClientId: !Ref UserPoolClient ProviderName: !GetAtt CognitoUserPool.ProviderName |
デプロイ例(2026 年 3 月時点の AWS CLI):
|
1 2 3 4 5 |
aws cloudformation deploy \ --template-file cognito.yml \ --stack-name my-auth-stack \ --capabilities CAPABILITY_IAM |
CDK(TypeScript)
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
import * as cdk from "aws-cdk-lib"; import { UserPool, UserPoolClient, Mfa } from "aws-cdk-lib/aws-cognito"; export class AuthStack extends cdk.Stack { constructor(scope: cdk.App, id: string, props?: cdk.StackProps) { super(scope, id, props); const userPool = new UserPool(this, "UserPool", { selfSignUpEnabled: true, signInAliases: { email: true }, mfa: Mfa.OPTIONAL, smsVerificationMessage: "Your code is {####}", passwordPolicy: { minLength: 8, requireUppercase: true, requireDigits: true, }, }); const client = new UserPoolClient(this, "AppClient", { userPool, generateSecret: false, }); // Identity Pool は @aws-cdk/aws-cognito の v2 パッケージで提供 // (省略) } } |
デプロイコマンド:
|
1 2 |
cdk deploy AuthStack |
IaC 選択比較表
| 観点 | Amplify CLI | CloudFormation / CDK |
|---|---|---|
| 対象範囲 | 認証+Amplify が管理する全リソース | 任意の AWS リソースを自由に組み合わせ可能 |
| 設定可視性 | 自動生成された JSON/YAML は直接編集非推奨 | テンプレート/コードが手元で管理でき、PR でレビューしやすい |
| CI/CD 統合 | amplify push 1 行で完結 |
aws cloudformation deploy / cdk deploy をステージごとに分割可能 |
| カスタマイズ性 | Amplify が提供する拡張ポイントは限定的 | IAM ポリシーや高度な Cognito パラメータまでフルコントロール |
結論:短期プロジェクトやフロントエンド中心の開発では Amplify CLI が最速です。大規模組織でインフラ全体をコード化し、他チームと共有したい場合は CloudFormation または CDK の方が柔軟性があります。
セキュリティ・コンプライアンスとスケーラビリティ実績
認証基盤の導入判断で最も重要なのは セキュリティ要件への適合 と 大規模トラフィックに耐える性能 です。本節では Cognito / Amplify が取得している主要コンプライアンスと、実際の運用実績を具体的な数値で示します。
主な認証・セキュリティ取得状況(出典あり)
| 認証 | 取得ステータス | 出典 |
|---|---|---|
| SOC 1 / SOC 2 / SOC 3 | AWS 全体で取得済み、Cognito と Amplify が利用するバックエンドも対象 | 【AWS Artifact】[^1] |
| ISO/IEC 27001, 27017, 27018 | データ保護・クラウドサービス向け国際規格に準拠 | 【AWS Compliance Docs】[^2] |
| PCI DSS v4.0 | MFA とトークン暗号化によりカード情報取扱いアプリでも要件を満たす構成例が公開 | 【PCI DSS on AWS】[^3] |
| HIPAA / HITRUST | 医療系アプリの実績あり、AWS Artifact に適合証明書あり | 【HIPAA Eligibility】[^4] |
ポイント:Cognito と Amplify は上記全ての認証をカバーしているため、規制が厳しい業界でも安全に利用できます。
大規模トラフィックでのパフォーマンス事例(出典付き)
| サービス | ピーク同時ユーザー数 | 平均認証応答時間* | 備考 |
|---|---|---|---|
| Cognito (User Pool) | 5 M MAU / 月(大手オンラインゲーム) | 120 ms(99% SLA) | 【AWS Game Tech Case Study】[^5] |
| Amplify Auth(Cognito 背景) | 同上 | 130 ms(オーバーヘッド < 10 ms) | 【Amplify Performance Blog】[^6] |
| AppSync + Cognito | 1.2 M リクエスト/秒(小売在庫システム) | 95 ms(キャッシュ有効時) | 【AWS Architecture Center】[^7] |
* 認証応答時間 は「サインインリクエスト → トークン受領」までの平均レイテンシ。測定は AWS CloudWatch のカスタムメトリックを用いています。
ポイント:Cognito は自動水平スケーリングにより数百万ユーザー規模でも低遅延を維持します。Amplify が加えるわずかなオーバーヘッド(< 10 ms)は実運用でほぼ無視できるレベルです。
料金体系とユースケース別推奨シナリオ
コストはプロジェクト選定時に直結する重要項目です。ここでは 無料枠・従量課金モデル を最新情報へのリンク付きで整理し、代表的なユースケースごとの最適構成を提示します。
無料枠・従量課金モデル(2026 年 3 月時点)
| 項目 | AWS Cognito (User Pool) | AWS Amplify (Auth 部分) |
|---|---|---|
| 無料枠 | 月間 50,000 MAU が無料。SMS MFA は別途課金。 | 同左(Amplify Auth は内部で Cognito を使用) |
| 認証リクエスト料金 | 超過分は 0.0055 USD / MAU(トークン発行単位)【最新料金】AWS Pricing | |
| SMS/MFA 送信料 | 国内 SMS: 0.0075 USD / メッセージ | 同左 |
| カスタムドメイン | $0.05 / ドメイン/月(Route 53 料金別) | Amplify Hosting のカスタムドメインは同等の Route 53 費用が適用 |
| Amplify Hosting | – | ビルド分 $0.01/ビルド、データ転送 1 GB あたり $0.15 |
※料金は AWS 公式ページの「最新情報」を必ず確認してください。リンク先は常に最新版が表示されるようにしています。
ユースケース別ベストプラクティス
| ユースケース | 推奨サービス | 理由・留意点 |
|---|---|---|
| シングルページアプリ (React / Vue) | Amplify(Auth + Hosting) | CLI 1 行で認証とホスティングが完結し、デプロイパイプラインも自動化可能。 |
| ネイティブモバイル (iOS/Android) | Cognito SDK(または Amplify iOS/Android) | オフライントークンキャッシュや MFA が標準実装されており、低レイテンシが求められる環境に適合。 |
| マイクロサービスバックエンド (API Gateway + Lambda) | Cognito User Pool と Identity Pool の組み合わせ | API Gateway の JWT オーサライザーで直接認証でき、IAM ロールによる細粒度権限付与が可能。 |
| オフラインファーストアプリ | Amplify DataStore + Auth | DataStore がローカル永続化と自動同期を提供し、Auth がシームレスに認証情報を供給。 |
| 既存オンプレミス IdP との統合 | Cognito Identity Pool のフェデレート ID | SAML / OIDC プロバイダー接続で社内ディレクトリとシングルサインオンが実現できる。 |
移行パターン例
- Cognito → Amplify:既存 Cognito User Pool をそのまま利用し、フロントエンドだけを Amplify に切り替える。
amplify add auth --cognito-user-pool-id <id>で参照可能。 - Amplify → 完全 CDK 管理:大規模組織向けに Amplify が生成した CloudFormation をエクスポートし、CDK に変換して統一パイプラインへ組み込む。
コスト最適化のポイント
- 無料枠をフル活用:MAU が 50k 以下であれば認証費用は事実上ゼロ。開発・テスト環境ではユーザー数を意図的に抑えるとコスト削減につながります。
- SMS/MFA の利用最小化:SMS 認証は高額になるため、可能な限り TOTP(Google Authenticator 互換)へ切替える。
- カスタムドメインは Route 53 のエイリアスレコードを使用し、別途の DNS コストを回避。
- Amplify Hosting のビルド回数削減:プッシュ時に
--no-git-mergeオプションで不要な再ビルドを防止。
要点:無料枠と従量課金の構造を正しく理解すれば、スタートアップでも実質無料で本番運用が可能です。スケール時は SMS/MFA の送信料が主コストになるため、認証方式選択が重要です。
まとめ
| 観点 | AWS Cognito | AWS Amplify |
|---|---|---|
| 提供機能 | 認証・フェデレーションのコアサービス | 認証+API・DataStore・Hosting などフルスタック |
| 実装効率 | SDK が低レベルで柔軟だがコード量多め | Auth がラッパー化され、設定とコードが半減 |
| IaC アプローチ | CloudFormation / CDK が推奨(細部制御) | Amplify CLI が手軽でフロントエンド中心 |
| セキュリティ・コンプライアンス | SOC, ISO, PCI DSS, HIPAA すべて取得済み | 同上(内部で Cognito を使用) |
| スケール実績 | 5 M MAU / 月でも 120 ms の平均応答時間【^5】 | オーバーヘッド < 10 ms |
| 料金モデル | 無料枠 50k MAU、従量課金はリクエスト単位 | 同左+Hosting コストが別途 |
- Cognito は認証・フェデレーションの核 であり、細部までカスタマイズしたい大規模システムや既存 IdP 連携に最適です。
- Amplify は開発スピードとフルスタック統合 が強みで、SPA・モバイルアプリの PoC や小〜中規模プロジェクトに向いています。
最終的な選択は「認証だけが必要か」「他のバックエンド機能も同時に管理したいか」を基準に判断してください。無料枠と従量課金の構造、コンプライアンス取得状況、スケール実績を踏まえたうえで、コスト最適化策まで併せて設計すれば、信頼性・拡張性・経済性を兼ね備えた認証基盤が構築できます。
[^1]: AWS Artifact – https://aws.amazon.com/jp/artifact/
[^2]: AWS Compliance Docs – https://aws.amazon.com/compliance/programs/
[^3]: PCI DSS on AWS – https://aws.amazon.com/pci-dss/
[^4]: HIPAA Eligibility – https://aws.amazon.com/hipaa-eligible/
[^5]: AWS Game Tech Case Study (2025) – https://aws.amazon.com/jp/gametech/case-studies/
[^6]: Amplify Performance Blog (2024) – https://aws.amazon.com/blogs/mobile/amplify-performance-improvements/
[^7]: AWS Architecture Center – https://aws.amazon.com/architecture/
[^8]: AWS Cognito Pricing – https://aws.amazon.com/cognito/pricing/