Amazon Cognito の外部IdP連携で自動作成されるユーザをあらかじめ作成する方法を教えてください

2021.09.14

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

困っていた内容

Amazon Cognito のユーザプールで、外部IdP連携によるサインインを設定しています。ユーザは外部IdPでサインインしたタイミングで作成されますが、事前に作成して権限付与をしておきたいです。
Cognito コンソールのユーザ作成では、identitiesプロパティが設定できず、外部IdPで作成されるのと同じユーザは作成できないようでした。どうしたら良いでしょうか。

管理者としてのユーザーアカウントの作成 - Amazon Cognito

どう対応すればいいの?

ユーザを作成後、AWS CLI のadmin-link-provider-for-userを実行してください。

admin-link-provider-for-user — AWS CLI 2.7.3 Command Reference

Links an existing user account in a user pool (DestinationUser ) to an identity from an external IdP (SourceUser ) based on a specified attribute name and value from the external IdP. This allows you to create a link from the existing user account to an external federated user identity that has not yet been used to sign in.

外部IdPでサインインしたユーザは、identitiesプロパティに外部IdPの情報が付与された状態で自動作成されますが、このプロパティはユーザ作成時に設定できません。

そのため、一度identitiesプロパティがない状態のユーザを作成し、その後、作成したユーザと外部IdPのユーザをリンクさせる必要があります。リンクによって自動的にidentitiesプロパティが設定され、サインイン時に自動作成されるユーザをあらかじめ作成できます。

現時点でCognito コンソールからリンクはできないため、AWS CLI のadmin-link-provider-for-userをお使いください。

Azure 1=とリンクする場合のコマンド例

$ aws cognito-idp admin-link-provider-for-user
  --user-pool-id hato-userpool
  --destination-user ProviderName='Cognito',ProviderAttributeName='userId',ProviderAttributeValue='【ユーザプールのユーザID】'
  --source-user ProviderName='AzureActiveDirectoryforCognito',ProviderAttributeName='username',ProviderAttributeValue='【Azure ADのユーザ名】'

参考資料