カスタム属性を持つCognitoユーザプールを作成してみた
こんにちは、CX事業本部の若槻です。
AWSのユーザーディレクトリ機能であるAmazon Cognitoユーザープールでは、ユーザー属性としてあらかじめ仕様が決められた標準属性のほかに、管理者が任意の仕様を定義できるカスタム属性が使用できます。
今回は、カスタム属性を持つCognitoユーザプールを、マネジメントコンソールとAWS CLIの2パターンにより作成してみました。
マネジメントコンソールから作成
まず、マネジメントコンソールからCognitoユーザプールを作成してみます。
Cognitoユーザープールのコンソールにアクセスして、[ユーザープールを作成する]をクリック。
プール名を指定して、今回は[デフォルトを確認する]をクリック。
[カスタム属性の選択...]をクリック。
[カスタム属性の追加]をクリック。
追加したいカスタム属性の情報を指定(今回は属性名attr01
)し、さらに必要数だけ[別の属性の追加]をクリックして同様に情報を指定します。[次のステップ]をクリック。
[確認]画面で、指定したカスタム属性が追加されていることを確認し、[プールの作成]をクリック。
作成できました。カスタム属性名は接頭辞としてcustom:
が付くようです。
ユーザープール一覧を開くと作成したユーザープールが表示されています。
ユーザープールの[全般設定] - [属性]を見るとカスタム属性custom:attr01
が追加されています。[別の属性の追加]からカスタム属性の追加も可能なようです。
追加したカスタム属性の詳細をAWS CLIで取得してみると、コンソールでの追加時に指定ができなかったDeveloperOnlyAttribute
(開発者が変更可能な属性であるかどうか)項目はfalse
となっています。
% aws cognito-idp describe-user-pool --user-pool-id ap-northeast-1_AwJpGCDnr
{
"UserPool": {
"Id": "ap-northeast-1_AwJpGCDnr",
"Name": "myPool01",
...
"SchemaAttributes": [
...
{
"Name": "custom:attr01",
"AttributeDataType": "String",
"DeveloperOnlyAttribute": false,
"Mutable": true,
"Required": false,
"StringAttributeConstraints": {
"MinLength": "1",
"MaxLength": "256"
}
}
],
...
}
}
また、コンソールから追加時にはAttributeDataType
項目はstring
かnumber
しか選択できず、CLIからは指定可能であるDateTime
やBoolean
は選択できませんでした。
これら項目を設定したい場合はAWS CLIによるユーザープールの作成(カスタム属性の追加)が必要のようです。
ちなみにドキュメントにある通り、カスタム属性は必須(Required
)を有効とすることはできません。
AWS CLIで作成
次に、AWS CLIでCognitoユーザプールを作成してみます。
カスタム属性を持つCognitoユーザプールをAWS CLIコマンドで作成する場合は、aws cognito-idp create-user-pool
コマンドでschema
オプションを使用します。
% aws cognito-idp create-user-pool \
--pool-name myPool02 \
--schema \
Name=attr01,AttributeDataType=DateTime,Mutable=true \
Name=attr02,AttributeDataType=Boolean,DeveloperOnlyAttribute=true,Mutable=true
{
"UserPool": {
"Id": "ap-northeast-1_y98UhYIdX",
"Name": "myPool02",
...
"SchemaAttributes": [
...
{
"Name": "custom:attr01",
"AttributeDataType": "DateTime",
"DeveloperOnlyAttribute": false,
"Mutable": true,
"Required": false
},
{
"Name": "dev:custom:attr02",
"AttributeDataType": "Boolean",
"DeveloperOnlyAttribute": true,
"Mutable": true,
"Required": false
}
],
...
}
}
コンソールからも作成されたユーザープールにカスタム属性が追加されていることが確認できます。DeveloperOnlyAttribute
項目をtrue
とした場合は属性名の接頭辞にさらにdev:
が付くようです。
補足
create-user-pool
コマンドのドキュメントではschema
オプションではRequired
項目が指定可能であるように記載されていますが、実際に指定してコマンドを実行すると次のようにRequired custom attributes are not supported currently.
というエラーとなります。
% aws cognito-idp create-user-pool --pool-name myPool02 \
--schema Name=attr02,AttributeDataType=Boolean,DeveloperOnlyAttribute=true,Mutable=true,Required=true
An error occurred (InvalidParameterException) when calling the CreateUserPool operation: Required custom attributes are not supported currently.
AWSフォーラムを見るとこれはドキュメントの記載ミスであり、実際にはRequired
項目はschema
で指定可能な項目ではないようです。
参考
- describe-user-pool | aws . cognito-idp
- create-user-pool | aws . cognito-idp
- Make Custom Attributes Required in a User Pool | Discussion Forums
以上