TL;DR
ZITADEL のリソースは、Instance の下に Organization があり、Organization が User と Project を持つ階層になっている。ロールは Project 単位で定義し、Organization・Project・Role の組で User に割り当てる。Project Grant を使うと、ロールの割り当てを別の Organization に任せられる。
内容
Instance
Instance は階層の最上位のノードで、Organization と Project を含む。仮想的なテナントとしてデータを完全に分離でき、1 つのシステムに複数の Instance を持てる。
Organization
Organization は Instance の中のテナントで、User や Project を管理する。Organization ごとにブランディングや IdP を設定でき、これらは Policy / Setting で管理する。
User
User は通常のユーザ(Human User)と、M2M 用のサービスアカウントに分かれる。User は基本的に 1 つの Organization にだけ所属し、Organization の間を移動できない。
ただし、Administrator は特別で、管理する範囲によって次の種類がある。
- IAM Administrator: Instance 全体の管理権限を持つ。最も強い権限である
- Organization Administrator: Organization の管理権限を持つ
- Project Administrator: Project の管理権限を持つ
- Project Grant Administrator: 他の Organization から付与された Project(後述する Project Grant)の管理権限を持つ
Project と Application
Project は、Application や Role を管理する単位である。
Application は Project の中に作るクライアントで、Web、Native、User Agent(SPA)、API、SAML の種類がある。基本的には OIDC や OAuth 2.0 を使い、これらに対応していないアプリケーションでは SAML を選べる。
Role と Role Assignment
Role は、Project 単位で定義するアクセス権である。
Role Assignment は、Role を User に割り当てることを指す。割り当ては Organization・Project・Role の組で行う。Project Grant があるので、どのテナントの文脈での割り当てかを Organization で示す。また、Role は Project の中で定義されるので、どの Project の Role かを Project で示す。
Project Grant
Project Grant は、ある Organization の Project(またはその一部の Role)の割り当ての管理を、別の Organization に任せる仕組みである。任された側(Granted Organization)は、自分の Organization の User に、その Project の Role を割り当てられる。