Trục 5: Quy trình thực hiện
Onboarding cho DNNVV
Việc gia nhập Git-native Compliance của DNNVV tuân theo một lộ trình từng bước:
- Khởi tạo kho Git - Cấu trúc với thư mục
.gitcover/, cấu hình V7GUID - Chọn danh mục OSCAL - Đường cơ sở GoBD, các mô-đun BSI hoặc hồ sơ riêng
- Kích hoạt OPA-Policies - Pre-receive-Hooks để xác thực trước khi commit
- Thiết lập ký GPG - Mỗi tác nhân một cặp khóa GPG
- Bắt đầu chuỗi chứng từ - Cấp các V7GUID đầu tiên, bắt đầu nối tiếp prev-hash
Dành cho doanh nhân từ mức hoạt động phụ
Việc bắt đầu có thể bắt đầu bằng một câu chuyện rất đơn giản: GCDMS để lưu trữ chứng từ, GCPN cho chuỗi bằng chứng. Sau đó mở rộng: OSCAL-Policies, xác thực OPA, Multi-Tenant.
Onboarding tương tác: “Thành phố Tuân thủ”
Thay vì bảng câu hỏi cổ điển, quá trình onboarding diễn ra như một cấu trúc mô-đun theo khái niệm một thành phố trên nền tấm Lego. Mỗi quyết định kiến trúc và mỗi yêu cầu chuyên môn tương ứng với một viên gạch hoặc một cụm công trình (bộ Lego), được lưu và đánh phiên bản như một mô-đun có cấu trúc trong kho Git mặc định mới được khởi tạo.
Phép loại suy cho người dùng:
- Tấm nền: Kho Git trống, vừa được tạo cho tenant trong hạ tầng của họ. Nó cung cấp khung chuẩn hóa (các núm gắn), trên đó mọi thứ được gắn vào.
- Các viên gạch: Cấu hình mô-đun và tệp dịch vụ. Chỉ khi một viên gạch khớp vào (Git-Commit), chức năng hoặc kiểm tra tuân thủ tương ứng mới được kích hoạt.
Giai đoạn 1 - Trải tấm nền (Khởi tạo & Danh tính):
Hệ thống tự động tạo kho mặc định cho tenant. Trợ lý onboarding xác định danh tính của doanh nghiệp. Dữ liệu được lưu có cấu trúc trong kho 'TOP' (Tenant Organization Profile) - Git-Commit đầu tiên đã là quy trình tuân thủ có thể kiểm toán đầu tiên. Ngoài ra: Tenants tất nhiên cũng có thể được tổ chức theo thứ bậc, giống như các cấu trúc doanh nghiệp mà họ thuộc về.
| Thành phần | Tương ứng kỹ thuật | Mục đích |
|---|---|---|
| Tấm nền | git init --object-format=sha256 |
Cơ sở của mọi hoạt động tenant trong kho Git 'TOP' và thư mục |
| Tòa thị chính | ./.gitcover |
Thư mục dot GitCover, nơi lưu Tenant Dictionaries và Configurations |
Giai đoạn 2 - Đi dây hạ tầng (Mạng cung cấp):
Trợ lý ghi nhận bối cảnh CNTT: máy tính xách tay tại nơi làm việc, file-server, ưu tiên đám mây hoặc hạ tầng lai. Các tham số như kết nối Internet, miền, đường dẫn lưu trữ, v.v. được đưa vào thông tin hạ tầng và chuẩn bị các đường dẫn cho các kết nối chéo (others.json).
Giai đoạn 3 - Dựng tòa nhà (Phạm vi chuyên môn):
Người dùng quyết định theo mô-đun những lĩnh vực quy định mà thành phố của mình sẽ bảo vệ:
| Thành phần | Phạm vi | Hành động |
|---|---|---|
| Quảng trường (cơ sở GoBD/AO) | Bắt buộc với mọi DNNVV - tài liệu quy trình | ví dụ: kích hoạt mô-đun & thư mục /compliance/gobd/ |
| Ngân hàng & Quầy thu ngân (Kế toán tài chính) | Ghi nhật ký, sổ cái, giao diện ngân hàng | ví dụ: kích hoạt mô-đun & thư mục /finance/journal/ và /finance/ledgers/ |
| Cổng xưởng (An ninh/NIS2) | An ninh CNTT mở rộng tùy chọn và nghĩa vụ báo cáo | ví dụ: kích hoạt mô-đun & thư mục /compliance/nis2/ |
Người dùng không bao giờ nhìn thấy tệp cấu hình hoặc mã. Vì mỗi bước ngay lập tức tạo ra một Git-Commit sạch, hệ thống được ghi chép hoàn toàn có thể kiểm toán theo GoBD và AO ngay từ phút đầu tiên.
Cô lập tenant và kiểm soát truy cập
OIDC-Claims và others.json
Việc liên kết OIDC-Claims với others.json là giải pháp lý tưởng cho môi trường tuân thủ đa tenant, an toàn với người không chuyên. Trong others.json tập hợp:
- Tuyến đường chuẩn tắc đến các kho Git riêng của tenant
- Kết nối chéo đến các kho Git của tenant khác, nếu tenant là thành viên của một nhóm
Truy cập được kiểm soát thông qua OIDC-Claims (vai trò và custom claims như tenant_id, org_unit_id và tư cách thành viên nhóm). Một Inlet-Pipeline đọc others.json theo claim của người dùng và chèn các đường dẫn được phép dưới dạng system prompt:
Bạn là GitCover Agent cho tenant X. Bạn chỉ có quyền truy cập vào các kho sau: [Đường dẫn 1], [Đường dẫn 2]. Không thực thi lệnh nào bên ngoài các thư mục này.
Mô hình claim hai cấp cho quyền truy cập PII
Để truy cập dữ liệu cá nhân (PII), GCBoK định nghĩa một hệ thống phân cấp claim với hai cấp (xem Kỹ thuật: Git như IdP:
| Claim | Cấp | Mục đích | Ví dụ |
|---|---|---|---|
tenant_id |
1. Pháp lý | Pháp nhân (bên kiểm soát dữ liệu theo DSGVO) | 0197a3b2-f3c0-7b00-8001-000000000042 (ORG-1) |
org_unit_id |
2. Tổ chức | PMO / Division / Department / Location (≈ AD OU) | ORG-1-Portfolio, ORG-2-IT |
others.json ánh xạ các claim này sang đường dẫn kho:
{
"tenant_id": "0197a3b2-f3c0-7b00-8001-000000000042",
"org_unit_id": "ORG-1-Portfolio",
"allowed_repos": [
"TOP",
"PII/ORG-1-Portfolio"
]
}
Một người dùng có org_unit_id = ORG-1-Portfolio được cấp quyền truy cập vào PII/ORG-1-Portfolio, nhưng không vào PII/ORG-2-IT — ngay cả khi có cùng tenant_id. Điều này thực hiện nguyên tắc đặc quyền tối thiểu (NIS2 Art. 21) ở cấp kho.
Đối với người dùng cuối, bộ máy bảo mật này vẫn vô hình. Họ đăng nhập, thấy môi trường làm việc quen thuộc và AI tự động biết nơi nó được phép hoạt động.
Thu thập dữ liệu hỗ trợ AI thông qua Formular-Bridging
Giao diện chat phù hợp cho ngữ cảnh và phân tích, không phù hợp để thu thập kiểu dữ liệu nghiêm ngặt (IBAN, mã bưu chính, lược đồ OSCAL). Do đó GCBoK khuyến nghị Formular-Bridging:
- AI nhận biết nhu cầu: Người dùng nói “Tôi muốn thêm một địa điểm kinh doanh mới.”
- URL biểu mẫu động: AI xuất ra một liên kết đến giao diện nhập liệu web đã được xác thực (Blazor WASM/PWA), được liên kết với quản lý phiên và người dùng.
- Nhập liệu được đóng gói: Người dùng điền biểu mẫu - được xác thực nghiêm ngặt trước khi lưu.
- Ghi trực tiếp vào Git: Biểu mẫu ghi kết quả dưới dạng tệp có cấu trúc trực tiếp vào working directory của kho tenant và kích hoạt commit.
- AI tiếp quản lại: MCP-Server báo “Tệp đã cập nhật”, AI xác nhận trong chat.
Ưu điểm: Xác thực trước khi lưu bảo vệ Single Source of Truth. LLM không thao túng quá trình ghi. Việc xác thực Git-Hook/OPA được kích hoạt ngay lập tức.
Cấu trúc thư mục .gitcover/
Thư mục .gitcover/ trong root của một kho GitCover là kho lưu trữ trung tâm cho mọi hiện vật không phải mã. Nó phục vụ an toàn kiểm toán, tuân thủ (GoBD/AO) và duy trì audit trail.
Bố cục thư mục
.gitcover/
├── issues/ # Gitea-Issues als .gc.md
├── projects/ # Projekt-Management-Daten
├── time_tracking/ # Zeiterfassung und Aufwandsnachweise
├── workflows/ # Workflow-Zustände und Genehmigungen
├── compliance/
│ ├── oscals/ # OSCAL-Dokumente (System Security Plans)
│ ├── opa/ # OPA-Regeln (Rego-Policies)
│ └── hooks/ # Git-Hooks für Automatisierung
├── audit/
│ ├── signatures/ # Kryptografische Signaturen
│ ├── timestamps/ # Zeitstempel (ELSTER/Bundesanzeiger)
│ └── logs/ # Protokolle
└── README.md # Dokumentation der Struktur
Quy ước tên tệp
Định dạng chung: {YYMMDD}_{human-readable-key}_{Beschreibung}.gc.md
| Loại hiện vật | Ví dụ | Lý do |
|---|---|---|
| Issue | 261029_#123_Bugfix-Login.gc.md |
Ngày để sắp xếp, # để nhận diện |
| Dự án | 261029_Projekt-X.gc.md |
Duy nhất, có thể sắp xếp theo thời gian |
| Ghi thời gian | 261029_2026-06-29_Axel-D.gc.md |
Ngày và người dùng ở dạng rõ ràng |
| Sidecar (PDF/DOCX) | Rechnung_2026.pdf.gc.md |
Siêu dữ liệu cho tài liệu gốc |
V7GUID và docUid nằm trong hiện vật dữ liệu, không nằm trong tên tệp; tên tệp mang chữ ký thời gian {YYMMDD}.
Hiện vật dữ liệu (.gc.md)
Hiện vật dữ liệu tuân theo mẫu “Con người đọc được trước, JSON sau cùng” (JSON-First, không có YAML-Frontmatter):
{
"docUid": "018e312f-3e4f-7000-8000-000000000000",
"v7guid": "018e312f-3e4f-7000-8000-000000000000",
"key": "#123",
"type": "issue",
"title": "Bugfix: Login-Modul",
"original_source": "Gitea",
"original_repo_hash": "a1b2c3d4e5f6...",
"related_commits": ["abc123", "def456"],
"related_elements": {
"project": "Projekt-X",
"milestone": "v1.0"
},
"compliance": {
"gobd_relevant": true,
"audit_trail": true,
"signature": "GPG-Signatur-Hash",
"timestamp": "ELSTER-2026-06-29-120000"
}
}
Tự động hóa bằng Git-Hooks và Webhooks
Các repo GitCover được tự động cấu hình với hooks/webhooks khi init hoặc Tenant Onboarding:
post-commit: Cập nhật.gitcover/khi có commit mớipre-push: Xác thực.gitcover/trước khi push- Webhooks: Tạo issue, thay đổi dự án, ghi thời gian - mỗi sự kiện kích hoạt xuất dưới dạng
.gc.md - Compliance-Claim: Kích hoạt ngay các cơ chế OSCAL/OPA
Việc đánh phiên bản các hooks/webhooks này cũng diễn ra qua Git, nhờ đó các thay đổi có thể truy vết và kiểm toán (tự tham chiếu, có phiên bản, an toàn kiểm toán). Bản thân các hook có thể là hiện vật mã có phiên bản, nằm trong .gitcover/hooks/ và được cập nhật khi cần, đồng thời được ghi chép tuân thủ GoBD hoặc NIS2.
Các quy định riêng của HITL - Quy ước và quy tắc cho tác nhân
Ngoài tài liệu tuân thủ được đánh phiên bản, mỗi người làm việc còn duy trì các quy định cá nhân của mình - tức cách họ muốn tự làm việc, phân định ranh giới và ưu tiên. Lớp này là riêng tư và được bảo vệ: nó cục bộ và không được đánh phiên bản (thông thường nằm trong một thư mục bị loại trừ bởi .gitignore trong ngữ cảnh làm việc riêng, mẫu: projections/). Do đó nó không phải là một phần của kho tài liệu tuân thủ và cũng không thuộc về các kho, issue, pull request, báo cáo hoặc hiển thị đã commit.
Mục đích: Nó là nguyên liệu đầu vào cho những gì được ghi chép - cho tài liệu quyết định (ADR), cho mẫu, cho việc cân nhắc ưu tiên các dự định và cho việc thiết kế công cụ. Kết quả được ghi chép, không phải đánh giá phía sau.
Quy tắc cho tác nhân (bắt buộc):
- Tuân thủ - các quy định định hình kỳ vọng, giọng điệu, ranh giới và ưu tiên; chúng được đọc và tuân theo.
- Không ghi chép, không trích dẫn - không có nội dung nào từ lớp này trong văn bản liền mạch, mã, tài liệu quyết định, chứng từ, ticket, báo cáo hoặc hiển thị, trừ khi HITL cho phép rõ ràng việc ghi chép.
- Không công bố - lớp này vẫn cục bộ; đối với ví dụ trong cộng đồng, OSS hoặc tài liệu đào tạo, nó được ẩn danh hóa và chỉ được mô tả như mẫu.
- Giới hạn bằng chứng - chuỗi chứng từ được đánh phiên bản tham chiếu tác động của một quy định (ví dụ “phân loại theo các quy định của HITL”), không bao giờ tham chiếu nguyên văn được bảo vệ của nó.
GitCover-Sidecars (.gc.md)
Một GitCover-Sidecar là tệp siêu dữ liệu *.gc.md được đặt cạnh một tài liệu gốc kỹ thuật số - ví dụ Rechnung_2026.pdf có Rechnung_2026.pdf.gc.md trong cùng thư mục. Sidecar mang siêu dữ liệu mà Git không thể lưu bên trong một tệp nhị phân (PDF, DOCX, EML, hình ảnh) và nhờ đó neo bản gốc vào chuỗi chứng từ và GCDMS.
Thông tin tối thiểu
Mỗi sidecar bắt buộc chứa:
sha256- mã băm SHA-256 của tài liệu gốc kỹ thuật số (bằng chứng toàn vẹn).
Ngoài ra, nó thường chứa danh tính, phân loại và vị trí (xem mẫu tại Trục 6: Mẫu).
Cấp DocID
Nếu tài liệu chưa được quản lý trong DMS, một DocID mới được tạo. DocID là uuidv7 thuần - định danh thể hiện cụ thể (Object ID) của dual identifier, thứ hiện thực hóa từng tài liệu riêng lẻ (xem Trục 2: Khái niệm). Do đó nó cần được phân biệt với v7guid đã được phân loại, vốn mã hóa ngữ cảnh chuyên môn (lớp, tenant, lĩnh vực).
DocID được tạo từ một dấu thời gian, nhờ đó nó gắn với thời gian và có thể sắp xếp:
- Công cụ: Một công cụ sidecar tạo UUIDv7 từ một đối số TimeStamp làm DocID.
- Nguồn mặc định: dấu thời gian của tệp (mtime) của tài liệu gốc.
- Nguồn chuyên môn (nếu có): Nếu tên tệp hoặc nội dung cung cấp một ngày có ý nghĩa chuyên môn (ví dụ ngày hóa đơn, email hoặc quyết định), ngày đó được dùng thay cho mtime - nhờ đó DocID gắn với ngày hình thành của tài liệu.
Cả hai định danh - DocID (uuidv7) và v7guid đã phân loại - đều được ghi trong sidecar và được liên kết qua composite_key ({v7guid}:{uuidv7}).
Liên hệ với V7GUID và Registry
- V7GUID: Khối
v7g_taxonomyphân loại tài liệu thông quav7guidđã phân loại vào hệ thống phân cấp doanh nghiệp sáu cấp và lĩnh vực tenant (xem Trục 2: Khái niệm). - Registry: Khối
locationsghi lại vị trí lưu trữ vật lý (đường dẫn UNC, khoảng thời gian hiệu lực). Các định danh tenant đã đăng ký được quản lý trong sổ đăng ký tenant trung tâm (Zentrales Tenant-Register, Trục 2).
Cấu trúc (ví dụ)
# GitCover Sidecar - Rechnung_2026.pdf
**SHA-256:** `7d4e2f...`
**Tenant:** ORG-1
**Kategorie:** Finanzen und Buchführung
**Sphäre:** ideell
```json
{
"$schema": "https://gitcover.org/schemas/v7g-sidecar-2.0.schema.json",
"docUid": "0197a3b2-f3c0-7b00-8001-000000000042",
"sha256": "7d4e2f...",
"original_filename": "Rechnung_2026.pdf",
"locations": [
{ "unc_path": "./ORG-1/FY2026/Rechnung_2026.pdf", "from": "260506", "to": null, "note": "Primärspeicherort" }
],
"v7g_taxonomy": [
{ "v7guid": "0197a3b2-...-8001-...", "taxonomy": "ORG-1/Financial", "valid_from": "260506", "valid_to": null }
],
"verification": { "verified_by": "auto", "method": "sha256_file", "intact": true }
}
```
Lưu trữ issue: từ Gitea-DB sang cơ sở dữ kiện Git
Vấn đề
Gitea-Issues là các bản ghi cơ sở dữ liệu - không phải đối tượng Git gốc. Chúng không được đánh phiên bản và không thể tái tạo nếu mất cơ sở dữ liệu Gitea. Commit chỉ tham chiếu issue bằng văn bản (Fixes #123); tham chiếu này không được Git diễn giải.
Giải pháp: Xuất tự động dưới dạng .gc.md
Quy trình từ cơ sở dữ liệu Gitea đến cơ sở dữ kiện an toàn kiểm toán:
- Tạo Gitea-Issue → Webhook kích hoạt xuất
- Xuất dưới dạng .gc.md → Lưu vào
.gitcover/issues/ - Trích xuất siêu dữ liệu → UUID, mã băm, chữ ký
- Git-Commit có chữ ký →
git commit -S - Xác thực OSCAL/OPA → Kiểm tra tuân thủ
- Dấu thời gian → Tích hợp ELSTER/Bundesanzeiger (nếu cần)
Ví dụ quy tắc OPA để xác thực issue
package gcbok.compliance
violation[msg] {
input.path == "issues"
file := input.files[_]
not startswith(file.name, "018") # UUIDv7-Prüfung
msg := sprintf("Issue %s hat keine gueltige UUIDv7 im Dateinamen", [file.name])
}
Tuân thủ GoBD/AO
| Yêu cầu GoBD | Triển khai trong .gitcover/ |
|---|---|
| Khả năng truy vết | Mọi thay đổi được ghi log trong .gitcover/audit/logs/ |
| Tính bất biến | Các tệp .gc.md không bao giờ bị ghi đè mà được đánh phiên bản |
| Nghĩa vụ lưu trữ | 10 năm (DE) - .gitcover/ là kho lưu trữ trung tâm |
| Chức năng chứng từ | Các tệp .gc.md là chứng từ kỹ thuật số |
| Khả năng kiểm tra | Chữ ký và dấu thời gian cho phép xác thực pháp chứng |
Sẵn sàng kiểm toán
Sẵn sàng kiểm toán nghĩa là: mọi cuộc kiểm toán có thể diễn ra bất cứ lúc nào - không cần chuẩn bị hậu kỳ.
| Điều kiện tiên quyết | Đáp ứng Git-native |
|---|---|
| Audit-Trail đầy đủ | Git-History (commit-log) |
| Danh tính có thể chứng minh | Chữ ký GPG |
| Khả năng sắp xếp theo thời gian | Dấu thời gian V7GUID |
| Bằng chứng máy đọc được | OSCAL-Assessment-Results |
| Tuân thủ chính sách | Kết quả xác thực OPA |
Luận điểm: Pháp chứng là kho Git, HTML chỉ là trình bày Gói kiểm tra HTML (website kiểm toán, báo cáo được tạo) là một dẫn xuất để con người dễ đọc. Giá trị chứng cứ pháp chứng nằm hoàn toàn trong chính kho Git: lịch sử commit bất biến, commit được ký GPG, chuỗi chứng từ V7GUID, registries/dictionaries
.gitcover/ở định dạng JSON/JSONL. Trong một cuộc kiểm toán 10 năm sau, chỉ cầngit clone(hoặc giải néngit bundle) — không cần hạ tầng web, không cần cơ sở dữ liệu, không cần dịch vụ đang chạy. Điều này tương ứng với Schema-Tiering (xem Mẫu: Lược đồ V7GUID) và dẫn xuấtgcbok-audit-evidence-docs/docs/02-audit-website-als-pruefungsartefakt.
Kết toán năm GoBD
Kết toán năm GoBD với Git-native Compliance:
- Đóng kỳ - đóng băng nhánh Git
FY2026(tag) - Xác thực chuỗi chứng từ - kiểm tra nối tiếp V7GUID (script)
- Tạo OSCAL-Assessment-Results - tự động từ xác thực OPA
- Cấp niêm phong GPG - commit kết thúc với chữ ký GF
- Lưu trữ - container
.gc.zip,gc-dms pack
Phân tích rủi ro NIS2
Phân tích rủi ro NIS2 trên cơ sở Git:
- Kiểm kê tài sản - kho Git làm sổ đăng ký tài sản
- Nhận diện rủi ro - OPA-Policies cho các kịch bản đe dọa
- Đánh giá - phân loại V7GUID cho các hạng mục rủi ro
- Giảm thiểu - Pre-receive-Hooks để thực thi chính sách
- Báo cáo - OSCAL-Assessment-Results làm bằng chứng NIS2
Xử lý sự cố an ninh (Incident Response)
Nguyên tắc: chứng minh trước, đánh giá sau. Một incident report là hiện vật Git có lịch sử thay đổi — cả đánh giá sai của chính mình cũng phải nằm trong đó. Phát biểu có cơ sở không bao giờ là “chúng ta an toàn”, mà là: “Đối với khoảng thời gian này, các hệ thống này và các mức log này, không có dấu hiệu bị khai thác — với giới hạn bằng chứng sau đây.”
Quy trình bảy bước
- Ghi nhận và phân loại. Điều gì đã biết (CVE, cảnh báo, quan sát), những hệ thống và dịch vụ nào nằm trong phạm vi ảnh hưởng, cần xem xét khoảng thời gian nào? Ghi lại nguyên nhân kích hoạt và dấu thời gian.
- Xác định mức độ ảnh hưởng qua kiểm kê. Không phải “chúng tôi dùng sản phẩm X”, mà là: SAPI nào, dịch vụ nào, endpoint nào bị lộ? Đường dẫn nội bộ, cổng chỉ LAN và các site bị bỏ rơi cần được chỉ ra riêng.
- Dẫn chứng bản vá và cấu hình. Phiên bản gói và thời gian chạy (khởi động lại dịch vụ), tính toàn vẹn tệp, hiệu lực của cấu hình. Với mỗi phát biểu về config, cần đối chứng: Tệp có tồn tại, có tăng trưởng, có xoay vòng không?
- Đánh giá log qua nhiều lớp. Một lớp không bao giờ trả lời mọi câu hỏi; mỗi lớp có điểm mù phải nêu trong báo cáo. Ghi lại phạm vi tìm kiếm (đường dẫn, độ sâu, khung thời gian) — một kết quả phủ định không có phạm vi tìm kiếm không phải là kết quả.
- Đánh giá và kiểm tra nghĩa vụ báo cáo. NIS2 Art. 23 yêu cầu khi có sự cố an ninh nghiêm trọng: cảnh báo sớm (24 giờ), báo cáo (72 giờ) và báo cáo kết thúc (một tháng). Quyết định “có nghĩa vụ báo cáo / không có nghĩa vụ báo cáo” phải được lý giải, không được đưa ra âm thầm.
- Bảo đảm biện pháp và bằng chứng. Biện pháp tức thời, tăng cường bảo vệ, gỡ bỏ dịch vụ bị bỏ rơi. Bảo đảm bằng chứng trước lần xoay vòng tiếp theo dưới dạng lưu trữ: nén, chủ sở hữu
root, quyền640, checksum trong báo cáo. - Theo dõi sau. Lessons Learned, biện pháp thành task có liên kết control, phiên bản báo cáo có lịch sử thay đổi. Các phát hiện sai được sửa và ghi chép như một bản đính chính.
Các lớp log và điểm mù của chúng
| Lớp | Trả lời | Điểm mù |
|---|---|---|
| Truy cập proxy/web server | Yêu cầu, mã trạng thái, kích thước body, nguồn client | Không có nội dung; xoay vòng giới hạn khả năng nhìn lại |
| Log ứng dụng | Sự kiện nội bộ: lỗi, cảnh báo, đăng nhập | Ở mức info không có truy cập; có thể có đường dẫn fallback |
| Thời gian chạy ngôn ngữ script (FPM) | Worker crash, cạn bộ nhớ, fatal error | Không có ngữ cảnh HTTP |
| Kernel / Journal | OOM-Kill, Segfault, Coredump | Không có ngữ nghĩa ứng dụng |
Bổ sung: trình quản lý gói (thời điểm vá), Fail2ban (bruteforce), lịch sử cấu hình (cái gì đã thay đổi khi nào). Chỉ sự kết hợp mới mang lại một phát biểu có giá trị.
Các phát hiện sai điển hình
| Phát hiện sai | Nguyên nhân | Đối chứng |
|---|---|---|
| “Ứng dụng không ghi log” | Thư mục dữ liệu ngoài phạm vi tìm kiếm; fallback của logger | Kiểm tra đường dẫn đã cấu hình và thư mục dữ liệu; chủ động kiểm tra xoay vòng |
| “Cổng bị đóng từ bên ngoài” | Quy tắc subnet chung cho phép mọi cổng | Đọc toàn bộ firewall: chính sách mặc định, allow chung, thứ tự |
| “Không tìm thấy gì, tức là không có gì xảy ra” | Sai hoặc thiếu lớp log | Làm theo bảng lớp, chứng minh từng kết quả phủ định |
| “Bản vá đã được cài” | Dịch vụ vẫn chạy với binary cũ | Bằng chứng thời gian chạy: thời điểm khởi động lại và phiên bản tiến trình |
| “POST lớn = exploit” | Backend đích không tồn tại | Kiểm tra mã trạng thái: 502/503 nghĩa là không có tiến trình PHP, không có thực thi |
Các hiện vật của chuỗi bằng chứng
| Hiện vật | Nội dung | Lưu trữ |
|---|---|---|
| Incident-Report | Tình hình đe dọa, mức độ ảnh hưởng, bằng chứng vá, đánh giá log, đánh giá, biện pháp, giới hạn bằng chứng, lịch sử thay đổi | Git-Repo của đơn vị vận hành, có phiên bản |
| Kho bằng chứng | Trích xuất cửa sổ log, checksum, chủ sở hữu/quyền, thời điểm tạo | Ngoài web root, root:root 640 |
| Task có liên kết control | Biện pháp, ưu tiên, trạng thái, bằng chứng (BSI DER.2.1, OPS.1.1.5; ISO/IEC 27001 A.5.24–A.5.28, A.8.15, A.8.16) |
Sổ đăng ký nhiệm vụ của tenant |
| Script kiểm tra/tái tạo | Các lệnh để có thể theo dõi độc lập các chỉ số | Phụ lục của báo cáo |
Liên hệ với các trục khác
- Cơ bản (Trục 1): Nghĩa vụ NIS2 và thời hạn báo cáo.
- Kỹ thuật (Trục 4): Danh tính có thể chứng minh và chữ ký cho báo cáo và bằng chứng (GPG, uuidV7, Git như IdP).
- Mẫu (Trục 6): Incident-Report tuân theo cùng cấu trúc như các báo cáo kiểm tra khác — Management Summary, phạm vi áp dụng, bằng chứng, đánh giá, biện pháp, phụ lục.
Tích hợp máy chủ AI trong LAN
Nguyên tắc kiến trúc
GCBoK mô tả một mô hình tham chiếu cho việc tích hợp một máy chủ AI headless trong LAN, cung cấp tập trung suy luận LLM và các tác nhân tuân thủ dựa trên RAG. Môi trường AI chạy trong một môi trường container cô lập (Rootless Podman), nhưng kết nối với các dịch vụ được cài đặt gốc trên host để suy luận và tìm kiếm web.
SSH Script Host (OSSH)
Đối với các tác vụ phức tạp (biên dịch mã, thao tác Git, kiểm tra tuân thủ) vượt ra ngoài sandbox container, tác nhân sử dụng một SSH Script Host - một lối thoát được kiểm soát, dựa trên khóa, sang hệ thống host:
- Tác nhân quyết định: “Chạy dotnet-build”
- Kênh SSH: kết nối mã hóa qua
id_rsa.pubđến người dùng host - Tiến trình gốc: lệnh được thực thi trong ngữ cảnh hệ điều hành thật
- Trả về luồng: stdout/stderr được trả về dưới dạng luồng văn bản
- Tác nhân phân tích: đầu ra trình biên dịch trong ngữ cảnh LLM
Điều kiện bảo mật: Khóa SSH được tạo trong container phải được nhập vào authorized_keys trên host. Giao tiếp diễn ra hoàn toàn qua các luồng dữ liệu chuẩn (stdin, stdout, stderr) - không truyền tệp.
Địa chỉ hóa đường dẫn nhất quán (FQN)
Để tránh không nhất quán đường dẫn giữa workstation, container và script host, các chia sẻ file-server được gắn tại các mount point giống hệt nhau trên mọi hệ thống. Tác nhân AI và nhà phát triển con người tham chiếu các đường dẫn tuyệt đối giống hệt nhau tại mọi thời điểm.
Khả năng đa thiết bị
Nhờ tập trung hóa trên máy chủ AI, nhiều thiết bị đầu cuối có thể truy cập song song vào cùng một môi trường:
- Nhà phát triển bắt đầu phân tích mã trên desktop
- Người đó theo dõi tiến độ của tác nhân theo thời gian thực trên smartphone qua VPN
- Không có chặn lẫn nhau - script host mở các tiến trình shell riêng, ngắn hạn
Share-Frontends: Nextcloud như frontend chỉ đọc
Phân chia vai trò
| Thành phần | Vai trò | Tuân thủ GCBoK |
|---|---|---|
| GCDMS | Registry và index cho hiện vật tuân thủ; bản gốc vẫn ở nơi lưu trữ, registry lưu SHA-256, object_id và storage_locations |
Đầy đủ |
| GCPN | Container xử lý và chuỗi bằng chứng (PrimaNota); các quy tắc OPA được tham chiếu qua các Gate | Đầy đủ |
| GCUCB | Bus ngữ cảnh cho tác nhân AI, bộ xác thực OPA, hệ thống kiểm toán | Đầy đủ |
| Nextcloud | Chỉ cho share/chia sẻ (người dùng bên ngoài, truy cập di động) | Hạn chế |
Điều kiện sử dụng
Nextcloud có thể được dùng có chọn lọc cho các share trong môi trường dựa trên GCBoK nếu:
- Chỉ share chỉ đọc - Không thay đổi qua Nextcloud; mọi thay đổi đều qua Git
- Tích hợp Git - Nextcloud gắn Git-Repos như lưu trữ ngoài (WebDAV, S3-Gateway hoặc GCSYNC)
- Xác thực chính sách - GCPN định nghĩa quy tắc truy cập (OPA/Rego); Nextcloud chỉ thực hiện chúng
- Audit-Logging - Log Nextcloud được chuyển tiếp đến GCAL (Syslog/Loki)
- Tuân thủ Open-Source - Chỉ Community-Edition, không plugin độc quyền
Tiêu chí loại trừ
- Ghi qua Nextcloud (vi phạm lưu trữ Git-native)
- Tiện ích mở rộng Nextcloud độc quyền (vi phạm nguyên tắc OSS)
- Thiếu tích hợp Git (Nextcloud phải có thể truy cập Git-Repos)
Xem thêm: Mẫu cho danh mục OSCAL và OPA-Policies trong Trục 6: Mẫu.