Amazon Cognito Identity Pool とは?
Amazon Cognito Identity Pool とは?
Amazon Cognito Identity Pool(認証プール)は、AWS のサービスの1つで、アプリケーションのユーザーに対して一意の認証情報を提供することで、他の AWS サービスへのアクセスを簡単にセキュアに行うことができます。この記事では、Amazon Cognito Identity Pool の概要とその利点、設定方法について解説します。
Cognito Identity Pool の利点
フェデレーション認証: Cognito Identity Pool では、Facebook、Google、Amazon などのサードパーティの ID プロバイダーを使用してユーザーを認証することができます。また、Amazon Cognito で独自のユーザープールを作成し、認証情報を Identity Pool にリンクすることも可能です。
一時的な AWS 資格情報: 認証されたユーザーに対して、一時的な AWS セキュリティ資格情報を発行します。これにより、ユーザーは他の AWS サービスへのアクセスを簡単にセキュアに行うことができます。
柔軟なアクセス制御: Identity Pool では、AWS Identity and Access Management (IAM) ロールを使用して、認証されたユーザーの AWS リソースへのアクセス権限を制御できます。これにより、アプリケーションのセキュリティが向上します。
Amazon Cognito Identity Pool の設定方法
Amazon Cognito コンソールにアクセス: まず、Amazon Cognito コンソールにアクセスし、リージョンを選択します。
Identity Pool の作成: 「Manage Identity Pools」をクリックし、「Create new identity pool」を選択します。
Identity Pool の名前を入力: Identity Pool の名前を入力し、認証プロバイダーを選択します。サードパーティの ID プロバイダーや Cognito User Pool を選択できます。
認証プロバイダーを設定: 選択した認証プロバイダーに応じて、必要な情報を入力します。例えば、Facebook の場合、App ID を入力する必要があります。
IAM ロールの設定: 「Create Pool」をクリックすると、デフォルトの認証済みおよび未認証ユーザー用の IAM ロールが作成されますます。また、カスタム IAM ロールを使用することも可能です。これらのロールは、ユーザーの AWS リソースへのアクセス許可を制御します。
Identity Pool の作成: 必要な設定が完了したら、「Create Pool」をクリックして Identity Pool を作成します。作成が完了すると、Identity Pool ID が表示されます。この ID は、アプリケーションで Cognito Identity Pool を利用する際に必要となります。
SDK の設定: アプリケーションで Cognito Identity Pool を使用するには、AWS SDK を設定する必要があります。Amazon Cognito コンソールから、対応するプラットフォーム(Android、iOS、JavaScript など)用の SDK の設定情報を取得できます。これにより、アプリケーションに組み込むことができます。
アプリケーションでの使用: アプリケーションで Amazon Cognito Identity Pool を使用するためには、SDK を利用して CognitoIdentityCredentials クラスをインスタンス化し、Identity Pool ID を指定します。これにより、認証されたユーザーに一時的な AWS 資格情報が提供され、他の AWS サービスへのアクセスが可能になります。
まとめ
Amazon Cognito Identity Pool は、アプリケーションのユーザー認証を簡単かつセキュアに行うことができる AWS のサービスです。フェデレーション認証により、さまざまな ID プロバイダーを使用してユーザーを認証できます。また、一時的な AWS 資格情報を提供することで、他の AWS サービスへのアクセスが容易になります。Identity Pool の設定は簡単で、アプリケーションで SDK を利用することで、すぐに使用を開始できます。
詳しく説明
Amazon Cognito Identity Poolは、AWSリソースへのアクセス権を提供するために、ユーザーに対して一時的なAWS認証情報を発行するサービスです。Identity Poolは、ユーザーを一意に識別するID (Cognito Identity ID) を提供します。このIDは、ユーザーがAWSリソースにアクセスする際の認証情報として使用されます。
Cognito Identity Poolでは、以下の認証方法をサポートしています。
Cognito User Pools: Cognito User Poolsは、ユーザー名、メールアドレス、または電話番号を使用してサインインすることができるユーザーディレクトリです。ユーザー属性、パスワードポリシー、MFA設定などのセキュリティ設定が含まれています。
Federated Identity Providers: これらは、Facebook、Google、Amazon、Appleなどのソーシャルアイデンティティプロバイダーや、SAMLやOpenID Connectを介して企業ディレクトリなどの外部認証システムを使用して認証を行うプロバイダーです。
Cognito Identity Poolの設定手順:
AWSマネジメントコンソールにログインし、Cognitoサービスにアクセスします。
「Identity Poolの管理」を選択し、新しいIdentity Poolを作成します。
Identity Poolの名前を入力し、認証プロバイダーを選択します。これには、Cognito User PoolsやFederated Identity Providersなどが含まれます。
必要に応じて、未認証アクセスを許可するかどうかを選択します。これにより、サインインしていないユーザーが一定のAWSリソースにアクセスできるようになります。
「Poolの作成」をクリックしてIdentity Poolを作成します。
作成後、AWS Identity and Access Management (IAM) で適切なロールが作成され、リソースへのアクセス権が割り当てられます。このロールには、Identity Poolの認証済みおよび未認証ユーザー向けのポリシーが含まれます。
Cognito Identity Poolを使用することで、アプリケーションユーザーは、異なる認証プロバイダーからのアイデンティティ情報を使用してAWSリソースにアクセスするための一時的な認証情報を取得できます。これにより、アプリケーションは、ユーザーの認証情報に基づいてAWSリソースにセキュアにアクセスできます。
Cognito ユーザープールのサインインオプション
Cognito ユーザープールのサインインオプション情報は、アプリにログインするときにどの情報を使うかを選ぶ設定です。選択できるオプションはユーザー名、メールアドレス、電話番号です。
例えば、ユーザー名だけを選んだ場合、アプリにログインするときにユーザー名を使ってサインインします。ユーザー名とメールアドレスの両方を選んだ場合、アプリにログインするときにユーザー名かメールアドレスのどちらかを使ってサインインできます。
ただし、電話番号とメールアドレスだけを選んだ場合、アプリに登録するときにどちらか一方を使うか選ばなければなりません。
ユーザー名の要件については、アプリのユーザーが好きなユーザー名を使って登録できるかどうかと、ユーザー名の大文字と小文字を区別するかどうかを設定できます。これにより、アプリのユーザーが使いやすいユーザー名を選べるようになります。
パスワードポリシー情報
パスワードポリシー情報は、アプリでユーザーが設定するパスワードがどのようなものであるべきかを決めるルールです。
パスワードが長くて複雑なほど、他の人に簡単に当てられず、アカウントが安全に保たれます。
パスワードポリシーモード情報には、
「Cognito のデフォルト」と「カスタム」の2つの選択肢があります。
Cognito のデフォルト: これを選ぶと、Cognito が用意している決まったパスワードルールが使われます。
カスタム: これを選ぶと、自分でパスワードのルールを作ることができます。
パスワードの最小文字数は、パスワードに何文字以上必要かを決めます。例えば、8文字と設定すると、パスワードは最低でも8文字以上必要になります。
パスワード要件は、パスワードに含まれるべき文字の種類を決めます。例えば、以下のような要件があります。
少なくとも1つの数字を含む
少なくとも1つの特殊文字(例: !, @, # など)を含む
少なくとも1つの大文字(例: A, B, C など)を含む
少なくとも1つの小文字(例: a, b, c など)を含む
管理者によって設定された仮パスワードの有効期限は、管理者がユーザーに与える仮のパスワードが使える期間を決めます。例えば、7日と設定すると、仮パスワードは7日間だけ有効で、その後は新しいパスワードに変更する必要があります。
ポリシーとは
ポリシーとは、基本的にはルールや指針のことです。組織やシステムで守るべき取り決めや規則をまとめたものをポリシーと呼びます。ポリシーは、行動や判断の基準となり、目的や目標に沿った形で物事が進むようにするために設定されます。
例えば、学校には校則(ポリシー)があり、生徒がどのような服装や髪型であるべきか、どのような行動が許されるかなどのルールが定められています。会社でも、従業員がどのような行動を取るべきか、どのような業務手順を守るべきかを示すポリシーが存在します。
ITの世界でも、ポリシーは重要です。例えば、パスワードポリシーは、アカウントの安全性を高めるために、どのようなパスワードが許可されるかを定めたルールです。他にも、データアクセスポリシーやセキュリティポリシーなど、様々なポリシーが存在しています。これらのポリシーは、システムの安全性や効率性を維持するために設定されています。
サインアップエクスペリエンス設定
サインアップエクスペリエンス設定とは、新しいユーザーがアプリケーションに登録するときにどのような手順を踏むかを決める設定のことです。これには、ユーザーが自分の身元を確認する方法や、登録時に必須の情報とオプションの情報を選ぶことが含まれます。
セルフサービスのサインアップとは、新しいユーザーが自分でアカウントに登録できるかどうかを決める設定です。
自己登録機能を有効にすると、アプリケーションのサインインページに「サインアップ」リンクが表示され、新しいユーザーが自分でアカウントを作成できるようになります。この機能がオンになっていない場合は、他の方法(例えば、ソーシャルアカウントや管理者によるアカウント作成)でユーザープロファイルが作成されます。
属性検証とユーザーアカウントの確認とは、Cognitoでユーザーの情報(例:電話番号やメールアドレス)が正しいことを確認する手順のことです。これは、サインインやアカウントの復旧、多要素認証(MFA)に使用されます。ユーザーがサインインを許可される前に、属性が検証され、アカウントが確認されている必要があります。
Cognito アシスト型の検証および確認では、Cognitoが自動的にメッセージを送信して検証と確認を行います。これはおすすめの方法で、ユーザーが入力する必要があるコードが含まれるメッセージが送られます。新しいユーザーの場合、これによって属性が検証され、アカウントが確認されます。この機能がオンになっていない場合は、管理者が操作するAPIやLambdaトリガーによってユーザーの検証と確認が行われます。
属性変更の確認とは、ユーザーが自分の情報(例:メールアドレスや電話番号)を変更するときに、その新しい情報が正しいことを確認する手順のことです。
推奨される設定「未完了の更新があるときに元の属性値をアクティブに保つ」をオンにすると、ユーザーが新しいメールアドレスや電話番号を確認するまで、古い情報が使えるようになります。つまり、新しい情報を確認するまでメッセージが受信でき、古い情報でサインインできます。
この設定をオフにすると、ユーザーが新しい情報を確認するまで、その属性でサインインができなくなります。
「未完了の更新があるときのアクティブな属性値」では、どの情報を変更中でも使えるようにするか選べます。例えば、電話番号だけ、メールアドレスだけ、または両方を選択できます。これにより、ユーザーは新しい情報を確認するまで、古い情報でサインインができます。
メッセージ配信を設定
Amazon Cognitoは、Amazon SES(Simple Email Service)とAmazon SNS(Simple Notification Service)を使って、アプリケーションユーザーにEメールやSMSメッセージを送信します。ただし、メッセージを送ることで追加のSESやSNSの費用がかかることがあります。
Eメールについては、ユーザープールがどのようにユーザーにEメールを送るかを設定できます。おすすめは「Amazon SESでEメールを送信」です。これは、あなたのアカウントのAmazon SESで検証済みのアイデンティティを使ってEメールを送ります。大量のEメールを送る場合や実際のサービスで使う場合に向いています。
一方、「CognitoでEメールを送信」は、開発を始める際の一時的なオプションで、1日に最大50通のEメールを送ることができます。
Amazon SESを使う場合は、検証済みの送信者が設定されている必要があります。また、ユーザープールとSESが同じリージョンに設定されていると、パフォーマンスが向上します。
送信元のEメールアドレスには、Amazon SESで検証済みのアドレスを選びます。さらに、「設定セット」や「送信者の名前」、「返信先Eメールアドレス」など、オプションも設定できます。ただし、返信先アドレスが無効だと、送信制限が適用されることがあります。
SMS設定
SMSは、ユーザープールがショートメッセージサービス(SMS)を使って、ユーザーにメッセージを送る方法を設定します。ただし、受信者にはメッセージとデータの料金がかかることがあります。
CognitoがAmazon SNSでSMSメッセージを送るために、IAMロール(Identity and Access Management)を選択する必要があります。IAMロールは、Cognitoが特定の権限を持ってSMSを送ることができるようにするものです。
新しいIAMロールを作成する場合、CognitoはSMSメッセージを送るために必要な権限を持つロールを作成します。既存のIAMロールを使用する場合、そのロールはCognitoと信頼関係を持ち、sns:Publish(SMSの送信)権限が必要です。
IAMロール名を入力し、SNSリージョンを選択します。例えば、アジアパシフィック(東京)が選択できます。
SMSメッセージのセットアップを完了するには、いくつかの追加手順を行う必要があります。これらの手順には、Amazon SNSの使用量上限を引き上げるリクエスト、Amazon SNSの本番環境への移行、そしてAmazon Pinpoint発信元アイデンティティの設定が含まれます。これらの手順を今すぐ行わなくても、後でリマインダーが表示されるので大丈夫です
Cognito の組み込みの認証および承認フローを使用して、ユーザープールのためにアプリケーション統合を設定
「アプリケーションを統合」は、アプリとCognito(ユーザー管理サービス)をつなげる設定です。
「ユーザープール名」は、アプリで使うユーザー情報のためのグループの名前です。128文字以下で、英数字や特殊文字も使えます。
「ホストされた認証ページ」は、ログインや登録画面をCognitoが用意するか、自分で作るかを選ぶ設定です。Cognitoが用意した画面を使う場合は、「CognitoのホストされたUIを使用」を選びます。そうでなければ、自分で作った画面を使うことになります。
もう少し詳しく
「アプリケーションを統合」は、Cognitoの組み込み認証および承認フローを使用して、ユーザープールにアプリケーションを統合する設定を行う機能です。
まず、「ユーザープール名」を設定します。これは、わかりやすい名前で128文字以下である必要があります。英数字、スペース、および特殊文字(+ = , . @ - など)が使用できます。ユーザープールが作成されると、この名前は変更できません。
次に、「ホストされた認証ページ」を設定します。これは、ユーザーがサインアップやサインインを行うために、Cognitoが提供するホストされたUI(ユーザーインターフェース)とOAuth 2.0サーバーを利用するかどうかを選択する機能です。
「CognitoのホストされたUIを使用」を選択すると、Cognitoがサインアップ、サインイン、およびOAuth 2.0サービスエンドポイントを提供します。この機能が有効になっていない場合、Cognito API操作を使ってサインアップとサインインを実行する必要があります。
ドメイン
「ドメイン情報」は、ユーザーがログインや登録するページのインターネット上の場所を設定する部分です。
「ドメインタイプ」で、Cognitoが用意したドメインを使うか、自分で持っているドメインを使うかを選びます。
「Cognito ドメインを使用する」を選ぶと、Amazonが持っているドメインの中から選べます。でも、本番環境(実際に使うアプリ)では、自分のドメインを使うことがおすすめです。
「カスタムドメインを使用」を選ぶと、自分で持っているドメインを使うことができます。これを使うには、インターネットの設定(DNSレコード)と、安全な接続を保証する証明書(ACM証明書)が必要です。本番環境では、カスタムドメインを使うことがおすすめです。
「Cognito ドメイン」では、ドメインの一部を自分で決めることができます。ただし、小文字の英数字とハイフンだけを使えます。また、「aws」、「amazon」、「cognito」という単語は使えません。これは他の人と被らないように一意である必要があります。
最初のアプリケーションクライアント
アプリケーションクライアントを設定します。
「最初のアプリケーションクライアント」は、ユーザープールと連携するアプリケーションの設定を行います。アプリケーションクライアントは、APIを使ってログインや登録などを行うための許可を持ちます。
「アプリケーションタイプ情報」では、アプリケーションの種類を選びます。パブリッククライアント(ネイティブアプリやブラウザアプリ)、秘密クライアント(サーバーサイドアプリ)、その他(カスタム設定)の中から選べます。
「アプリケーションクライアント名情報」では、アプリケーションクライアントの名前を決めます。名前は128文字以内で、特定の特殊文字も使えます。
「クライアントのシークレット情報」では、アプリケーションクライアントにシークレット(秘密の鍵)を持たせるかどうかを選びます。シークレットは、APIリクエストを認証するために使われ、第三者になりすまされるのを防ぎます。
「許可されているコールバックURL情報」では、認証後にユーザーをリダイレクトするURLを設定します。これは、アプリケーションがCognitoから認証コードを受け取るためのURLです。HTTPSやカスタムURLスキームが使えます。
「高度なアプリケーションクライアントの設定」では、認証フロー、OAuth 2.0許可タイプ、OIDCスコープなどを設定できます。
「属性の読み取りおよび書き込み許可情報」では、アプリケーションが読み書きできる標準属性とカスタム属性を選択します。必須の属性は書き込み可能としてロックされます。
Cognito Identity Poolをアプリケーションに統合
Cognito Identity Poolをアプリケーションに統合するには、以下の手順を実行します。
AWS SDKをアプリケーションにインストールし、Amazon Cognitoサービスを利用できるようにします。JavaScript、iOS、Androidなど、使用しているプラットフォームに応じたSDKを選択してください。
アプリケーションにCognito Identity Poolの設定情報を追加します。これには、作成したIdentity PoolのIDが含まれます。
ユーザーがアプリケーションにサインインすると、認証プロバイダーからアイデンティティトークンが発行されます。このトークンは、Cognito Identity Poolに送信され、ユーザーに一意のCognito Identity IDが割り当てられます。
Cognito Identity IDを使用して、AWS Security Token Service (STS) から一時的な認証情報を取得します。これにより、ユーザーはAWSリソースにアクセスできるようになります。
アプリケーションで取得した一時的な認証情報を使用して、AWSリソースへのアクセスを実行します。例えば、Amazon S3にファイルをアップロードしたり、Amazon DynamoDBテーブルからデータを取得したりできます。
Cognito Identity Poolは、アプリケーションユーザーに対して一時的なAWS認証情報を提供することで、セキュアかつ効率的な方法でAWSリソースへのアクセスを管理できます。ユーザーは、Cognito User Poolsやフェデレーテッドアイデンティティプロバイダーなど、複数の認証プロバイダーを使用してサインインできます。これにより、アプリケーションは異なる認証システムを容易に統合できる柔軟性を提供します。