Cognito

【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 関数を呼び出し、カスタムロジックや追加検証処理を組み込むことが可能です。これにより、企業独自のセキュリティ要件や認証フローを容易に拡張できます。

重要用語

Account Recovery
IdP
Federation
Identity Pool
Cognito Identity
IAM Role Mapping
関連サービス

ユースケース

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関数の実行ログ
CloudWatch Logs優先の原則
標準メトリクス
メトリクス名説明
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フェデレーテッドユーザーの月間アクティブ数
高度なセキュリティ高度なセキュリティ機能の使用
料金計算ツール

公式ページ

AWSドキュメント Cognito