マルチテナントアプリケーションのベストプラクティス
Amazon Cognito ユーザープールは、Amazon Cognito クォータ内に収める必要がある大量のリクエストを生成するマルチテナントアプリケーションで動作します。顧客ベースが拡大したときにこの容量をスケールアップするには、追加のクォータ容量を購入できます。
注記
Amazon Cognito クォータは、AWS アカウント と AWS リージョン ごとに適用されます。これらのクォータは、アプリケーション内のすべてのテナント間で共有されます。Amazon Cognito サービスクォータをチェックして、クォータがアプリケーションの想定されるボリュームとテナント数に対応できることを確認してください。
このセクションでは、同じリージョンと AWS アカウント 内の Amazon Cognito リソース間でテナントを分割するために実装できる方法について説明します。テナントを複数の AWS アカウントまたはリージョンに分割し、それぞれに独自のクォータを付与することもできます。マルチリージョンマルチテナンシーのその他のメリットには、可能な限り高い分離レベル、グローバルに分散されたユーザーに対する最短ネットワーク転送時間、組織の既存のディストリビューションモデルへの準拠などがあります。
単一リージョンのマルチテナンシーは、顧客や管理者にとってもメリットがあります。
次のリストは、共有リソースを使用したマルチテナンシーのメリットの一部を示しています。
マルチテナンシーのメリット
- 共通ユーザーディレクトリ
-
マルチテナンシーは、顧客が複数のアプリケーションにアカウントを持つモデルをサポートします。サードパーティープロバイダーの ID をリンクする先を 1 つの一貫したユーザープールプロファイルすることができます。ユーザープロファイルがテナントに固有である場合、単一のユーザープールを持つマルチテナンシー戦略では、ユーザー管理へのエントリポイントは 1 つになります。
- 共通セキュリティ
-
共有ユーザープールでは、単一のセキュリティ標準を作成し、同じ高度なセキュリティ、多要素認証 (MFA)、および AWS WAF 標準をすべてのテナントに適用できます。AWS WAF ウェブ ACL は、関連付けるリソースと同じ AWS リージョン にある必要があるため、マルチテナンシーは、複雑なリソースへの共有アクセスを提供します。マルチリージョン Amazon Cognito アプリケーションで一貫したセキュリティ設定を維持する場合は、リソース間で設定を複製する運用標準を適用する必要があります。
- 共通カスタマイズ
-
ユーザープールとアイデンティティプールは、AWS Lambda を使用してでカスタマイズできます。ユーザープールでの Lambda トリガーの設定や、アイデンティティプールでの Amazon Cognito イベントの設定は、複雑になる可能性があります。Lambda 関数は、ユーザープールまたはアイデンティティプールと同じ AWS リージョンにある必要があります。共有 Lambda 関数は、カスタム認証フロー、ユーザー移行、トークン生成、リージョン内の他の関数について標準を適用できます。
- 共通メッセージング
-
Amazon Simple Notification Service (Amazon SNS) では、ユーザーに SMS メッセージを送信する前に、特定のリージョンでの追加の設定が必要になります。特定のリージョン内に含まれる、Amazon Simple Email Service (Amazon SES) で検証済みの ID とドメインを使用して E メールメッセージを送信できます。
マルチテナンシーを使用すると、この設定とメンテナンスのオーバーヘッドをすべてのテナント間で共有できます。Amazon SNS と Amazon SES はすべての AWS リージョン で利用できるわけではないため、リソースをリージョン間で分割するには追加の考慮事項が必要になります。
カスタムメッセージングプロバイダーを使用すると、メッセージ配信の管理に単一の Lambda 関数を使用し、共通カスタマイズを適用できます。
ホストされた UI は、ブラウザにセッション Cookie を設定し、認証済みのユーザーを認識します。ユーザープール内のローカルユーザーを認証する場合、ローカルユーザーのセッション Cookie は、同じユーザープール内のすべてのアプリケーションクライアントに対してユーザーを認証します。ローカルユーザーは、外部 IdP を介したフェデレーションなしに、ユーザープールディレクトリにのみ存在します。セッション Cookieは 1 時間有効です。セッション Cookie の有効期間を変更することはできません。
ホストされた UI セッション Cookie を使用した複数のアプリケーションクライアント間でのサインインを防ぐには、2 つの方法があります。
-
ユーザーをテナントごとのユーザープールに分割します。
-
ホストされた UI サインインを Amazon Cognito ユーザープール API サインインに置き換えます。