Amazon Cognito よくある質問

全般

Amazon Cognito では、ユーザーのサインアップ、サインイン、アクセスコントロール、仲介された AWS サービスアクセスをウェブアプリケーションやモバイルアプリケーションに数分で追加できます。デベロッパー中心の費用対効果の高いサービスであり、数百万人のユーザーにまでスケールできる安全なテナントベースの ID ストアとフェデレーションオプションを提供します。Amazon Cognito は、ブランド化された顧客体験の創出、セキュリティの向上、顧客のニーズへの適応に役立ちます。例えば、ソーシャル ID プロバイダーによるログインや、WebAuthn パスキーや SMS、E メールのワンタイムパスワードを使用したパスワードなしのログインがサポートされています。Amazon Cognito は、さまざまなコンプライアンス標準をサポートし、オープンアイデンティティ標準に基づいて動作し、開発リソースや SDK ライブラリの広範なカタログと統合されています。

Amazon Cognito を使用することで、ユーザーの管理や認証を扱うためのソリューションの構築、セキュリティ、およびスケーリングについて心配する必要がなくなり、優れたアプリケーション体験の実現に集中できます。

AWS コンソールにアクセスすると、簡単に使用を開始できます。アマゾン ウェブ サービスのアカウントを持っていない場合、コンソールにサインインするときにアカウントを作成できます。ユーザー管理用のユーザープールまたはフェデレーテッドアイデンティティ用のアイデンティティプールを作成すると、アプリケーションと API を OAuth と OpenID Connect (OIDC) と統合できます。

詳細については、開始方法リソースをご覧ください。

Amazon Cognito は、開発者がモバイルアプリケーションおよびウェブアプリケーションにユーザー管理を追加したり、機能を同期したりできるように、設計されています。開発者は Cognito ID を使用してアプリケーションにサインアップおよびサインイン機能を追加することができます。また、ユーザーがアプリケーションのリソースに安全にアクセスできるようにすることも可能です。さらに、Cognito を使用すると、複数のデバイス、プラットフォーム、アプリケーション間でデータを同期できます。

はい。Cognito ではサーバー側の API を公開しています。サーバー側の API を直接呼び出して、Cognito の独自のカスタムインターフェイスを作成できます。サーバー側の API については、開発者ガイドをご覧ください。

オプションの AWS Mobile SDK を使うと、iOS、Android、Unity、Kindle Fire での Cognito の使用がサポートされます。Cognito は、AWS SDK for .NET、C++、Go、Java、JavaScript、PHP v3、Python、Ruby v3、およびコマンドラインインターフェイスでも利用できます。

利用可能な SDK を表示およびダウンロードするには、リソースページにアクセスしてください。

いいえ。Cognito では、コントロール API とデータ API をウェブサービスとして公開しています。サーバー側の API を直接呼び出して独自のクライアントライブラリを実装することが可能です。

ウェブアプリケーションやモバイルアプリケーションにサインアップおよびサインイン機能を追加

第 1 要素認証システムでは、Amazon Cognito はユーザー名/パスワード、E メール OTP パスワードレス、SMS OTP パスワードレス、WebAuthn パスキーをサポートしています。Cognito は、E メール OTP、SMS OTP、および TOTP 認証システムの多要素認証 (MFA) をサポートしています。さらに、お客様とパートナーは、AWS Lambda 拡張機能を使用して、カスタム認証フローでサードパーティー製品やカスタムの認証システムのサポートを実装できます。

はい。Amazon Cognito を使用すると、サインアップ機能とサインイン機能をアプリケーションに簡単かつ安全に追加できます。ユーザーは、E メール、電話番号、またはユーザー名を使用してサインアップおよびサインインできます。また、E メールの検証、電話番号の検証、および多要素認証などの拡張セキュリティ機能を実装できます。Cognito を使用すると AWS Lambda による不正検出とユーザー検証のためのユーザー登録にアプリケーション固有のロジックを追加するなどして、ワークフローをカスタマイズすることができます。詳細については、こちらの資料を参照してください。

ユーザープールは、ウェブアプリケーションやモバイルアプリケーションに対して構成できるテナントベースのユーザーディレクトリです。ユーザープールではユーザーのプロファイル属性が安全に保存され、カスタムスキーマがサポートされています。AWS コンソール、AWS CLI、または AWS SDK を使用して、ユーザープールを作成および管理できます。

