[Auth0] Auth0 Organizationsを利用してマルチテナントにしてみた

[Auth0] Auth0 Organizationsを利用してマルチテナントにしてみた

Clock Icon2024.11.19

こんにちは。

ゲームソリューション部の西川です。
今回は、Auth0 Organizationsを利用してマルチテナントにしてみました。
マルチテナントに対応することで、アプリケーションの管理が比較的容易になり、全体の運用・管理コストを抑えることができるなどのメリットがあります。

マルチテナントのアプリケーションの構築を検討されている方などのご参考になれば幸いです。
そもそも、Organizationsやマルチテナントをご存知でない方々にも向けて用語の説明からしていきます。

用語

Auth0 Organizationsとは

Auth0 Organizationsは、Auth0が提供する機能で、複数の組織や顧客を個別に管理できるようにする仕組み です。これにより、1つのアプリケーションで複数の企業をサポートする際に、それぞれの組織固有のニーズに対応できるようになります。
下記で説明するマルチテナントなアプリケーションを構築する際に役に立ち、各組織ごとに固有の設定を行いながら、セキュアに認証認可周りの導入を行うことができます。

マルチテナントとは

マルチテナントとは、同じサーバーやアプリケーション、データベースを複数のテナント(グループ)で共同で使用する仕組み のことです。例えば、マンションのように一つの建物に複数の部屋があり、複数の人が住んでいるイメージです。メリットとしては、一つのアプリケーションの共有するので、全体の管理コストを低くすることなどが挙げられます。一方で、テナントごとにアクセス制御やデータの分離を行う必要が出るため、プライバシーやセキュリティ面の配慮が重要となってきます。

マルチテナントの内容を調べるにあたってシングルテナントとの違いをChatGPTに聞いてみました。
気になる方は下記もご参考にしてください。

シングルテナントとは

シングルテナントとは

マルチテナントじゃないシステムは、シングルテナントオンプレミス型と呼ばれる仕組みのことが多いです。この場合、1つの利用者(または利用者グループ)専用にシステムが用意されます。たとえば、1つの家を1つの家族が独占して住むようなイメージです。

シングルテナントの特徴

  • 専用のシステム
    利用者ごとにシステムやサーバーが個別に構築されます。他の利用者とインフラを共有しません。

  • カスタマイズ性が高い
    専用環境なので、利用者の要件に合わせてシステムを柔軟にカスタマイズできます。

  • データの隔離が簡単
    他の利用者と環境を共有しないため、データが他に流出するリスクが低く、セキュリティ面で安心感があります。

シングルテナントの代表例

  • オンプレミス型システム
    企業が自社のサーバーに業務システムを設置して運用する場合。例えば、銀行や大規模製造業の基幹システムがこれに該当します。これらは非常に高いセキュリティや独自の要件が必要なため、専用環境が選ばれがちです。

  • クラウド型でも専用環境を利用するケース
    例えば、AWSやAzure上に企業専用の仮想マシンを用意して運用する「シングルテナント型クラウド」。顧客ごとに分けられたインフラで、クラウドの柔軟性を活かしつつ専用環境を確保します。

シングルテナントが向いているケース

  1. 高いセキュリティが必要な場合
    金融機関や医療機関など、規制が厳しく、他の利用者とインフラを共有したくない場合。

  2. カスタマイズが重要な場合
    業務フローが他と大きく異なり、既存の共通システムでは対応できない場合。

  3. 特定のパフォーマンス要件がある場合
    サーバーの性能を他の利用者と共有することで影響を受けるリスクを避けたい場合。

マルチテナントとシングルテナントの違い

特徴 マルチテナント シングルテナント
インフラの共有 複数の利用者で共有する 利用者ごとに専用インフラを用意
コスト 低コスト(共有のため) 高コスト(専用環境のため)
カスタマイズ 限定的 高度なカスタマイズが可能
セキュリティ 設計次第で強化可能 自然と高い隔離性を持つ
利用例 SaaS、クラウドサービス 金融、医療、カスタム業務システム

