Keycloakでマルチテナントを設計するとき、最初に決めるのが「realmをどう切るか」です。顧客ごとに切るのか、環境で分けるのか、そもそも分けないのか。realmの独立性という強みは、そのまま運用負荷という重さにもなります。判断軸と、Organizationsという新しい選択肢との使い分けを整理します。

01まず「realmとは何を分離する単位か」を揃える

設計の議論に入る前に、realmという単位の定義を関係者で揃えておくと後の迷いが減ります。Keycloak公式のServer Administration Guideは、realmを「ユーザー、認証情報、ロール、グループの集合を管理する単位」と定義し、さらに "Realms are isolated from one another and can only manage and authenticate the users that they control." と明記しています。つまりrealmは、ユーザー空間・認証設定・ロール/グループ・鍵・IdP連携までをまるごと隔離する境界です。

この「まるごと隔離」という性質が、マルチテナント設計での最大の武器であり、同時に運用負荷の源泉でもあります。realmをテナント境界に使うと分離は極めて強固になりますが、realm単位で発生する設定・鍵・アップグレード検証がテナント数に比例して増えていきます。設計とは、この分離の強さと運用の重さのトレードオフをどこで取るか、という一点に集約されます。

現場のコツ:「テナント」という言葉が、顧客企業を指すのか、環境(本番/検証)を指すのか、アプリケーションを指すのかは組織ごとにバラバラです。最初にこの語の定義を1枚の表で固定してから設計に入ると、realmの切り方の議論が空回りしません。

02realmの切り方は大きく3パターン

マルチテナントでrealmをどう切るかは、実務上おおむね次の3つに整理できます。それぞれ独立性と運用負荷の位置づけが異なります。

環境別は多くの現場で採用されますが、テナント分離とは目的が違う点に注意します。環境別realmは「本番設定を検証で汚さない」ための分離であって、顧客間の分離ではありません。この2軸を混同すると、realm数が不必要に爆発します。

realmの切り方 3パターン 顧客別realm realm: 顧客A users / IdP / 鍵 realm: 顧客B users / IdP / 鍵 realm: 顧客C users / IdP / 鍵 分離:強 運用:重 単一realm+属性 realm: 共通 group: 顧客A group: 顧客B group: 顧客C 分離:弱(アプリ依存) 運用:軽 単一realm+Org realm: 共通 Org: 顧客A Org: 顧客B Org: 顧客C 分離:中(Org境界) 運用:中
図:realm境界・属性境界・Organization境界の3つの分離モデル。分離の強さと運用負荷はおおむね逆相関します。

02の続き 参考

この番号付けミスを避けるため、以降は連番で続けます。実際の判断軸を次節から掘り下げます。

03realm間は「共有できない」ものが多い

顧客別realmを選ぶ前に、realmを跨いで共有できないものを正確に把握しておく必要があります。realmが独立している以上、次はrealmごとに個別管理になります。

逆に言えば、これらを「テナントごとに完全に別で運用したい」要件があるなら、顧客別realmは素直な答えです。顧客ごとにIdP(顧客のAzure ADやADFS)をフェデレーションし、パスワードポリシーやブランディングも顧客要件に合わせる——こうしたB2Bエンタープライズの典型要件では、realm境界がそのまま契約・責任分界の境界と一致します。IdP連携の具体はIdentity Brokeringの記事LDAP/AD連携の記事も併せてご覧ください。

04共通設定をどう配るか——realm数が増えると効く

顧客別realmの弱点は、共通設定の横展開です。realmは独立しているため、「全テナント共通の認証フローを1箇所直したら全realmに反映」という操作が標準では効きません。テナントが5個なら手作業でも回りますが、30個、100個になると破綻します。ここを設計時に手当てするかどうかで、数年後の運用が変わります。

実務での定石は、realm設定をコード化(IaC)し、テンプレートから各realmを生成・更新する運用です。Keycloakは Admin REST API を備えており、realmのエクスポート/インポートJSONやTerraform Provider(keycloak provider)、あるいは自前スクリプトで、共通部分をテンプレート化してrealmごとにパラメータ差し込みする形が取れます。この設計にしておくと、「共通フローの変更を全realmへ順次適用」がパイプラインで回ります。