開発者は標準的な OpenID Connect ベースのユーザープロファイル属性 (ユーザー名、電話番号、住所、タイムゾーン等) を使用するか、またはアプリケーション固有のユーザー属性を追加してカスタマイズできます。

はい。エイリアシング機能を使用すると、E メールアドレスとパスワード、または電話番号とパスワードで、サインアップまたはサインインすることが可能です。

詳細については、こちらのドキュメントを参照してください。

 

はい。ユーザープールを設定または構成する時に、パスワードの長さ、文字の複雑さ、パスワード履歴の要件などのパスワードポリシーを設定できます。さらに、Amazon Cognito では、ユーザーが別のサイトで漏洩したパスワードでログインしていないことを確認するために、サインアップ、サインイン、およびパスワードの変更を行うたびに漏洩した認証情報をチェックできます。

はい。Amazon Cognito では、お客様のアプリケーションへのアクセスを付与する前にユーザーの E メールアドレスや電話番号の検証を義務付けることができます。サインアップ時に、認証コードがユーザーの電話番号または E メールアドレス宛に送信されます。サインアップを完了し、確認済みの状態にするためには、その認証コードを入力する必要があります。

はい。アプリケーションのエンドユーザーは SMS ベースの MFA でサインインできます。SMS ベースの MFA を有効にすると、ユーザーはパスワード (第 1 の要素、つまりユーザーが知っているもの) と SMS を介して携帯電話でのみ受信することができるセキュリティコード (第 2 の要素、つまりユーザーが持っているもの) の入力を求められます。

はい。AWS Lambda を使用してサインアップフローとサインインフローをカスタマイズできます。例えば、AWS Lambda 関数を作成して、不正を識別することや、ユーザーデータの検証を追加することができます。登録前、確認後 (登録)、認証前、認証中、認証後にカスタム Lambda 関数をトリガーできます。また、Lambda 関数を使用して、E メールまたは電話番号の確認、および多要素認証の一部として送信されるメッセージをカスタマイズできます。

はい。ユーザーがアプリケーションにアクセスするときに使用したデバイスを記憶するように選択でき、Cognito ユーザープールでそのデバイスをアプリケーションのユーザーに関連付けることができます。また、多要素認証をセットアップするとき、記憶しているデバイスを使用してユーザーの第 2 要素のチャレンジ (アダプティブ認証) を抑制することも選択できます。

アプリケーションの既存のユーザーディレクトリまたはデータベースからユーザープールにユーザーを移行するには、ジャストインタイム (JIT) 移行と一括移行の 2 つの方法があります。

Amazon Cognito では、組み込みの AWS Lambda トリガーを使用してアプリケーションにサインインする際に、ユーザーをジャストインタイムで移行することができます。Lambda トリガーを使用すると、パスワードを強制的にリセットしなくても、外部システムからユーザーのデータを移行できます。

また、すべてのアプリケーションユーザーのプロファイルデータが含まれている CSV ファイルをアップロードすることで、ユーザーを一括して移行することもできます。この CSV ファイルは、Amazon Cognito コンソール、API、または AWS CLI を使用してアップロードできます。ユーザーが初めてログインするときには、自分のアカウントを確認し、自分のメールアドレスまたは電話番号に送信された認証コードを使用して、新しいパスワードを作成する必要があります。

詳細については、ユーザープールにユーザーをインポートするを参照してください。

AWS リソースへのアクセスを有効化

はい、Cognito アイデンティティプールを使用すると、外部 ID プロバイダーを介してユーザーを認証したり、AWS 内のアプリケーションのバックエンドリソースまたは Amazon API Gateway で保護されているサービスにアクセスするための一時的なセキュリティ認証情報を付与することもできます。Amazon Cognito は SAML または OpenID Connect、ソーシャル ID プロバイダー (Facebook、Twitter、Amazon など) をサポートする外部 ID プロバイダーと併用し、独自の ID プロバイダーを統合することもできます。

Amazon、Facebook、Twitter、Apple のサインイン、Google ソーシャル ID プロバイダー、OpenID Connect (OIDC) ID プロバイダー、SAML ID プロバイダー、Amazon Cognito ユーザープール、およびカスタムデベロッパープロバイダーを使用できます。

アイデンティティプールを使用すると、ユーザーの一意の ID を作成し、AWS サービスプロバイダーと安全にフェデレーションできます。Amazon Cognito アイデンティティプールを認証情報ブローカー利用して、権限が制限された一時的な AWS 認証情報を取得して AWS リソースにアクセスできます。

