
【VPC外リージョンサービス】
Cognito は、アプリケーションやサービスに安全な認証・認可基盤を提供する認証基盤サービスです。
ユーザー情報を管理する User Pool (ユーザプール)では、ユーザーのサインアップ / サインイン、MFA(Multi-Factor Authentication)による多要素認証、Password Policy に基づくパスワード強度管理、異常なログイン試行を検知する Advanced Security 機能を利用できます。さらに、ユーザーの端末情報を保持して認証リスクを低減する Device Tracking、アカウント復旧を容易にする Account Recovery 機能も備えています。
Cognitoは、IdP(Identity Provider) との Federation(フェデレーション認証) に対応しており、Google や Apple などのソーシャルログイン、または SAML 2.0 による企業認証基盤との連携が可能です。この仕組みを通じて、外部認証を扱うFederated Identityを構成できます。ログイン画面には、AWSが提供する Hosted UI を利用でき、OAuth 2.0 および OIDC (OpenID Connect) に基づく標準プロトコルで認証フローを実装します。認証後には、Access Token、ID Token、Refresh Token の3種類の Token が発行され、ユーザーセッションを安全に管理します。
Identity Pool(アイデンティティプール) を使用することで、認証済みまたは匿名ユーザーに対して一意の Cognito Identity(識別ID) を発行し、AWSリソースへアクセスするための一時的なSTS(Security Token Service)一時クレデンシャル(認証情報)を払い出すことができます。この際、ユーザー属性やIdPごとに異なる権限を割り当てるための IAM Role Mapping を設定でき、柔軟なアクセス制御を実現します。
認証やサインアップの各ステップでは Cognito Trigger を利用して AWS Lambda 関数を呼び出し、カスタムロジックや追加検証処理を組み込むことが可能です。これにより、企業独自のセキュリティ要件や認証フローを容易に拡張できます。
重要用語
ユースケース
| Web・モバイルアプリのユーザー認証 | ユーザープールを利用して、ユーザー登録・ログイン・パスワードリセットなどの認証機能を簡単に実装する。 |
| SNS/企業IdPとのシングルサインオン | GoogleやFacebook、社内のAzure AD / SAML IdPと連携し、既存のアカウントでクラウドアプリにシングルサインオンさせる。 |
| 認証済みユーザーへの一時的なAWS権限付与 | IDプール(Identity Pool)を使って、ログインしたユーザーに対してS3読み書きなど限定されたAWSリソース権限を一時的に付与する。 |
ベストプラクティス
| ホスト型UIとセキュアリダイレクト | 認証フローはホスト型UIとHTTPSリダイレクトで安全に行う。 |
| MFAとパスワードポリシー | 多要素認証と適切なパスワード要件を設定する。 |
| 属性マッピングとグループ管理 | IDトークンに必要な属性のみを含め、権限はグループで管理する。 |
高可用性・バックアップ・リトライ
| 高可用性・バックアップ・リトライ設計のポイント |
|---|
| 【デフォルト】AWS内部で冗長化 ・ユーザープールデータ ・ユーザープロファイルデータ ・認証サービスエンドポイント ・バックエンドデータベース(DynamoDB等) ・アイデンティティプール |
セキュリティ
| 関連サービス | 設定内容 |
|---|---|
| Secrets Manager(機密情報の安全管理) | シークレット(秘密情報)の作成が推奨 外部認証プロバイダのシークレットや署名キー |
| SSM Parameter Store(設定情報の一元管理) | パラメータ(Parameter)の作成が推奨 クライアント設定値や認証時の環境依存設定 |
| CloudTrail(操作履歴の記録・監査・追跡) | 【自動記録】 作成・更新・削除・設定変更は自動記録される。(コントロールプレーンAPI) データ操作は追跡できない(データプレーンAPI) |
| Config(リソースの構成状態・設定変更を記録) | 【Configが有効な場合】 ユーザープール設定変更履歴・MFA/パスワードポリシー等の準拠評価(対象に限る) |
| GuardDuty(脅威を自動検出) | 【GuardDutyが有効な場合】 ユーザープール設定変更などのAPI異常検知 |
ログ・監視
| ログ出力先 | ログの種類 |
|---|---|
| CloudWatch Logs | セキュリティ機能のログ Lambda関数の実行ログ |
標準メトリクス
| メトリクス名 | 説明 |
|---|---|
| SignInSuccesses | サインイン成功数 |
| TokenRefreshSuccesses | トークン更新成功数 |
| SignInThrottles | サインインスロットル数 |
| AccountTakeOverRisk | アカウント乗っ取りリスク検出数 |
| CompromisedCredentialsRisk | 侵害認証情報リスク検出数 |
| NoRisk | リスクなし認証数 |
| OverrideBlock | ブロックオーバーライド数 |
| Risk | リスク検出数 |
制限値(固定値/ハードリミット/ソフトリミット)
| 固定値 | 制限値 |
|---|---|
| ユーザー数/ユーザープール | 40,000,000 |
| ハードリミット | 制限値 |
|---|---|
| カスタム属性数/ユーザープール | 50 |
| IDトークンの有効期限 | 最短5分 - 最長24時間 |
| アクセストークンの有効期限 | 最短5分 - 最長24時間 |
| リフレッシュトークンの有効期限 | 最短1時間 - 最長10年 |
| ソフトリミット | 制限値 |
|---|---|
| ユーザープール数/アカウント | 1,000 |
| アプリクライアント数/ユーザープール | 1,000 |
| IDプール数/アカウント | 1,000 |
| IDプロバイダー数/ユーザープール | 300 |
| リソースサーバー数/ユーザープール | 25 |
| UserAuthentication API(InitiateAuth等) | 120 RPS(デフォルト) |
| UserCreation API(SignUp等) | 50 RPS(デフォルト) |
AWS CLIのサンプルコード
CloudFormationのサンプルコード
Terraformのサンプルコード
料金計算
| 課金項目 | 説明 |
|---|---|
| 月間アクティブユーザー | 認証を行ったユニークユーザー数 |
| SAMLまたはOIDC | フェデレーテッドユーザーの月間アクティブ数 |
| 高度なセキュリティ | 高度なセキュリティ機能の使用 |