📢

GenU でユーザを大量にセルフサインアップさせるときに注意すること

に公開

GenU とは

generative-ai-use-cases-jp (GenU)は GitHub の aws-samples で公開されている生成 AI アプリケーションのサンプル実装です。オープンソースライセンスで提供されており、アプリケーションを無料でご自身の AWS アカウント上に構築ができます。
https://aws-samples.github.io/generative-ai-use-cases/ja/index.html

ユーザを同時かつ大量にセルフサインアップさせようとして事故る

GenU ではデフォルトでは Cognito をアプリケーションのユーザ管理の仕組みとして採用されています。

ある日、GenU を数千名規模で広く展開したいということで、Cognito のセルフサインアップ機能を利用して、利用者の方々にサインアップを依頼したところ以下のエラーが表示されました。

Cognito ではセルフサインアップ時にEメールアドレスの有効性を確認するため認証コードがEメールアドレス宛に送られますが、Cognito の機能でEメールを送信する場合、1日に送信できる最大数は50通と制限されています。Cognito のコンソールの画面にも以下のように記載されています。

Cognito のデフォルトのEメールアドレスは、開発を開始するに際しての一時的なものとして使用します。1日に最大50通のEメールを送信するために使用できます。

つまり、Cognito がもつEメールアドレスの送信機能は開発時の一時的な利用を想定しており、本番利用では SES で検証済みのアイデンティティを使用してEメールを送ることが推奨されています。

代替案を考える

とはいっても、今日から使い始めてもらい場合、SES を利用すると最初は Sandbox 環境に入り、プロダクション化させるにはサポートケースの起票が必要なため、少し都合が悪いです。

そこで、管理者側で Cognito のEメール送信の上限に引っかからないようにしつつ、ユーザを作成する方法を試します。

具体的には、以下のシェルスクリプトを実行します。addresses.txt には登録したいEメールアドレスが各行に列挙されています。user-pool-id や region, temporary-password は適宜書き換えましょう。

bash
while read email || [ -n "$email" ]; do
  aws cognito-idp admin-create-user \
    --user-pool-id ap-northeast-1_xxxxxxx \
    --username "$email" \
    --user-attributes Name=email,Value="$email" Name=email_verified,Value=true \
    --temporary-password "XXXXXXXXX" \
    --message-action SUPPRESS \
    --region ap-northeast-1 \
    --no-cli-pager
done < addresses.txt
addresses.txt
user1@example.com
user2@example.com
user3@example.com

これにより、Eメール確認済みの Cognito ユーザを管理者側で作成しつつ、ユーザには一時的なパスワードを使用して初回ログインをさせることができます。

初回ログイン時は以下のような画面に遷移され、一時パスワードからご自身のパスワードへ強制的に変更が求められるため、個々人にパスワード管理を任せることができます。

まとめ

本記事では、GenU で Cognito を使っている場合に、Eメール送信の上限を回避して管理者側でユーザを作成する方法をご紹介しました。

上記でも触れていますが、本番環境ではEメール送信はSESを利用することを推奨しています。

広く展開する際には、計画的にデプロイを進めましょう!

アマゾン ウェブ サービス ジャパン (有志)

Discussion