現場のコツ:realmの設定を手で作り込むと、そのrealmは「再現できない一点物」になります。監査やDR、バージョンアップ検証のたびに苦しみます。最初のrealmから宣言的定義(JSON/Terraform)で作り、Admin Consoleでの手修正は「例外・要記録」というルールにしておくと、テナント増加に耐えます。IaC化の具体はAdmin REST APIとIaCの記事で扱っています。

05テナント数が増えたときの運用負荷

顧客別realmは、テナント数の増加に対して運用コストがほぼ線形に増えます。見落としやすいのは、日々の運用ではなくアップグレードとキャパシティです。

実案件では、この運用負荷を見越して「顧客別realmにするのは分離要件が明確な顧客だけ、それ以外は共通realmに寄せる」というハイブリッドを取ることが多いです。全テナントを一律に顧客別realmへ倒すと、契約規模の小さいテナントの運用コストが割に合わなくなります。統制の観点の全体像はマルチアカウント統制の考え方とも通じます。

06Organizationsという第三の選択肢

従来、Keycloakのマルチテナントは「realmで分ける」か「単一realmで属性管理」の二択でした。ここに公式が加えたのがOrganizations機能です。公式アナウンスは、この機能を "multi-tenancy when a realm needs to integrate with third parties such as customers and business partners" と位置づけ、B2B/B2B2CのCIAMユースケースを対象としています。

Organizationsは、realmを分けずに1つのrealm内で複数の組織(テナント)を表現する仕組みです。組織ごとのメンバー管理、招待リンクやブローカリングによるオンボーディング、トークンへの組織メタデータ付与を提供します。realmでOrganizations設定を有効にすると、認証フローが自動更新され、identity-first(メールアドレスなどで先にユーザーを識別してから認証先を切り替える)ログインが導入されます。この「識別してから認証」は、属性ベースの単一realm運用では作り込みが必要だった部分を標準化する点で大きい変化です。

公式の位置づけとしては、Keycloak 25でテクノロジープレビュー、26でサポート化という流れです。さらにKeycloak 26.6.0では Organization Groups が追加され、組織ごとに独立したグループ階層を持てるようになりました。公式は "Organization A's /Engineering/Backend and Organization B's /Engineering/Backend are completely separate groups" と説明しており、組織間でグループ名前空間が衝突しない設計です。グループメンバーシップはOIDCトークンやSAMLアサーションにも載せられ、/admin/realms/{realm}/organizations/{orgId}/groups のAdmin REST APIで自動化できます。バージョン依存が大きい領域なので、採用時は使用バージョンの公式ドキュメントで機能範囲を必ず確認してください。

07realm分割とOrganizationsの使い分け

三者をどう選ぶか。実務での判断軸を整理します。

重要なのは、realm分割とOrganizationsは排他ではない点です。「事業ライン単位ではrealmを分け、その中の顧客企業はOrganizationsで表現する」といった二層構成も現実的です。分離の粒度を1段で決めず、事業構造に合わせて階層化すると、realm爆発を避けつつ必要な分離を確保できます。Organizations自体の詳細はOrganizationsの記事で個別に掘り下げます。

現場のコツ:「顧客が自社IdPを持ち込むか」を最初に確認すると設計が定まりやすいです。顧客ごとに別IdPをフェデレーションする要件が濃いならrealm分割かOrganizations+IdPブローカリング、社内ユーザー中心で共通認証で足りるなら単一realm寄り、と初手の分岐が引けます。

まとめ

Keycloakのマルチテナント設計は、realmという「まるごと隔離する境界」をどこに引くかの判断に尽きます。realm分割は分離が強い反面、共通設定・鍵・アップグレード検証がテナント数に比例して重くなります。この重さをIaCで抑え込めるか、そもそもOrganizationsで単一realmに寄せられるか——分離要件と運用体制の両面から、テナントごとに粒度を選ぶのが実務解です。realm分割とOrganizationsを二層で組み合わせる設計も、選択肢として持っておくと引き出しが増えます。EMWはこの判断を実案件で重ねてきました。設計方針の壁打ちが必要でしたら導入事例もご参照ください。

参考(一次情報)

テナント分離の設計方針で迷われている場合は、実案件の勘所を踏まえてお問い合わせください。

相談する
← ブログ一覧へ戻る