はじめに
ウェブやモバイルアプリケーションに認証、認可、ユーザー管理の機能を追加できるAWSサービスであるCognito!
スケーラブルで安全なユーザーディレクトリを提供し、開発者は認証機能を自前で実装する手間を省くことができる。
目次
- AWS Cognitoの概要
- ユーザープール (User Pools) の詳細
- IDプール (Identity Pools) の詳細
- Cognitoの具体的な利用シーン
- Cognitoのセキュリティ
- Cognitoの料金
- まとめ
- 参考文献
🧷 AWS Cognitoの概要
Cognitoがどのようなサービスで、何ができるのか...
- フルマネージド
CognitoはAWSによって完全に管理されているため、サーバーの構築やメンテナンスは不要 - スケーラブル
数百万のユーザーにも対応できる高いスケーラビリティを持つ - セキュア
最新のセキュリティ標準に準拠しており、安全な認証・認可機能を提供 - 柔軟性
さまざまな認証方法やユーザー管理の要件に対応できる柔軟性がある
Cognitoの主な機能
Cognitoは主に以下の2つの機能を提供します。
- ユーザープール (User Pools)
ユーザーの登録、サインイン、パスワードリセットなどの認証機能を提供します。
独自のユーザーディレクトリを作成・管理したり、SAMLやOAuth 2.0などの外部IDプロバイダーと連携したりできます。 - IDプール (Identity Pools)
AWSリソースへのアクセス許可(認可)を管理します。
ユーザープールで認証されたユーザーや、Facebook、Google、AmazonなどのソーシャルIDプロバイダーで認証されたユーザーに対して、AWSのサービス(S3、DynamoDBなど)へのアクセス権限を付与できます。
🧷 ユーザープール (User Pools) の詳細
ユーザープールは、アプリケーションのユーザーディレクトリとして機能します。
ユーザープールの機能
ユーザー登録とサインイン
メールアドレスや電話番号、ユーザー名などを利用した登録・サインイン機能を提供
パスワード管理
強力なパスワードポリシーの設定や、パスワードリセット機能などを提供
多要素認証 (MFA)
ワンタイムパスワード (TOTP) やSMSによる多要素認証を設定することで、セキュリティを向上させることができる。
カスタム認証
独自の認証フローを実装することも可能
属性
ユーザー名、メールアドレス、電話番号などの標準属性に加えて、カスタム属性を定義してユーザー情報を管理可能
グループ
ユーザーをグループに分けて管理し、グループごとに異なる権限を付与できる。
トリガー
ユーザープールのライフサイクルにおける特定のイベント(ユーザー登録時、サインイン時など)にカスタムコード(AWS Lambda関数)を実行できます。
これにより、ユーザーの検証、ウェルカムメールの送信、カスタム属性の更新など、さまざまな処理を自動化できます。
外部IDプロバイダー連携
- ソーシャルIDプロバイダー
Facebook、Google、Amazon、Appleなどのソーシャルアカウントでのサインインを可能にする。 - SAMLプロバイダー
既存のSAMLベースのIDプロバイダー(Active Directory Federation Services (AD FS) など)との連携が可能 - OIDCプロバイダー
OpenID Connect (OIDC) に準拠したIDプロバイダーとの連携が可能
ユーザープールの認証フローの例
- ユーザーがアプリケーションでサインイン
- アプリケーションはユーザーの認証情報をユーザープールに送信
- ユーザープールは認証情報を検証
認証に成功した場合、ユーザープールはアプリケーションにJSON Web Token (JWT) を返します。 - アプリケーションはこのJWTを使用して、ユーザーを認証済みとして扱う。
🧷 IDプール (Identity Pools) の詳細
IDプールは、AWSリソースへのアクセス許可を管理するための仕組みです。
IDプールの機能
認証プロバイダー
ユーザープール、ソーシャルIDプロバイダー (Facebook, Google, Amazon)、匿名ユーザーなど、さまざまな認証プロバイダーからの認証情報をサポート
IAMロール
IDプールは、認証されたユーザーに一時的なAWS認証情報を提供するために、AWS Identity and Access Management (IAM) ロールを利用
アクセスコントロール
IAMロールに付与されたポリシーに基づいて、ユーザーがアクセスできるAWSリソースと実行できるアクションを制御
IDプールの認証フローの例 (ユーザープール連携時)
- ユーザーがユーザープールで正常に認証されると、JWTを取得
- アプリケーションはこのJWTをIDプールに送信
- IDプールはJWTを検証し、認証されたユーザーに対応するIAMロールを選択
- IDプールは、そのIAMロールの一時的なAWS認証情報をアプリケーションに返す。
アプリケーションはこの一時的な認証情報を使用して、許可されたAWSリソースへアクセス
🧷 Cognitoの具体的な利用シーン
Cognitoは、以下のようなさまざまなシナリオで活用できます。
ウェブアプリケーションの認証
ユーザー登録、ログイン、パスワードリセットなどの基本的な認証機能を実装可能
モバイルアプリケーションの認証
スマートフォンアプリのユーザー認証を簡単に追加可能
シングルサインオン (SSO)
複数のアプリケーション間で一度のログインでアクセス可能
APIの保護
認証されたユーザーのみがAPIにアクセスできるように制御可能
IoTデバイスの認証
IoTデバイスからのセキュアな接続とデータアクセスを実現可能
B2Cアプリケーション
大規模なコンシューマー向けアプリケーションのユーザー管理に適している。
B2Bアプリケーション
企業間の連携におけるユーザー認証・認可を安全に行える。
🧷 Cognitoのセキュリティ
Cognitoは、アプリケーションとユーザーのセキュリティを確保するための多くの機能を提供しています。
暗号化
保存時および転送中のユーザーデータを暗号化します。
多要素認証 (MFA)
不正アクセスを防ぐための強力なセキュリティ対策
パスワードポリシー
強力なパスワード要件を強制可能
アカウント乗っ取り対策
ブルートフォース攻撃などのアカウント乗っ取りを検知し、緩和する機能
監査ログ
ユーザーアクティビティや管理操作のログを記録し、セキュリティ監査に役立てることができる。
GDPRおよびその他のプライバシー規制への準拠
ユーザーデータの取り扱いにおいて、さまざまなプライバシー規制に対応するための機能を提供
🧷 Cognitoの料金
Cognitoの料金は、主に以下の要素に基づいて課金されます。
ユーザープールの月間アクティブユーザー (MAU)
ユーザープールで月に一度以上サインインしたユーザー数に基づいて課金されます。無料枠も用意されています。
IDプールの認証
IDプールを使用してAWS認証情報を取得した回数に基づいて課金されます。こちらも無料枠があります。
高度なセキュリティ機能
リスクベースの適応型認証などの高度なセキュリティ機能を利用する場合は、追加料金が発生する場合があります。
詳細な料金体系については、AWSの公式ドキュメントをご確認ください。
🎉 まとめ
AWS Cognitoは、アプリケーションの認証、認可、ユーザー管理を効率的かつ安全に行うための強力なサービスです。ユーザープールとIDプールという2つの主要な機能を理解することで、さまざまな認証・認可の要件に対応できます。