5.4 KiB
KẾ HOẠCH 14 — RBAC & Quản trị đa dự án (Multi-tenant governance)
Status 2026-07-06: � core implemented + tested (harness-owned). RBAC decision engine đã dời/đặt trong harness:
.specify/scripts/bash/rbac-check.py(role×resource:action, scope org/project, deny-by-default fail-closed, tenant isolation, sensitive-settings-write chỉ org-admin, SoD chống tự duyệt). Test.specify/tests/phase-rbac-tests.sh10/0 (WSL), nối CI (phase-rbac). Còn lại: ánh xạ IdP claim → role thật (nối 07-C4), enforcement point trong web app Control Plane (Plan-13), audit mọi quyết định RBAC vào H5, quản lý role qua UI.Nhãn trạng thái: xem legend ở
CASAN_BACKLOG_STATUS.md. Phụ thuộc: 07 C4 (IdP/OIDC — nguồn danh tính) · 13 (Control Plane tiêu thụ RBAC) · 06 (đa dự án — phạm vi tenant). Chặn mềm phần quản lý của 13.
1. Bối cảnh
- Đã có: IdP/OIDC JWT (RS256) chứng minh
sub/role/exp+ bind request (Plan-07 C4);reviewers.registry;project-registry.json(project + domain). - Chưa có: ma trận quyền (role × resource × action), phạm vi tenant (org → project), kế thừa quyền, và điểm thực thi (enforcement point) thống nhất.
2. Nguyên tắc
- Least privilege mặc định: không role → không quyền; quyền phải cấp tường minh.
- Deny-by-default + fail-closed: thiếu/không rõ quyền → DENY, không "cho tạm".
- Tenant isolation: dữ liệu/domain/telemetry của dự án A không lộ sang dự án B.
- Separation of Duties (SoD): người đề xuất ≠ người duyệt (kế thừa C4).
- Mọi quyết định RBAC ghi audit (H5): ai, tài nguyên nào, cho/từ chối, vì sao.
- Nguồn danh tính là IdP (C4), không tự chế: RBAC chỉ ánh xạ identity→quyền.
3. Mô hình quyền (đề xuất)
flowchart LR
ORG["Org (tenant gốc)"] --> PROJ["Project (OKR, dự án 2…)"]
PROJ --> RES["Resource: settings / telemetry / approval / kill-switch / domain-data"]
ROLE["Role: org-admin · project-admin · approver · operator · viewer · auditor"] --> PERM{"Permission<br/>role × resource × action"}
RES --> PERM
PERM --> ENF["Enforcement point<br/>(Control-Plane API + harness gate)"]
ENF --> AUDIT["H5 audit"]
style ENF fill:#d0e8ff,stroke:#2c3e91,stroke-width:2px
style AUDIT fill:#fff3cd,stroke:#8a6d3b,stroke-width:2px
3.1 Role gợi ý
| Role | Xem | Đổi setting | Duyệt | Kill-switch | Phạm vi |
|---|---|---|---|---|---|
| org-admin | ✓ | ✓ | ✓ | ✓ | toàn org |
| project-admin | ✓ | ✓ (không nhạy cảm) | – | project scope | 1 project |
| approver | ✓ | – | ✓ | – | được gán |
| operator | ✓ | – | – | engage (báo cáo) | 1 project |
| viewer | ✓ | – | – | – | được gán |
| auditor | ✓ (+audit log) | – | – | – | toàn org (read) |
4. Tasks
| Task | Việc | File/Đối tượng | Verify | Done |
|---|---|---|---|---|
| 14.1 | Định nghĩa schema rbac-policy.yaml (role × resource × action + scope) |
mới config/rbac-policy.yaml |
policy load hợp lệ | schema chốt |
| 14.2 | Ánh xạ IdP claim (role, groups) → role RBAC |
nối Plan-07 C4 | JWT role → RBAC role đúng | mapping chạy |
| 14.3 | Enforcement point thống nhất: mọi API/gate gọi rbac-check trước hành động |
mới rbac-check.sh/service |
thiếu quyền → DENY fail-closed | 1 điểm thực thi |
| 14.4 | Tenant isolation: telemetry/domain-data theo project scope | Control-Plane API | user project A không đọc B | cách ly tenant |
| 14.5 | SoD: người đề xuất ≠ người duyệt (kế thừa C4) | governance-check | tự duyệt đề xuất của mình → DENY | SoD giữ |
| 14.6 | Ghi audit mọi quyết định RBAC (allow/deny + reason) | H5 audit | deny có bản ghi truy vết | audit đầy đủ |
| 14.7 | Quản lý role/gán quyền qua Control Plane (chỉ org-admin) | Plan-13 UI | non-admin đổi role → DENY | quản trị quyền |
5. Red-team / test
| Test | Kỳ vọng |
|---|---|
adv-viewer-writes-setting |
DENY |
adv-cross-tenant-read (project A đọc B) |
DENY |
adv-self-approve (đề xuất tự duyệt) |
DENY (SoD) |
adv-missing-role-defaults-allow (thiếu role vẫn cho) |
DENY (deny-by-default) |
adv-forged-role-claim (JWT role giả) |
DENY (verify chữ ký IdP — C4) |
benign-role-grant-roundtrip (org-admin gán role hợp lệ) |
PASS + audit |
6. Tiêu chí HOÀN THÀNH
rbac-policy.yaml+ enforcement point thống nhất, deny-by-default fail-closed.- IdP claim → RBAC role; role giả bị chặn (verify qua C4).
- Tenant isolation: không rò dữ liệu chéo dự án.
- SoD giữ; mọi quyết định RBAC có audit H5.
- Control Plane (Plan-13) dùng RBAC cho toàn bộ hành động quản lý.
- Red-team mục 5 xanh; core harness 218/0 không tụt.
7. Ghi chú trung thực
- [mới] — hiện chỉ có approval-identity (C4), chưa có mô hình quyền đầy đủ.
- RBAC không thay IdP; nó ánh xạ identity (đã verify) → quyền, thực thi fail-closed.
Liên quan: CASAN_PLAN_07_PRODUCTION_HARDENING.md (C4 IdP/OIDC — nguồn danh tính) · CASAN_PLAN_13_CONTROL_PLANE.md (tiêu thụ RBAC) · CASAN_PLAN_06_ONBOARD.md (đa dự án → phạm vi tenant).