ユーザーは Amazon Cognito ユーザープール、OIDC ID プロバイダー、SAML ID プロバイダー、またはソーシャル ID プロバイダーを介してログインし、Amazon S3 バケットや Amazon DynamoDB レコードなどの AWS サービスにロールベースでアクセスできます。ID プールでは、ユーザープロファイルは保存されません。ID プールは、1 つのアプリケーションに関連付けることも、複数のアプリケーションに関連付けることもできます。2 つのアプリケーションに対してそれぞれ異なるアイデンティティプールを使用している場合、同じエンドユーザーが各アイデンティティプールで異なる一意の識別子を持つことになります。

モバイルアプリケーションでは、ID プロバイダ (IdP) の SDK を使用して認証が行われます。エンドユーザーが IdP で認証されると、IdP から返される OpenID Connect のトークン、または SAML アサーションが、アプリケーションを通して Cognito アイデンティティプールに渡されます。その後、ユーザーの新しい Cognito ID と、権限の制限された一時的な AWS 認証情報一式が、Amazon Cognito から返されます。

Cognito アイデンティティプールは既存の認証システムと統合できます。簡単な API 呼び出しで、お客様がユーザーに割り当てた一意の識別子に基づくエンドユーザー向けの Cognito ID を取得できます。Cognito ID と OpenID Token を取得した後は、Cognito アイデンティティプールクライアントの SDK を使用して AWS リソースにアクセスし、ユーザーデータを同期することができます。

Cognito アイデンティティプールでは、AWS リソースにアクセスするための、権限の制限された一時的な認証情報一式が、ユーザーに割り当てられるため、AWS アカウントの認証情報を使用する必要がありません。各ユーザーの権限は、お客様が作成する AWS IAM ロールを通して制御されます。各ユーザーの IAM ロールを選択するルールを定義できます。または、Cognito ユーザープールにあるグループを使用している場合は、グループに基づいて IAM ロールを割り当てることができます。Cognito アイデンティティプールを使用すると、認証されていないゲストユーザーに権限が制限されている個別の IAM ロールを定義することもできます。また、特定のリソースへのアクセスを制御するユーザーに対して Cognito で生成する一意の識別子を使用できます。例えば、S3 バケットに対して、各ユーザーがバケット内の自分のフォルダーのみにアクセスできるようにするポリシーを作成できます。

いいえ。お客様のアプリケーションにより、サポートされているパブリック ID プロバイダー (Amazon、Facebook、Twitter、Apple のサインイン、Digits、Google、SAML、または Open ID Connect に準拠しているプロバイダー) と直接通信が行われ、ユーザーが認証されます。Cognito ID でユーザーの認証情報を取得または保存することはありません。Cognito Identity では、アイデンティティプロバイダから発行されたトークンを使用してユーザーの一意の識別子を取得した後、一方向のハッシュを使用してその識別子をハッシュします。このため、実際のユーザー識別子を保存しなくても、今後、同じユーザーを再度認識できます。

いいえ。Cognito ID が機密情報 (E メールアドレス、友達リストなど) を ID プロバイダから取得することはありません。

Cognito アイデンティティプールでは、承認済みのユーザーに加えて認証されていないユーザーの作成処理とトークン自動交付処理を行うことができます。これにより、アプリケーションで別のログイン画面が表示されて抵抗感を与えるということがなくなりますが、権限の制限された一時的な認証情報を使用できるため、AWS リソースにアクセスすることができます。

いいえ。Cognito ID では、Amazon、Facebook、Twitter、Digits、Google からのログインがサポートされており、認証されていないユーザーに対するサポートも提供されています。Cognito Identity を使用すると、バックエンドコードを記述することなく、フェデレーティッド認証、プロファイルデータ同期ストア、AWS アクセストークンのディストリビューションをサポートできます。

認証されていないユーザーは、どの ID プロバイダーでも認証を行っていないものの、ゲストとしてアプリケーションにアクセスするユーザーのことです。このようなユーザーには、バックエンドリソースにアクセスするための制限された権限を付与する個別の IAM ロールを定義することができます。

はい。Cognito アイデンティティプールでは、家族で 1 台の iPad を使用する場合など、1 つのデバイスでの個別のアイデンティティの使用をサポートしています。各アイデンティティは個別に扱われ、ユーザーがアプリケーションにログイン/ログアウトする方法や、ローカルやリモートでアプリケーションデータが保存される方法を、完全に制御できます。

