Contents
AWSマネジメントコンソールでカスタム属性を追加する手順
AWS Cognitoのユーザープールにカスタム属性を追加する際、UI操作が最も直感的な方法です。ただし、リアルタイムでの反映やデータ型の制限など注意点も存在します。以下に具体的な手順とポイントを解説します。
コンソール経由でカスタム属性を追加すると、プール全体に自動的に適用されるため、個別ユーザーへの限定的な属性変更は不可です。AWSドキュメントによると、再作成が必須である場合もあれば不要な場合もあるため、実際の操作前に公式情報と比較する必要があります。
マネジメントコンソールはUI操作中心であり、手順が明確ですが、APIやCLIに比べて柔軟性が劣る点があります。特にデータ型や動的な属性反映には制限があるため、開発環境で検証を進める際の選択肢として考える必要があります。
手順: コンソールでのカスタム属性追加
- AWSコンソールから「Cognito」サービスを開き、「ユーザープールを作成する」を選択します。
- ユーザー名やメールアドレスなど基本属性を設定した後、「カスタム属性の選択...」をクリックします。
- 「カスタム属性の追加」ボタンを押し、属性名(例:
attr01)とタイプ(文字列 or 数値)を選択します。
この方法ではブール値やDateTime型は利用不可であり、後述するAPI経由でしか定義できません。
注意点と制限事項
コンソールでの属性追加には以下の制約があります:
- データ型の選択制限: 文字列と数値以外(例:
booleanやdate-time)は利用不可です。 - プール全体への反映: 属性変更はすべてのユーザーに自動的に適用されるため、個別設定が必要な場合はCLI/APIを使用してください。
blockquote: コンソール経由での属性変更が「プール全体に適用される」という点を理解してください。一部のユーザーにのみ反映させたい場合はCLIやAPIを使用する必要があります。
AWS CLIでカスタム属性を定義する方法
CLIコマンドを使うことで、スクリプト化やCI/CDに組み込みやすい柔軟性が得られます。ただし、既存プールへの変更には注意が必要です。
AWS CLIではcreate-user-pool-attributeコマンドを使ってカスタム属性を定義でき、JSON形式でスキーマを設定します。この方法は複数プールの一括処理や自動化スクリプトとの連携に適しています。
コマンド実行例
以下にCLIでの属性定義コマンドを示します:
|
1 2 3 4 |
aws cognito-idp create-user-pool-attribute \ --user-pool-id <USER_POOL_ID> \ --schema-attributes '[{"Name": "customattr1", "AttributeDataType": "String"}, {"Name": "customattr2", "AttributeDataType": "Number"}]' |
この例ではcustomattr1とcustomattr2という属性を定義しています。サポートされるデータ型は「String」「Number」「Boolean」「DateTime」です。
CLIの基本構文とパラメータ
CLIでのカスタム属性追加には以下の3要素が必要です:
--user-pool-id: ユーザープールID(事前に取得済み)--schema-attributes: JSON形式で定義された属性リストcreate-user-pool-attributeコマンドの実行
| キー | 値 | 補足 |
|---|---|---|
| Name | customattr1 |
属性名(任意) |
| AttributeDataType | String / Number / Boolean / DateTime |
データ型指定 |
| DeveloperOnlyAttribute | true / false |
開発者専用属性を有効化 |
blockquote: 既存プールへの変更は
update-user-pool-attributeコマンドで行う必要があります。この際、--schema-attributesに更新後のフルスキーマを指定する点に注意してください。
CreateUserPool APIによるプログラム型属性設定
APIを使用することで、自動化やCI/CDとの連携が容易になります。特に大規模なプール管理が必要な場合に有効です。
AWS SDKでCreateUserPoolまたはUpdateUserPool APIを呼び出すことで、カスタム属性をプログラム的に設定可能です。API経由ではコンソールやCLIに比べて柔軟性が高く、動的なスキーマ構築や大量プールの処理にも対応できます。
Pythonでの例
以下はboto3を使用してプールを作成しカスタム属性を定義するコードです:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
import boto3 client = boto3.client('cognito-idp', region_name='ap-northeast-1') response = client.create_user_pool( PoolName='MyUserPool', SchemaAttributes=[ { 'Name': 'custom:age', 'AttributeDataType': 'Number', 'DeveloperOnlyAttribute': True }, { 'Name': 'custom:example_attr', # 汎用的な属性名に変更 'AttributeDataType': 'Boolean' } ] ) |
この例ではcustom:ageとcustom:example_attrという2つのカスタム属性を定義しています。
APIリクエスト構造
CreateUserPool APIはJSON形式でリクエストされます。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
{ "PoolName": "MyUserPool", "SchemaAttributes": [ { "Name": "custom:age", "AttributeDataType": "Number" }, { "Name": "custom:example_attr", # 汎用的な属性名に変更 "AttributeDataType": "Boolean" } ] } |
blockquote:
DeveloperOnlyAttributeをtrueに設定すると、この属性はUI経由でユーザーが編集できなくなります。開発者専用のデータが必要な場合に利用してください。
LambdaトリガーによるIDトークンへのカスタム属性反映
Lambdaトリガーは、特定のイベント発生時に自動的に実行される関数で、IDトークンにカスタム属性を含める重要な仕組みです。開発者による柔軟な処理が可能です。
PreTokenGenerationなどのトリガーイベントを使用することで、カスタム属性をIDトークンに反映できます。Lambdaトリガーは動的なデータ加工やビジネスロジックの実装に適しており、特にセキュリティ制御やパーソナライズが必要な場面で活用されます。
Node.jsでのLambda関数例
以下はPreTokenGenerationトリガーを処理するNode.jsコードです:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
exports.handler = async (event, context) => { const userAttributes = event.userPoolUser.Attributes; // 汎用的なカスタム属性名を使用してIDトークンに追加 for (const attr of userAttributes) { if (attr.Name === 'custom:example_attr') { // カスタム属性名を変更 event.response.token['custom:example_attr'] = attr.Value; break; } } return event; }; |
この関数は、ユーザーの属性情報からcustom:example_attrというカスタム属性を取得し、IDトークンに追加します。
Lambdaトリガーの手順と注意点
Lambdaトリガーを有効化するには以下のステップが必要です:
- Cognitoユーザープールを開き「トリガーセクション」へ移動
- 「PreTokenGeneration」イベントを選択し、「関数の選択」からLambda関数を指定します。
- Lambda関数のロールに適切なIAM権限を付与します(
cognito-idp.amazonaws.comとの通信が必要)。
blockquote: IDトークンへの反映はLambdaトリガー経由のみです。コンソールやCLIで定義された属性が自動的に反映されることはありません。
重要注意事項
以下のようなポイントに留意してください:
- データ型の整合性: IDトークンには
StringまたはBooleanなどのシンプルな形式しか受け付けられません。 - 実行順序の考慮: 複数のトリガーが存在する場合、イベント発生時の実行順序を確認し、正しく処理されるように構成してください。
| 項目 | 内容 |
|---|---|
| 最大属性数 | 50項目まで(AWSドキュメント参照) |
| リアルタイム性 | Lambdaトリガーは非同期実行のため、即時反映には注意 |
データ型と各手法の制限一覧
以下の表に、コンソール、CLI/API、Lambdaトリガーがそれぞれサポートするデータ型をまとめます:
|
1 2 3 4 5 6 |
| 手法 | サポートされるデータ型 | 制限事項 | |------------------|-------------------------------|------------------------------------------------| | **マネジメントコンソール** | 文字列 / 数値 | ブール値、DateTime型は利用不可 | | **CLI/API (CreateUserPool)** | 文字列 / 数値 / ブール / DateTime | 動的な処理や大量プールの管理に適している | | **Lambdaトリガー** | 文字列 / ブール | IDトークンへの反映はこの方法のみ | |
まとめと比較
各手法の特徴を以下に整理します:
- コンソール: 直感的だが柔軟性に欠ける、データ型が限定的
- CLI/API: 自動化や大規模プール管理向け、複雑な処理にも対応
- Lambdaトリガー: IDトークンへの反映は必須、開発者によるカスタマイズが可能
それぞれの用途に応じて適切に選択し、システム設計に活かしてください。---