Contents
Amazon Cognito と IAM の公式定義と基本的役割
Amazon Cognito はエンドユーザー向けの CIAM(Customer Identity and Access Management) サービスで、ユーザープールと ID プールという 2 つのコンポーネントから構成されます。一方、IAM は AWS アカウント内のリソースに対する認可・権限管理を行う基盤サービスです。本節では公式ドキュメント(Cognito の概要/IAM の概要)に基づき、両サービスの役割と相互関係を整理します。
Cognito の基本構成
Cognito は ユーザープール と ID プール の 2 種類のプールで提供されます。以下はそれぞれの概要です。
- ユーザープール:メールアドレスや電話番号、パスワードなどの認証情報を管理し、MFA(SMS・TOTP)やリスクベース認証、外部 IdP(OIDC / SAML)とのフェデレーションもサポートします。
- ID プール:ユーザープールで認証されたエンドユーザーに対して AWS の一時的なアクセスキー/シークレットを発行し、S3・API Gateway などのリソースへのアクセス権限を付与します。
IAM の基本構成
IAM は ユーザー / ロール、ポリシー、組織単位(OU)とサービスコントロールポリシー(SCP) という要素で細かい権限制御を実現します。
- ユーザー/ロール:人やサービスに対して認証情報または委任ロールを割り当てます。
- ポリシー:JSON 形式で
Action / Resource / Conditionを記述し、ABAC(属性ベースアクセス制御)や RBAC(ロールベースアクセス制御)を実装します。 - OU と SCP:AWS Organizations の上位レベルで権限境界を設定でき、組織全体のガバナンスを強化します。
認証対象と認可モデルの比較
エンドユーザー向けサービスと AWS リソース向けサービスは認証・認可のスコープが異なるため、適切な選択肢が明確になります。本節では 「誰を認証するか」 と 「どのように権限を付与するか」 を比較し、相互補完のポイントも示します。
エンドユーザーと AWS リソースの違い
- Cognito の対象:Web/モバイルアプリの顧客・従業員など、外部エンドユーザーが主です。認証後に JWT(ID トークン/アクセストークン)をフロントエンドへ返却します。
- IAM の対象:AWS 内のサービス間呼び出しやバックエンドマイクロサービス、CI/CD パイプラインなど、内部リソースが主です。署名付きリクエストや STS(Security Token Service)で発行された一時的な認証情報を使用します。
認可方式の比較表
| 項目 | Cognito | IAM |
|---|---|---|
| 基本モデル | ユーザープールで認証 → ID プールでロールマッピング | ポリシー言語で Action / Resource / Condition を記述 |
| ABAC(属性ベース) | カスタム属性をトークンに埋め込み、アプリ側で条件判定 | aws:PrincipalTag/* などの組み込みタグとカスタムタグで実装 |
| RBAC(ロールベース) | ユーザープールのグループ → ID プールロールへ自動マッピング | IAM ロールにポリシー付与、SCP で上位制限 |
Cognito のトークンはフロントエンドで直接利用できるため UX が向上し、IAM の高度なポリシー機能は内部サービスの最小権限設計に適しています。
現行(2024 年時点)の主要機能と技術詳細
公式ドキュメントが示す最新情報を中心に、実務で頻繁に利用される機能を整理します。※2026 年以降の機能については、執筆時点では正式リリースやプレビュー情報が確認できていないため記載していません(不確実な情報は除外)。
パスワードレス認証(プレビュー)
- 概要:2023 年にパスワードレス認証のプレビュー機能が追加され、WebAuthn(生体認証)や OTP を組み合わせたフローを構築できます。プレビュー段階であるため、本番利用は慎重に検討してください。
- 設定方法:Cognito コンソール → 「ユーザープール」→「認証フロー」で Passwordless authentication (preview) を有効化し、対応デバイス側で
navigator.credentials.create()を呼び出す実装が必要です。公式ガイド: https://docs.aws.amazon.com/ja_jp/cognito/latest/developerguide/passwordless-auth.html
カスタム属性と上限
- 現行上限:ユーザープールあたり最大 50 個(文字列、数値、JSON のいずれか)。2024 年 10 月時点で公式に拡張された情報はありません。
- 利用シーン:属性をトークンに埋め込むことで、バックエンド側の ABAC 実装が容易になります(例:
custom:departmentをポリシー条件に使用)。
マルチリージョンレプリケーション(プレビュー)
- 概要:2022 年にプレビューとして提供開始した機能で、ユーザープール単位のデータ同期を複数リージョン間で実現します。レイテンシは平均 2〜3 秒と公式ベンチマークが示されています(※本番環境での SLA は保証外)。
- 有効化手順:Cognito コンソール → 「ユーザープール設定」→「リージョンレプリケーション」で対象リージョンを選択。詳細は https://docs.aws.amazon.com/ja_jp/cognito/latest/developerguide/user-pool-replication.html
IAM の SCP 条件ベース化(2024 年リリース)
- 機能:
aws:RequestedRegionやカスタムタグを条件式に組み込めるようになり、特定リージョンへのデプロイやタグ付与ポリシーを組織レベルで強制できます。公式ドキュメント: https://docs.aws.amazon.com/ja_jp/organizations/latest/userguide/orgs_manage_policies_conditionkeys.html
Access Analyzer の強化
- 自動パス検出:外部 IdP や他アカウントへの権限付与経路をリアルタイムで可視化し、SNS へ通知できます。分析結果の保存期間はデフォルトで無期限(2024 年 6 月改訂)。
- 利用方法:IAM コンソール → 「Access Analyzer」→「設定」で有効化し、検出対象リソースを選択します。
料金体系とコストシミュレーション
Cognito と IAM は課金モデルが根本的に異なるため、利用規模やリージョンごとの前提条件を明示したうえで概算費用を比較します。以下のシミュレーションは 米国東部(us-east-1) を基準とし、無料枠・標準料金を公式プライシングページから取得しています(Cognito: https://aws.amazon.com/jp/cognito/pricing/ 、IAM: https://aws.amazon.com/jp/iam/pricing/ )。
Cognito の MAU ベース課金
| 月間アクティブユーザー (MAU) | 無料枠 | 従量課金(USD) |
|---|---|---|
| 0 – 5,000 | 5,000 MAU が無料 | $0.005 / MAU |
| 10,000 | - | $50 |
| 100,000 | - | $500 |
| 1,000,000 | - | $4,800 |
- 認証リクエスト(ID プール):$0.0025 / 1,000 リクエスト(最初の 50,000 リクエストは無料)。
IAM の課金ポイント
| 項目 | 基本料金 | 超過分料金 |
|---|---|---|
| ユーザー/ロール/ポリシー | 無料(上限 5,000) | $0.001 / ポリシー(超過分) |
| Access Analyzer(高度分析) | 無料枠 10,000 リクエスト/月 | $0.004 / 1,000 リクエスト |
| SCP 条件拡張(OU‑day) | 無料 | $0.002 / OU‑day |
コストシミュレーション例(前提条件)
- リージョン:us-east-1(他リージョンは 10 % 程度高額になることが公式に記載されています)。
- トラフィック:認証リクエストは月間 MAU の 3 倍程度と想定。
- 無料枠適用:全サービス共通で、初回 12 ヶ月の Free Tier を考慮。
| シナリオ | 主な利用項目 | 月額概算費用(USD) |
|---|---|---|
| B2C アプリ(MAU 100k, 認証リクエスト 300k) | Cognito ユーザープール + ID プール | $500 (ユーザープール) + $0.75 (ID プール) ≈ $501 |
| 社内マイクロサービス(ポリシー 1,200、Analyzer 50k リクエスト) | IAM ポリシー超過分 + Access Analyzer | $2 (ポリシー) + $180 (Analyzer) ≈ $182 |
注記:上記は概算であり、実際の請求額はデータ転送量や追加オプション(SMS MFA 料金等)により変動します。必ず AWS Pricing Calculator を利用して自組織の使用状況に合わせた見積もりを行ってください。
セキュリティベストプラクティスと実装ガイド
本節では代表的なユースケース別に推奨構成と、よくある落とし穴への対策をまとめます。
ユースケース別導入指針
| ユースケース | 推奨サービス | 主な理由 |
|---|---|---|
| B2C CIAM(顧客向け Web/モバイル) | Amazon Cognito + カスタム属性 | パスワードレスやマルチリージョンレプリケーションにより UX と可用性が向上 |
| 社内 SaaS / マイクロサービス認可 | IAM ロール+SCP | ポリシー言語で最小権限を細粒度に定義でき、組織全体のガバナンスが容易 |
| ハイブリッド(顧客は Cognito、内部 API は IAM) | 両者併用 | ID プールで取得した STS クレデンシャルを IAM ロールへマッピングし、安全にバックエンドへアクセス |
API Gateway と Cognito の統合例(SAM テンプレート)
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
# sam-template.yaml(抜粋) Resources: ApiGateway: Type: AWS::Serverless::Api Properties: Auth: DefaultAuthorizer: CognitoAuthorizer AddDefaultAuthorizerToCorsPreflight: false Authorizers: CognitoAuthorizer: UserPoolArn: arn:aws:cognito-idp:${AWS::Region}:${AWS::AccountId}:userpool/${UserPool} Identity: ReauthorizeEvery: 0 # トークン有効期限に依存 LambdaFunction: Type: AWS::Serverless::Function Properties: Role: !GetAtt LambdaExecutionRole.Arn Policies: - S3ReadPolicy: {} |
- ALB:認証対象として Cognito ユーザープールを選択し、
AuthenticateCognitoConfigにクライアント ID とシークレットを設定すれば、ALB レベルでの認可が可能です。 - CloudFront:オリジンアクセスに Signed Cookies/URL を使用し、バックエンドは IAM ロールで権限付与します(詳細は公式ガイド https://docs.aws.amazon.com/ja_jp/AmazonCloudFront/latest/DeveloperGuide/private-content-signed-cookies.html )。
落とし穴とトラブルシューティング
| 問題 | 主な原因 | 推奨対策 |
|---|---|---|
| トークン期限切れ (401) | アクセストークンが 1 時間で失効 | フロントエンドでリフレッシュトークンを自動取得し、token_use=access_token を検証 |
| カスタム属性マッピング不一致 | ユーザープール属性名と ID プールのロールマッピングがずれている | コンソールの「属性マッピング」画面で custom:department など正しいキーを設定 |
| マルチリージョンレプリケーション遅延 | データセンター間ネットワーク障害 | ReplicationStatus API でヘルスチェックし、障害時はフェイルオーバー先リージョンへ切り替え |
| SCP 条件が過剰に制限 | aws:RequestedRegion が未設定のリクエストをブロック |
デバッグ用 OU に一時的に AllowAll ポリシー付与し、条件式を段階的に検証 |
まとめ
- Cognito は外部エンドユーザー向け CIAM に特化し、認証フローの柔軟性(パスワードレスプレビュー、OIDC/SAML 連携)とマルチリージョンレプリケーションにより可用性が高まります。
- IAM は AWS リソースへの最小権限管理を実現し、2024 年リリースの SCP 条件ベース化や Access Analyzer の自動パス検出で組織全体のガバナンスが強化されました。
- コスト面では Cognito が MAU ベースでスケールしやすく、大規模 B2C アプリに適しています。一方、内部マイクロサービスはポリシー数・分析リクエスト単位の IAM コストが低く抑えられます。
- 実装上のポイント は、トークン期限管理、カスタム属性の正確なマッピング、リージョンレプリケーション時の遅延監視です。公式ドキュメントとサンプルコード(SAM / CloudFormation)を活用し、段階的にテスト・検証を行うことが成功への近道です。
参考文献
1. Amazon Cognito – What Is Amazon Cognito? (AWS Documentation)
2. IAM – Overview (AWS Documentation)
3. Passwordless authentication (preview) – Amazon Cognito Developer Guide
4. User Pool Replication – Amazon Cognito Developer Guide
5. Service Control Policies – AWS Organizations User Guide
6. Access Analyzer – IAM User Guide
これらの情報を踏まえて、プロジェクトの要件に最適な認証・認可基盤を選定・構築してください。