ユーザー・ロール・権限

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 つ
  • privilegesjcr:readjcr:writejcr:all などの JCR 権限
  • effectallow または deny

ACL は、Content Browser のインスペクター(権限)からも、プロビジョニングの nodes からも設定できます。

非対話の実行と runAs

対話的なサインインを伴わない実行コンテキストは、既定で**匿名(ゲスト)**として動きます。たとえば次のものです。

  • /content/public 配下の公開エンドポイント(未認証で到達できる)
  • BPM エンジンが実行するサービスタスク/タスクリスナー/実行リスナー(エンジンスレッドにユーザーの識別情報がない)
  • EIP のタイマー起動ルートなど、リクエストに紐づかない処理

匿名は、anonymousdeny した保護リソース(連携の秘密情報を含む /etc/... の設定や、サーバーサイドの連携スクリプトなど)を読めません。これらの処理が保護リソースに触れると AccessDenied になり、設定やスクリプトそのものを読み込めずに失敗します。

解決策は、サービスアカウントとして実行すること(runAs)です。指定方法は実行コンテキストごとに異なります。

実行コンテキスト runAs の指定
BPM(サービスタスク/タスク・実行リスナー) CmsDelegaterunAs フィールドにサービスアカウント名を指定
EIP(cms: スクリプトなどのステップ) runAs ヘッダを設定(多くは専用の特権 direct: ルートで付与)
公開エンドポイント 秘密情報を直接読まず、特権 direct: ルートへ委譲して結果(判定)だけを受け取る

公開エンドポイント自体は匿名のまま(最小権限)にし、秘密の読み取りや署名検証はサービスアカウントの特権ルートに分離するのが安全です。

運用のヒント

  • サービスアカウントには、通常のグループへ追加し、そのグループにノード権限を付与してアクセスを与えます。
  • パスワードの変更・リセットは Identity Manager から行います(プロビジョニングでは既存のパスワードは変更されません)。
  • 認証は SAML 2.0(SP / IdP をゼロ設定で同梱)に基づきます。