Contents
Amazon Cognito の概要と主な利用シーン
Cognito はモバイル/Web アプリの 認証 (Authentication) と 一時的な AWS クレデンシャル取得 を提供するマネージドサービスです。ユーザープールと ID プールという 2 種類のプールで構成され、サインアップ・サインインだけでなく SNS 連携や MFA も標準機能として利用できます。自動スケーリングによりトラフィック増加時でもバックエンド実装を意識せずに運用できる点が大きな利点です。
ユーザープールの特徴
ユーザープールは独立した認証ディレクトリとして機能し、フロントエンドから直接呼び出すことができます。以下は主な機能ポイントです。
-
SDK 統合
JavaScript、iOS、Android 向けの公式 SDK が提供されており、数行のコードでサインアップ・サインイン API を呼び出せます。 -
標準認証フロー
パスワードベース、メール/電話番号検証、MFA(SMS・TOTP)を組み合わせた認証がデフォルトで利用可能です。 -
カスタム属性と Lambda トリガー
任意の属性定義や、サインアップ時のメール送信/ユーザー属性加工などを Lambda で自由に拡張できます。
ID プール(フェデレーテッド ID)の活用方法
ID プールは外部 IdP(Google、Facebook、Apple、SAML、OIDC 等)と連携し、AWS の一時クレデンシャル を取得させる仕組みです。取得したクレデンシャルは IAM ロールに紐付けられ、以下のようなサーバーレス構成を実現します。
-
フロントエンドから直接 AWS リソースへアクセス
S3 へのファイルアップロードや API Gateway の呼び出しをバックエンドなしで行えるため、レイテンシ削減とコスト最適化が可能です。 -
マルチテナント SaaS や B2C アプリに最適
テナントごとにロールや属性ベースのポリシーを付与でき、細かい権限管理が容易になります。
AWS IAM の概要と主な利用シーン
IAM は AWS アカウント内のリソースへの認可 (Authorization) を統括するサービスです。ユーザー・グループ・ロール・ポリシーという基本要素で構成され、インフラ管理者からサーバーレス関数まであらゆるエンティティに最小権限を付与できます。
ポリシーとロールの基本構造
IAM の中心は JSON 形式のポリシーとロールです。主な特徴は次の通りです。
-
細粒度のアクセス制御
Action、Resource、Conditionを組み合わせて「誰が」「どこから」「いつ」実行できるかを正確に定義できます。 -
一時的ロール (STS)
EC2、Lambda、外部 IdP(SAML/OIDC)からのアクセスは、一時的な認証情報を発行する STS を介して安全に実現します。 -
組織単位のガバナンス
Service Control Policy (SCP) により、複数アカウントを横断した権限上限を一元管理できます。
主な適用シナリオ
| シナリオ | 利用目的・代表的な構成 |
|---|---|
| インフラ管理 | EC2、RDS、VPC などのリソース操作権限をチーム単位で付与。IAM ユーザー/グループとポリシーで最小権限を実現。 |
| サービス間連携 | Lambda が S3 バケットに書き込む、API Gateway が DynamoDB を参照する際のロールベースアクセス。 |
| 外部 IdP 統合 (SSO) | 社内 Active Directory の SAML 連携で IAM ロールを自動付与し、AWS コンソールへのシングルサインオンを実現。 |
| コンプライアンス監査 | ポリシーのバージョン管理と CloudTrail による権限変更履歴の追跡で規制対応を支援。 |
IAM は認可機能に特化しており、エンドユーザー向けのサインアップ・サインイン UI やトークン発行は提供しません。
認証と認可の役割分担 ― 比較表
Cognito と IAM は「誰が」アクセスできるかを決める層で異なります。下表は主要比較軸をまとめたものです。スケーラビリティに関する数値は公式ドキュメントで明示されていないため、実績ベースの参考情報として記載しています(※AWS の内部テスト結果やサードパーティ調査に基づく)。
| 比較項目 | Amazon Cognito | AWS IAM |
|---|---|---|
| 対象ユーザー層 | エンドユーザー (B2C、モバイル/Web アプリ) | 社内エンジニア、サービス間ロール、SAML 連携した企業ユーザー |
| 提供機能 | 認証、トークン発行、MFA、外部 IdP 連携、一時クレデンシャル取得 | リソースへのアクセス権限付与、条件付きポリシー、組織単位ガバナンス |
| スケーラビリティ | 実績として数十万件/秒規模の同時認証リクエストが報告されている(公式上限は未公表) | API 呼び出しはデフォルトで 5,000 TPS のレート制限あり(IAM API クォータ)。認可自体は AWS 基盤に依存し、実質的に無制限とみなせる |
| カスタマイズ性 | Lambda トリガーでサインアップ・サインインフローを自由拡張可能。UI は独自実装が必要 | ポリシーは JSON で高度に条件付与できるが、認証プロトコルの変更や UI カスタマイズは不可 |
| 料金体系 | MAU (Monthly Active Users) 課金 – 2024 年時点で無料枠 5 万 MAU、以降 $0.005/MAU(公式価格表) ID プールの STS トークン発行は無料 |
IAM 自体は無料。STS の AssumeRole 呼び出しや一部 API は従量課金が適用される(詳細は IAM 料金ページ) |
| 主な連携先 | API Gateway、AppSync、Lambda、S3 (直接アクセス) | S3、DynamoDB、RDS、EKS など全 AWS サービス全般 |
ユースケース別の推奨構成
モバイル / Web アプリ
| 項目 | 推奨サービス・構成 |
|---|---|
| 認証 | Amazon Cognito ユーザープール + SDK (MFA, カスタム属性) |
| フロントエンドからのリソースアクセス | Cognito ID プール → IAM ロールで S3/ API Gateway への一時クレデンシャル付与 |
| メリット | 開発工数削減、スケーラブルな認証基盤、サーバーレス構成が容易 |
| 留意点 | カスタム UI が必要な場合は独自実装が必須。Cognito の同時リクエスト上限は暗黙的にスケールするが、大規模トラフィック時は事前負荷テストを推奨 |
社内システム(イントラネット)
| 項目 | 推奨サービス・構成 |
|---|---|
| 認証 & SSO | AWS IAM Identity Center (旧 AWS Single Sign‑On) + SAML 連携 |
| リソース権限管理 | IAM ロール/ポリシーで最小権限を徹底 |
| メリット | 社内 IdP と統合し、AWS コンソール・CLI への一元ログインが可能。IAM の細粒度制御でコンプライアンス対応が楽になる |
| 留意点 | Cognito は不要。ポリシー管理の複雑さを軽減するために IaC (Terraform / CloudFormation) を併用すること |
マルチテナント SaaS
| 項目 | 推奨サービス・構成 |
|---|---|
| 顧客認証 | テナントごとに分離した Cognito ユーザープール、または属性ベースで単一プールを共有 |
| テナント別リソース権限 | IAM ロール + aws:PrincipalTag 条件でテナントタグ付与 → ポリシーでアクセス制御 |
| メリット | テナント増加に伴う認証スケールは Cognito が自動処理、権限制御は IAM のタグベースポリシーで一元管理 |
| 留意点 | プール数が多くなると管理コスト上昇。テナント分割戦略(プール vs 属性)を設計段階で決定すること |
実装ベストプラクティス・ハイブリッド移行ガイド
Cognito と IAM の連携手順
-
Cognito ユーザープールで認証
アプリからユーザーがサインインし、ID トークン(JWT)を取得。 -
ID プールにロールマッピング
ID プールの「認証されたロール」に条件付きポリシーを設定し、cognito-identity.amazonaws.com:audとcognito-identity.amazonaws.com:amrをチェックする例は以下です。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": ["s3:*"], "Resource": "arn:aws:s3:::my-app-bucket/${cognito-identity.amazonaws.com:sub}/*", "Condition": { "StringEquals": { "cognito-identity.amazonaws.com:aud": "us-east-1:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" } } } ] } |
- フロントエンドでクレデンシャル取得
javascript
import { CognitoIdentityCredentials } from 'aws-sdk';
AWS.config.credentials = new CognitoIdentityCredentials({
IdentityPoolId: 'us-east-1:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx',
Logins: {
'cognito-idp.us-east-1.amazonaws.com/
}
});
// 取得したクレデンシャルで S3 に直接アップロード可能
段階的移行フロー
| フェーズ | 主な作業内容 | 移行のポイント |
|---|---|---|
| 1️⃣ 現行 IAM の可視化 | 既存ポリシー・ロールを一覧化、CloudTrail で実際の使用状況を分析 | 不要権限の削減とリファクタリング対象の特定 |
| 2️⃣ Cognito ユーザープール導入 | 新規顧客向けにサインアップフローを作成し、既存認証 API と併用運用 | 影響範囲を段階的に拡大(A/B テスト推奨) |
| 3️⃣ ID プールと IAM ロール統合 | テナント属性タグ付与 → 条件付きポリシーへ切替え | 従来の IAM ユーザーからロールベースへの移行で最小権限を維持 |
| 4️⃣ 完全移行 & 廃止 | 旧認証 API を削除し、Cognito + IAM のみで運用 | 運用コスト低減とセキュリティ向上が実感できる |
公式ドキュメント・最新情報
- Amazon Cognito 開発者ガイド
https://docs.aws.amazon.com/ja_jp/cognito/latest/developerguide/ - AWS IAM ユーザーガイド(ポリシー構文・ロールベストプラクティス)
https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/ - Cognito の料金ページ(2024 年時点)
https://aws.amazon.com/jp/cognito/pricing/ - IAM API クォータ・レート制限
https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_iam-quotas.html - AWS セキュリティベストプラクティス(2024/2025 年版)
https://aws.amazon.com/jp/security/best-practices/
上記リンクは AWS コンソールの「ヘルプ」や「Documentation」からも随時更新されます。実装前に 最新バージョン を必ず確認し、変更点があれば設計書へ反映してください。
まとめ
- Cognito はエンドユーザー向け認証と一時クレデンシャル取得をシームレスに提供し、モバイル/Web アプリでの導入コストを大幅に削減します。
- IAM は AWS リソースへの細粒度アクセス制御を担い、社内インフラやサービス間連携に不可欠です。
- 両者は 「認証」vs「認可」 の役割分担で補完し合うため、多くのシナリオでは組み合わせて使用することがベストプラクティスとなります。
本ガイドを参考に、プロジェクト要件に最適な構成と移行計画をご検討ください。