AWS
cognito

Cognitoユーザープールのグループを組織(テナント)管理に使おうとした時の留意点

Cognitoユーザープールでは、グループを作成してユーザーをまとめることができます。

「ユーザーを組織(テナント)ごとに管理したい」という要求があったので、このグループを利用すれば簡単にできるかなと思ったのですが、期待していたものとは少し異なっていたので、調べて判ったことをまとめておきます。


グループは後から追加された機能

まずこのグループは、後から追加された機能みたいです。

新機能 – Amazon Cognito グループ、およびきめ細かなロールベースのアクセス制御

ざっと読んだどころ、グループはロールベースアクセス制御(RBAC)を行うための概念のようです。


  • IAMロールを設定することができる

  • ユーザーは複数のグループに属することができる

グループを組織として扱う場合、複数グループに所属できる点はちょっとイメージに合いませんが、まあ単一のグループに属するようにすれば大丈夫そうです。


ユーザー情報にはグループは(直接)含まれない

list_usersget_useradmin_get_userも含む)でユーザー情報を取得できますが、これにグループ情報は含まれません。


get_userのレスポンス

{

'Username': 'string',
'UserAttributes': [
{
'Name': 'string',
'Value': 'string'
},
],
'MFAOptions': [
{
'DeliveryMedium': 'SMS'|'EMAIL',
'AttributeName': 'string'
},
],
'PreferredMfaSetting': 'string',
'UserMFASettingList': [
'string',
]
}

ユーザーが属するグループを取得するには、admin_list_groups_for_userを使う必要があります。つまり、「この組織のこのユーザーを直接取得する」ということはできなさそうです。


グループに関するメソッド

groupで検索したら以下がありました。これらをうまく組み合わせて組織に関する操作を行う必要があります。


  • 単純なCRUD


    • create_group()

    • get_group()

    • list_groups()

    • update_group()

    • delete_group()



  • グループへの追加と削除


    • admin_add_user_to_group()

    • admin_remove_user_from_group()



  • ユーザーが属するグループの一覧の取得


    • admin_list_groups_for_user()



  • グループに属するユーザーの一覧の取得


    • list_users_in_group()




ひとまずの結論


  • ユーザーは複数のグループに属することができる

  • ユーザーが属するグループを取得するにはひと手間必要