プロビジョニング

プロビジョニングは、ユーザー・グループ・ロール・ACL・ノードを、宣言的な記述(YAML)から再現性をもって作成する仕組みです。Session.deploy() の一部として、各ワークスペースの起動時に実行され、冪等(何度実行しても同じ結果) です。

ディレクトリ構成

<workspace>/etc/jcr/
├── jcr.yml         # リポジトリのブートストラップ(defaultNodes, security)
├── deploy/         # リポジトリへ反映されるファイルコンテンツ
└── provisioning/   # 宣言的なアイデンティティ・ACL 記述子
    ├── commerce.yml   # アプリごとに 1 ファイル
    └── ...

provisioning/ 内のすべての *.yml / *.yaml が辞書順で読み込まれます。アプリごとにファイルを分けられるため、共有ファイルを編集せずに独立して追加できます。

適用の順序と冪等性

次の順で、相互参照が解決できるように段階適用されます。

namespaces → roles → groups → users → nodes

  • namespaces — 不在のときだけ登録。別の値で既にバインド済みなら、上書きせず競合として報告
  • principals(users/groups/roles) — 不在のときだけ作成。パスワードはリセットされません。既存は変更されません
  • ACE — 同等のエントリが無いときだけ追加

適用先のワークスペース

セクション 適用先
namespaces 現在のワークスペース
roles / groups / users system(グローバルなアイデンティティストア)
nodes / acl 現在のワークスペース

記述例

namespaces

namespaces:
  - prefix: acme
    uri: http://www.example.com/acme/1.0

roles / groups

roles:
  - id: administrator
    displayName: Administrators
    description: Built-in administrators

groups:
  - id: commerce-operators
    displayName: Commerce Operators

id は階層を持てます(例: ops/readonly)。親を子より先に宣言してください。

users

users:
  - id: alice
    password: changeit
    displayName: Alice Smith
    mail: alice@example.com
    enabled: true
    roles: [administrator]
    memberOf: [commerce-operators]

  - id: commerce-service-user
    service: true
    displayName: Commerce Service
    memberOf: [commerce-service-group]

service: trueサービスアカウントで、パスワードを持たず、サインインできません(連携処理が runAs で利用)。

nodes と acl

nodes:
  - path: /content/commerce
    primaryType: nt:folder
    acl:
      - group: commerce-operators
        privileges: jcr:read, jcr:write
        effect: allow
      - user: anonymous
        privileges: [jcr:all]
        effect: deny

ACL の各エントリは、付与先を group / user / principal のいずれか 1 つで指定し、privileges(カンマ区切り文字列または YAML リスト)と effectallow / deny)を持ちます。

注意点

  • 既存ユーザーのパスワードや属性は再デプロイで変更されません。変更は Identity Manager から行ってください。
  • jcr.yml#defaultNodes はブート時の初回作成のみで、アイデンティティは作成できません。再現性のある作成にはプロビジョニング記述子を使います。