Cognito アイデンティティプールに関連付けられたデータセットをプログラムで作成し、キー/値のペアの形式でデータの保存を開始できます。データはローカルのデバイスと Cognito 同期ストアの両方に保存されます。また、Cognito ではエンドユーザーのすべてのデバイス間でこのデータを同期することもできます。

Cognito ID コンソールに表示されたアイデンティティプールの数は、Cognito Identity API で作成されたアイデンティティプールの数を示します。認証されたアイデンティティ (Facebook や OpenID Connect プロバイダーといったログインプロバイダーを使ってログインするアイデンティティ) の場合、Cognito アイデンティティプールの GetId API が呼び出されるたびに作成される各ユーザーのアイデンティティは 1 つのみです。ただし、未認証のアイデンティティの場合は、アプリケーションのクライアントから GetId API が呼び出されるたびに、新しいアイデンティティが生成されます。したがって、1 人のユーザーの認証されていないアイデンティティに対してアプリケーションから GetId が複数回呼び出された場合、1 人のユーザーに複数のアイデンティティがあるように表示されます。このため、認証されていないアイデンティティを使用する場合は、GetId からの応答をキャッシュして、1 人のユーザーに対して GetId を複数回呼び出さないようにすることが重要です。

Cognito アイデンティティプールを自動的にキャッシュするロジックは Mobile SDK により提供されます。この処理について心配する必要はありません。固有ユーザーの追跡機能を含め、アプリケーションの完全な分析ソリューションをお探しのお客様は、Amazon Mobile Analytics をご確認ください。

料金

Amazon Cognito ユーザープールの料金については、Amazon Cognito の料金ページをご覧ください。

推定コストを計算するには、AWS 料金見積りツールを使用してください

 

Amazon Cognito ユーザープールの料金は、月間アクティブユーザー数 (MAU) に基づいてお支払いいただきます。ある暦月内に、アプリケーションが管理作成または更新、サインアップ、サインイン、サインアウト、トークンの更新、パスワードの変更、ユーザー アカウント属性の更新、ユーザーに対する属性クエリ (AdminGetUser API) など、あるユーザーのために ID オペレーションを生成した場合、そのユーザーは 1 MAU としてカウントされます。後続のセッションに関して、またはその暦月の非アクティブなユーザーに関しては課金されません。通常、ユーザーの総数と操作数は、MAU の総数を大幅に上回ります。

Amazon Cognito Sync の料金については、Amazon Cognito の料金表ページをご覧ください。

SMS メッセージングを使って電話番号を検証し、パスワードを忘れた人やリセットしたい人のために、または多要素認証のためにコードを送信するには、別途料金がかかります。詳細については、ワールドワイド SMS 料金ページを参照してください。

AWS Mobile SDK を使用して synchronize() メソッドを呼び出すと、同期オペレーションとしてカウントされます。サーバー API を直接呼び出している場合、同期セッションの新しいトークンが出力されたときに同期オペレーションが開始し、書き込みが成功するかセッションのトークンがタイムアウトになったときに同期オペレーションが完了します。SDK の synchronize() メソッドを使用しても、サーバーの API を直接呼び出しても、同期オペレーションには同じ料金が課金されます。

はい。Amazon Cognito ユーザープールの SKU と Essentials SKU は、最初の 10,000 MAU までは無料です。2024 年 11 月 21 日より前にアクティブな Amazon Cognito ユーザープールをお持ちのお客様アカウントは、50,000 MAU の無料利用枠の対象となります。

AWS 無料利用枠の一部として、対象となる AWS のお客様は、最初の 12 か月間、1 か月につき 10 GB のクラウド同期ストア容量と 100 万回の同期オペレーションをご利用いただけます。

ユーザーの認証とユニークアイデンティティーの付与に Amazon Cognito アイデンティティプールを使用しても、料金は発生しません

Cognito イベントを使用して Lambda 関数をトリガーするのに追加料金は発生しません。ただし、Lambda 関数の実行中は、AWS Lambda およびその他の AWS サービスの通常の使用料が発生します。

詳細については、AWS Lambda の料金ページをご覧ください。

 

いいえ。synchronize() メソッドを呼び出すタイミングを設定できます。デバイスからの毎回の読み書きはローカルの SQLite ストアに対して実行されます。これにより、コストを完全に制御できます。

Cognito は Amazon SNS を使用してサイレントプッシュ通知を送信します。Cognito でプッシュ同期を使用するための追加料金はかかりませんが、デバイスへの通知送信には通常の Amazon SNS 料金がかかります。