どちらを選ぶかは、セキュリティ要件、コスト、柔軟性の優先順位によって決まります。

それでは本題の、Organizationの設定を行っていきます。

設定

OrganizationsのページからCreate Organizationを押下します。
スクリーンショット 2024-11-19 17.11.43

NameとDisplay Nameを入力してAdd Organizationを押下します。
Nameは半角英数字で入力する必要があります。
スクリーンショット 2024-11-19 17.12.45

作成ができました。
スクリーンショット 2024-11-19 17.12.52

設定のBrandingからOrganizationごとにロゴやカラーの設定を行うことができます。
スクリーンショット 2024-11-19 17.13.00

続いて、Organizationに対してConnectionsの設定を行っていきます。
Enable Connectionsを押下します。
スクリーンショット 2024-11-19 17.13.39

Username-Password-Authenticationを選択し、Enable Connectionを押下します。
スクリーンショット 2024-11-19 17.13.45

設定が完了しました。
スクリーンショット 2024-11-19 17.13.54

続いて、Organizationに登録するためのユーザを作成します。
Create Userを押下します。
スクリーンショット 2024-11-19 17.14.15

Connectionを選択し、Email、Passwordなどを入力し、Createを押下します。
スクリーンショット 2024-11-19 17.15.04

作成できました。
スクリーンショット 2024-11-19 17.15.12

再度、Organizationの設定に戻り、MembersからAdd Membersを押下します。
スクリーンショット 2024-11-19 17.15.33

入力欄にメールアドレスを入力して検索することで、先ほど作成したユーザが表示されますので、そちらを選択します。
スクリーンショット 2024-11-19 17.15.43

ユーザを追加できました。
スクリーンショット 2024-11-19 17.15.51

続いて、マルチテナント対応にしたいアプリケーションの設定に行きConnectionsからUsername-Password-Authenticationを選択します。
スクリーンショット 2024-11-19 17.16.15

Organizationsの設定にいき、Bothを選択します。
Individualsは組織に関係なくユーザ単位、Business Usersは組織に所属しているユーザのみ、Bothはその両方のユーザを使ってログインできます。
スクリーンショット 2024-11-19 17.16.26

Login FlowはPrompt for Credentialsを選択します。
No Promptは認証のAPIに組織IDを含めておく必要がある設定となります。
選択したら、Save Changesを押下します。
スクリーンショット 2024-11-19 17.16.33

上記で設定は完了です。
続いて、動作確認を行っていきます。

動作確認

動作確認には、下記記事内で作成したサンプルを使用しています。
https://dev.classmethod.jp/articles/auth0-react-tutorial/

ローカルサーバを立ち上げ、接続します。
Log inを押下します。
スクリーンショット 2024-11-19 17.17.24

メールアドレスを入力し、Continueを押下します。
スクリーンショット 2024-11-19 17.17.40

Passwordを入力し、Continueを押下します。
スクリーンショット 2024-11-19 17.17.50

しっかり設定ができていれば、下記のように、今回登録した組織が選択できるようになっています。
組織1を選択します。
スクリーンショット 2024-11-19 17.18.00

下記のような認証画面が表示されるので、Acceptを押下します。
スクリーンショット 2024-11-19 17.18.08

無事ログインすることができました。
スクリーンショット 2024-11-19 17.18.15

右上のアイコンからProfileを押下するとユーザに紐づいたプロフィールなどが表示されます。
今回は、組織1としてログインしているため、org_idに組織1のIDが入っており、組織1としてログインできていることを確認できます。
スクリーンショット 2024-11-19 17.18.27

以上で動作確認も完了しました。

さいごに

以上、Auth0 Organizationsを利用してマルチテナントに対応してみました。

様々なアプリケーションでマルチテナント対応をするようになってきていると思います。
Auth0であれば、特に実装の必要なく機能として権限やデータを分離しながらマルチテナントに対応できるようになっているため、よりセキュアにマルチテナントアプリケーションを構築することができます。

Auth0を利用中、検討中の方や、マルチテナントを検討中の方などのご参考になれば幸いです。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.