Contents
Amazon Cognito ユーザープールの概要と目的
Amazon Cognito ユーザープールは、アプリケーションユーザーの認証・認可を管理するクラウドベースのサービスです。サインアップ、サインイン、多要素認証(MFA)などの機能を提供し、ユーザー情報の管理やセキュリティポリシーの設定が可能です。また、AWSの他のサービス(API Gateway、Lambdaなど)と連携することで、アプリケーション全体の認証フローを効率的に構築できます。
この記事では、「Amazon Cognito ユーザープール 設定 方法」を中心に、実務で即活用できる手順を具体的に解説します。AWS管理コンソールとCLIによる設定方法の両方を取り上げ、ユーザー登録フローのテストまで網羅します。
AWS管理コンソールでのユーザープール作成手順
AWS管理コンソールでユーザープールを作成するには、以下の3つのステップを実施します。設定ミスを避けるために、ドメイン名やメールテンプレートの選択に注意が必要です。
アカウント設定
- AWS管理コンソールから「Cognito」サービスを開きます。
- 左サイドバーから「ユーザープール」を選択し、「作成」をクリックします。
- ドメイン名(例:
example.auth.ap-northeast-1.amazoncognito.com)を入力し、リージョンの選択に注意してください。
重要ポイント: ドメイン名は一意である必要があります。既存のドメインと重複するとエラーになります。
基本属性の指定
- ユーザープールの「名前」を入力し、「作成」をクリックします。
- 次の画面で、メールまたは電話番号でのサインアップを許可するか設定します。
| 設定項目 | 説明 | 必須フラグ |
|---|---|---|
| ユーザー登録の制限 | 新規ユーザー作成を許可するかどうか | 〇 |
| メール送信テンプレート | 確認メールやパスワードリセット用のメッセージ設定 | △(初期値で使用可能) |
注意: 初期設定ではデフォルトテンプレートが使われますが、ビジネス用途ではカスタムメッセージに変更することを推奨します。
初期設定確認
作成後、以下をチェックします:
- ユーザープールの「概要」ページで、リージョンとドメイン名が正しく表示されているか
- 「アプリケーションクライアント」セクションから、クラウドクライアントまたはWebクライアントの作成を実施する
確認手順例:
- ユーザープールを選択し、「アプリケーションクライアント」タブを開く
- 「作成」ボタンから、アプリケーション向けに使用するクライアントを生成する
AWS CLIによるユーザープールの作成と検証
AWS CLIを使用してユーザープールを作成するには、create-user-poolコマンドを使います。この方法はスクリプト化や自動化に適していますが、パラメータの指定ミスに注意が必要です。
CLIコマンドの基本構文
|
1 2 3 4 5 |
aws cognito-idp create-user-pool \ --pool-name "SampleUserPool" \ --auto-verified-attributes email \ --email-verification-message "ご登録ありがとうございます" |
指摘事項:
--email-verification-messageはメールテンプレート設定と連携しており、単体で利用可能ではありません。メール送信テンプレートが有効化されていない場合、このパラメータは無視されます。
パラメータ指定の詳細
| パラメータ | 説明 | 必須か |
|---|---|---|
--pool-name |
ユーザープール名(例: SampleUserPool) | 〇 |
--auto-verified-attributes |
自動検証する属性(emailやphoneなど) | △ |
--email-verification-message |
確認メールの内容をカスタマイズ | × |
注意: CLIではJSONファイルでパラメータを指定することも可能です。複雑な設定が必要な場合は、
--cli-input-jsonオプションを活用しましょう。
作成後の確認手順
-
describe-user-poolコマンドで、作成されたユーザープールのIDとステータスを確認します:
bash
aws cognito-idp describe-user-pool --user-pool-id <USER_POOL_ID> -
ユーザー登録テスト:
admin-create-userコマンドで仮ユーザーを作成し、メール送信の動作を検証します。
ユーザー属性のカスタマイズ方法
ユーザープールでは、標準属性とカスタム属性の両方を管理できます。カスタム属性はcustom_プレフィックスで定義し、アプリケーション独自の情報を保存するのに適しています。
標準属性の編集
- ユーザープールの「ユーザー属性」タブから、標準属性(メール、名前など)を編集可能です。
- 一部の属性は必須に設定でき、ユーザーレコードの作成条件として活用できます。
カスタム属性の追加
- 「ユーザー属性」タブで「カスタム属性の追加」を選択します。
- 属性名(例:
custom_occupation)とタイプ(文字列、数値など)を入力します。
| カスタム属性 | 説明 | 使用例 |
|---|---|---|
| custom_birthdate | 生年月日 | ユーザー向けのパーソナライズに活用可能 |
| custom_company | 所属会社名 | 業務アプリケーション向けに情報を収集 |
ヒント: カスタム属性は、API GatewayやLambda経由で取得することが可能です。
属性マッピング設定
カスタム属性を他のAWSサービス(例: DynamoDB)と連携するには、「アトリビュートマッピング」の設定が必要です。
- マッピングテンプレートを作成し、カスタム属性がどのテーブルに保存されるか指定します。
以下はDynamoDBと連携する際のJSONテンプレート例:
|
1 2 3 4 5 6 7 8 |
{ "TableName": "UserAttributes", "Item": { "UserId": { "S": "<user_pool_id>" }, "CustomOccupation": { "S": "$custom_occupation" } } } |
指摘事項: 本例ではカスタム属性
custom_occupationがDynamoDBにマッピングされる仕組みを示しています。
セキュリティポリシーのベストプラクティス
ユーザープールのセキュリティを強化するには、以下の3つのポイントに注力することが重要です。
パスワードポリシーの強化
- AWS推奨:最小8文字、大文字・小文字・数字・特殊記号の使用を義務付けます。
- 例:
PasswordPolicy={MinimumLength=8,RequireLowercase=true,RequireNumbers=true}
| ポリシータイプ | 推奨設定 | 理由 |
|---|---|---|
| 最小文字数 | 8文字以上 | 多様なパスワードの導入を促進 |
| 特殊記号必須 | ✅有効 | セキュリティリスクの軽減 |
アカウントロックアウト設定
- 該当アカウントが不正アクセスを検出された場合、自動的にロックされます。
- ロック解除には、管理者による手動操作またはメール送信が必要です。
| 設定 | 値 |
|---|---|
| 不正ログイン回数 | 5回以下でロック(推奨) |
監査ログの有効化
- AWS CloudTrailと連携させることで、ユーザープール内での全操作履歴を監査可能です。
- イベントタイプは「Sign-in」「Password change」など多岐にわたります。
指摘事項: CognitoのイベントログをCloudTrailで利用するには、以下の手順が必要です:
- AWS Management Console > CloudTrail > トレールを作成
- イベントソースとして「Cognito Identity Provider」を選択
- トレールの有効化とS3バケット設定を完了
アクション: Cognitoの「イベントログ」セクションから、CloudTrailとの連携設定を確認してください。
フェデレーティッドログインの構成方法
外部IDプロバイダー(例: GoogleやFacebook)と連携させることで、フェデレーティッドサインインが実現可能です。
SAMLプロバイダーとの連携
- Cognitoの「フェデレーション」セクションから、「SAMLプロバイダー」を追加します。
- IDP側(例: Active Directory)で信頼関係を設定し、ロールアサーションを取得します。
指摘事項: SAMLプロバイダーでのロールアサーションの説明はAWS仕様と整合性がありますか?
- AWSでは「ロールアサーション」はSAMLレスポンス内に含まれる
Role要素で、IAMロールを指定します。 - IDPが発行するSAML応答には、
Assertion/AttributeStatement/Attributeにロール名をマッピングして含める必要があります。
| 機能 | 必須か |
|---|---|
| 認証フローの指定 | 〇 |
| IAMロールの定義 | 〇(外部IDPにアクセス権を付与) |
OAuth 2.0設定手順
OAuth 2.0を使用するには、以下のステップが必要です:
- 「アプリケーションクライアント」セクションで「OAuth設定」を開く。
- プロトコルタイプ(Authorization Codeなど)を選択し、「認証フロー」を許可します。
注意: OAuthの使用には、リダイレクトURIの事前登録が必要です。
IDトークンの検証フロー
- ユーザーが外部IDプロバイダーで認証後に取得するIDトークンを、Cognitoと照合して有効性を確認します。
- トークンはJSON Web Token(JWT)形式であり、サインイン時と比較される必要があります。
| チェック項目 | 内容 |
|---|---|
| 鍵の検証 | Cognitoが発行した公開鍵で署名を確認する |
| 有効期限 | 5分以内に発行されたものを許可 |
まとめ
本記事では、Amazon Cognito ユーザープールの初期設定手順とセキュリティ対策について解説しました。重要なポイントを以下に整理します:
- ユーザープールは、サインアップ、MFA、外部IDプロバイダーとの連携が可能
- CLIやコンソールでの設定方法の違いを理解し、使い分けを実施
- カスタム属性やセキュリティポリシーの設定で、アプリケーションに合わせた柔軟性を得る
- フェデレーティッドサインインは、企業向けまたは外部ユーザーへのアクセス制御に効果的
「Amazon Cognito ユーザープール 設定 方法」についての理解が深まり、実務での導入がスムーズになることを願っています。AWS CLIやコンソールを使って、実際にユーザー登録フローをテストしてみましょう!