プロビジョニング
プロビジョニングは、ユーザー・グループ・ロール・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 リスト)と effect(allow / deny)を持ちます。
注意点
- 既存ユーザーのパスワードや属性は再デプロイで変更されません。変更は Identity Manager から行ってください。
jcr.yml#defaultNodesはブート時の初回作成のみで、アイデンティティは作成できません。再現性のある作成にはプロビジョニング記述子を使います。