0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Cognito 学んだことメモリアル📝

Posted at

はじめに

ウェブやモバイルアプリケーションに認証、認可、ユーザー管理の機能を追加できるAWSサービスであるCognito!

スケーラブルで安全なユーザーディレクトリを提供し、開発者は認証機能を自前で実装する手間を省くことができる。

目次

  1. AWS Cognitoの概要
  2. ユーザープール (User Pools) の詳細
  3. IDプール (Identity Pools) の詳細
  4. Cognitoの具体的な利用シーン
  5. Cognitoのセキュリティ
  6. Cognitoの料金
  7. まとめ
  8. 参考文献

🧷 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プロバイダーとの連携が可能

ユーザープールの認証フローの例

  1. ユーザーがアプリケーションでサインイン
  2. アプリケーションはユーザーの認証情報をユーザープールに送信
  3. ユーザープールは認証情報を検証
    認証に成功した場合、ユーザープールはアプリケーションにJSON Web Token (JWT) を返します。
  4. アプリケーションはこのJWTを使用して、ユーザーを認証済みとして扱う。

🧷 IDプール (Identity Pools) の詳細

IDプールは、AWSリソースへのアクセス許可を管理するための仕組みです。

IDプールの機能

認証プロバイダー

ユーザープール、ソーシャルIDプロバイダー (Facebook, Google, Amazon)、匿名ユーザーなど、さまざまな認証プロバイダーからの認証情報をサポート

IAMロール

IDプールは、認証されたユーザーに一時的なAWS認証情報を提供するために、AWS Identity and Access Management (IAM) ロールを利用

アクセスコントロール

IAMロールに付与されたポリシーに基づいて、ユーザーがアクセスできるAWSリソースと実行できるアクションを制御

IDプールの認証フローの例 (ユーザープール連携時)

  1. ユーザーがユーザープールで正常に認証されると、JWTを取得
  2. アプリケーションはこのJWTをIDプールに送信
  3. IDプールはJWTを検証し、認証されたユーザーに対応するIAMロールを選択
  4. 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つの主要な機能を理解することで、さまざまな認証・認可の要件に対応できます。

💫 参考文献

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?