はじめに
とあるアプリケーションで、管理者ユーザーと一般ユーザーとで提供する機能を分けたいと思った時に、どう実現するのが良いか調べたら、Cognito ユーザープールのグループ機能を使って権限管理すると良いらしいということだったので、Amplify でその辺を自動構成する方法を調べました。
以下のような運用を考えていました。
- 一般ユーザーはアプリケーションからサインアップできるようにしたい
- 管理者ユーザーは数人なので Cognito ユーザープールに直接追加すれば良い
サインアップを利用するのは一般ユーザーなので、サインアップしてきたユーザーは一般ユーザー用のグループに自動で追加するようにします。
記事執筆時点の Amplify CLI のバージョンは下記のとおりです。
$ amplify --version
4.29.6
amplify auth add
amplify auth add
コマンドを実行して、以下のように選択していきます。
グループへの自動追加の構成以外はデフォルト値をそのまま選んでいます。
$ amplify auth add
Do you want to use the default authentication and security configuration?
Default configuration
How do you want users to be able to sign in?
Username
Do you want to configure advanced settings?
Yes, I want to make some additional changes.
What attributes are required for signing up?
Email
重要なのは以下の選択肢。
有効にしたい機能を聞いてくるのですが、ここに Add User to Group
という項目があって、これが今回実現したい内容を自動構成するための項目です。
この機能を有効化すると、ユーザーの確認後(Post Confirmation)のトリガーで、指定のグループに自動的に追加してくれる Lambda トリガーを作ってくれます。
Do you want to enable any of the following capabilities?
Add User to Group
で、どのグループに追加するかを聞いてくるので、一般ユーザー用のグループ(例: Users
)を指定します。
Enter the name of the group to which users will be added.
Users
Do you want to edit your add-to-group function now?
No
グループが存在しない場合はトリガーが自動で作成してくれるらしいので、グループをあらかじめ作る必要はありませんでした。
最初の amplify auth add
で Manual configuration
を選んで大量の質問をさばきつつグループを作成したり、 amplify auth update
を実行して後からも作成できます。
Lambda トリガーを後から追加する方法はよくわかりませんでした。
まとめ
以上の内容は以下の Amplify CLI の公式ドキュメントに記載されています。
ただ、なかなか見つけられなかったのと、ググるとこの機能が追加される前だったからか、頑張って CloudFormation テンプレートを直接書き換えて、自作した Lambda トリガーを割り当てている例ばかり(調べ方が悪いのかもしれません)がヒットしたので、記事にしてみた次第です。
以上。