SaaS開発ガイド【テナント編】

ユーザー認証やログイン機能は、SaaS開発において当たり前のように実装される機能です。しかし、「ログインできればそれで良い」という考え方は、特にBtoB SaaSではうまくいかないことがあります。
BtoB SaaSでは、「誰が」サービスを利用しているかというユーザー情報だけでは十分ではありません。本当に重要なのは、「誰が、どの組織(テナント)の一員として」サービスを利用しているか、という情報です。
これは、ただSaaSのコア機能群(アプリケーションプレーン)で使うだけの認証情報にとどまりません。テナントの管理、オンボーディング、課金・請求などといったSaaSのビジネス運営を支える「コントロールプレーン」においても重要な役割を果たします。
この「ユーザー」と「テナント」の情報を組み合わせて定義する概念こそが、SaaSの設計の基礎となる 「SaaSアイデンティティ」 です。
多くの開発チームが、開発初期にこの概念を見過ごした結果、サービスの成長と共に大きな技術的負債を抱えることになります。本記事では、SaaSアイデンティティとは何か、なぜそれがSaaS開発の根幹をなすのか、そしてこの設計を怠った場合にどのような問題が起こるかについて見ていきます。
SaaSアイデンティティとは、単一の概念ではなく、以下の2つの要素を組み合わせたものです。
BtoB SaaSでは、ユーザーは必ず特定のテナントに所属してサービスを利用します。例えば、「A株式会社の山田さん(管理者権限)」や「B製作所の鈴木さん(一般ユーザー権限)」といった形で、ユーザーアイデンティティとテナントアイデンティティは常にセットで扱われます。
SaaSアイデンティティは、単なるユーザー情報管理の枠を超え、SaaSアプリケーションのコア機能を支える基盤となります。それは、ログイン処理のためだけに存在するのではなく、以下で挙げるようなSaaSのビジネス運営そのものを管理・制御するための中心的な役割を担っています。
新しいテナントがサービス利用を開始する際、まずテナントアイデンティティが作成されます。そのテナントの管理者として最初のユーザーアイデンティティが紐付けられ、ここからテナントのセットアップが始まります。
なお、このプロセスが自動化されているかどうかが、以前の記事で解説したとおり、SaaSビジネスのスケールを大きく左右します。
BtoB SaaSの最も重要な要件の一つが、テナント間のデータを厳密に分離することです。つまり、テナントAのユーザーが、テナントBのデータにアクセスできてはいけません。
具体的な実装としては、例えば、テナントアイデンティティに「テナントID」を持たせてデータ分離を実現する方法が考えられます。リレーショナルデータベースの場合であれば、テーブルにテナントIDカラムを持たせることで実現できるでしょう。
このような「常に自テナントのデータにしかアクセスできないよう制御する実装」は、基本的ながら極めて重要です。
BtoB SaaSでは、一人のユーザーが複数のテナントに所属し、さらにテナントごとに異なる役割を持つことが頻繁にあります。
例えば、Slackを例に考えてみましょう。自社のワークスペースでは「管理者」かもしれませんが、別のコミュニティのワークスペースでは「一般ユーザー」ということがあります。
そのため、SaaSアイデンティティを用いて、「誰が」「どのテナントで」「どの権限で」アクセスするかを適切に制御する必要があります。
ユーザーが特定の機能を利用する際、システムはテナントの契約プランに基づき、機能へのアクセスを制限したり、従量課金のために利用量を計測したりする必要があります。ここでも、「ユーザーの行動」と「テナントの契約情報」を正確に結びつけ、適切な課金処理を行うためにSaaSアイデンティティが必要になります。
BtoB SaaSの認証基盤を考えるとき、まずテナントの設計を固めることが非常に重要です。なぜなら、上で述べてきたように、認証基盤の根幹をなすSaaSアイデンティティはテナントの概念と切り離せない関係にあるからです。
テナントの設計が定まらないまま認証機能だけを先行して実装してしまった場合、どのような問題が起こるでしょうか。
例えば、システム全体に後付けのマルチテナント対応コードが散在してしまい、これが大きな技術的負債となることも考えられます。
そして、この問題は単にコードが複雑になるだけでは終わりません。設計の根幹にテナントの概念がないことで、意図せず他のテナントのデータにアクセスできてしまうといったセキュリティリスクの高い構造を生んでしまいます。さらに、ログインのたびにテナント選択を求めるなどユーザー体験の悪化を招いたり、運用負荷を増大させたりと、ビジネスの成長を直接的に妨げる要因にもつながるのです。
SaaSアイデンティティは、スケーラブルでセキュアなマルチテナントSaaSを構築するための設計の出発点です。それは単なる機能要件ではなく、アプリケーション全体のアーキテクチャ、そしてSaaSビジネスの基本となる重要な原則です。
多くの開発チームが、目の前の機能開発を優先するあまり、この基本的な設計を後回しにしがちです。しかし、テナント設計・SaaSアイデンティティの設計と認証基盤の設計は不可分であり、システムの根幹に関わる部分を後から修正するコストは非常に大きくなります。
E-Book「SaaS開発ガイド」では、本記事で扱いきれなかったテナント設計に関する詳しい内容や、SaaS開発に取り組む前に知っておきたい重要ポイントを扱っています。SaaSに関する基礎的な知識を身に付けたい方はぜひご一読ください。

Spread the word: