ユーザー・ロール・権限
MintJams CMS のアクセス制御は、ユーザー・グループ・ロール(プリンシパル)と、ノードに付与する ACL で構成されます。アイデンティティは system ワークスペースでグローバルに管理され、すべてのワークスペースで共有されます。
管理する 2 つの方法
| 方法 | 用途 |
|---|---|
| Identity Manager(アプリ) | 画面からの対話的な管理。日常の作成・変更・パスワード |
| プロビジョニング(YAML) | 宣言的・再現性のある初期投入。アプリ同梱の初期セット |
両者は同じモデルに書き込むため、作成されたアカウントは区別されません。詳しくは「Identity Manager」と「プロビジョニング」を参照してください。
プリンシパル
- ユーザー —
/home/users/{id}。対話的にサインインできるアカウント - グループ —
/home/groups/{id}。メンバーをまとめ、権限付与の単位にする - ロール —
/home/roles/{id}。権限のまとまり - サービスアカウント — パスワードを持たない非対話型のアイデンティティ。連携処理が
runAsで利用し、サインインはできません
グループ・ロールは階層を持てます。メンバーシップには、直接の所属と(祖先を含む)実効的な所属があります。
権限(ACL)
ノードごとに、プリンシパルに対して権限を**許可(allow)または拒否(deny)**します。
acl:
- group: commerce-operators
privileges: jcr:read, jcr:write
effect: allow
- user: anonymous
privileges: [jcr:all]
effect: deny
- 付与先は
group/user/principalのいずれか 1 つ privilegesはjcr:read、jcr:write、jcr:allなどの JCR 権限effectはallowまたはdeny
ACL は、Content Browser のインスペクター(権限)からも、プロビジョニングの nodes からも設定できます。
非対話の実行と runAs
対話的なサインインを伴わない実行コンテキストは、既定で**匿名(ゲスト)**として動きます。たとえば次のものです。
/content/public配下の公開エンドポイント(未認証で到達できる)- BPM エンジンが実行するサービスタスク/タスクリスナー/実行リスナー(エンジンスレッドにユーザーの識別情報がない)
- EIP のタイマー起動ルートなど、リクエストに紐づかない処理
匿名は、anonymous を deny した保護リソース(連携の秘密情報を含む /etc/... の設定や、サーバーサイドの連携スクリプトなど)を読めません。これらの処理が保護リソースに触れると AccessDenied になり、設定やスクリプトそのものを読み込めずに失敗します。
解決策は、サービスアカウントとして実行すること(runAs)です。指定方法は実行コンテキストごとに異なります。
| 実行コンテキスト | runAs の指定 |
|---|---|
| BPM(サービスタスク/タスク・実行リスナー) | CmsDelegate の runAs フィールドにサービスアカウント名を指定 |
EIP(cms: スクリプトなどのステップ) |
runAs ヘッダを設定(多くは専用の特権 direct: ルートで付与) |
| 公開エンドポイント | 秘密情報を直接読まず、特権 direct: ルートへ委譲して結果(判定)だけを受け取る |
公開エンドポイント自体は匿名のまま(最小権限)にし、秘密の読み取りや署名検証はサービスアカウントの特権ルートに分離するのが安全です。
運用のヒント
- サービスアカウントには、通常のグループへ追加し、そのグループにノード権限を付与してアクセスを与えます。
- パスワードの変更・リセットは Identity Manager から行います(プロビジョニングでは既存のパスワードは変更されません)。
- 認証は SAML 2.0(SP / IdP をゼロ設定で同梱)に基づきます。