Security
Trang chủ của Security. Các control bên dưới đã tồn tại nhưng được tài liệu hoá rời rạc theo từng control. Trang này là mục lục, góc nhìn ranh giới tin cậy, bản đồ PII / PDPD, và danh sách các mục cần siết. Đây là điểm vào Security trong hướng dẫn theo vai trò.
Ranh giới tin cậy
- Biên: TLS tại gateway; mỗi service verify token ES256 qua JWKS - identity là issuer, các service khác verify.
- Cô lập tenant: mỗi request mang
x-merchant-id; Casbin giới hạn phân quyền trong domain của merchant đó. - Secret: SealedSecret controller giải mã thành K8s Secret lúc chạy; config app qua
APP_ENV_*. - Toàn vẹn HĐĐT: credential nhà cung cấp mã hoá AES-256-GCM; hoá đơn ký Ed25519 / PKCS#7.
Control - mỗi cái nằm ở đâu
| Mảng | Control | Tham chiếu |
|---|---|---|
| Xác thực | JWKS ES256 đăng nhập, đăng ký, đổi mật khẩu | identity/authentication |
| Phân quyền | Casbin RBAC, domain per-merchant, role theo priority | identity/casbin-authorization |
| Secret | SealedSecret + env config | infrastructure/configuration |
| Network | Network policy / Cilium, ingress | infrastructure/networking |
| Hardening | Siết pod / cluster | infrastructure/security-hardening |
| Crypto | Mã hoá credential per-merchant, ký hoá đơn | invoice/domain-model |
| Toàn vẹn webhook | X-Webhook-Signature HMAC-SHA256 | Hợp đồng IPN VNPAY |
Dữ liệu cá nhân (PII) & Nghị định 13/2023 (PDPD)
BANA xử lý dữ liệu cá nhân nên Nghị định 13/2023/NĐ-CP áp dụng. Kiểm kê (mục xác nhận chưa verify theo code):
| Dữ liệu | Ở đâu | Bảo vệ | Nghĩa vụ PDPD |
|---|---|---|---|
| Tên · SĐT · email khách | identity / customer | xác nhận | đồng ý · lưu trữ · xoá |
| Hồ sơ nhân viên | identity / employee | có kiểm soát truy cập | đồng ý · tối thiểu quyền |
| Đăng nhập (username + credential) | identity | scheme credential - xem authentication | policy mạnh (xem mục cần siết) |
| MST người mua | invoice / tax | lưu | căn cứ hợp pháp: thuế |
| Device fingerprint | device / signal | xác nhận | đồng ý · rủi ro riêng tư (đã flag) |
| Credential nhà cung cấp thanh toán | payment | mã hoá AES-256-GCM | tối thiểu hoá dữ liệu |
Lỗ hổng lớn nhất: chưa có thiết kế đồng ý / lưu trữ / xoá, chưa có luồng yêu cầu của chủ thể dữ liệu, chưa có chính sách phân loại dữ liệu theo field. Thuộc Security + Pháp lý.
Audit log
Sự kiện liên quan bảo mật cần audit được: đăng nhập / đăng xuất, cấp / thu quyền, đổi role, giải mã credential, ký & phát hành hoá đơn, vô hiệu hoá thiết bị.
Hiện trạng: mâu thuẫn giữa các trang (một trang ghi lưu 10 năm, trang khác hoãn audit sang Giai đoạn 3). Thiết kế audit-log có thẩm quyền - danh sách sự kiện, schema, lưu trữ, chống sửa - chưa được viết. Mục cần làm.
Các mục cần siết
| Mục | Ở đâu | Hành động |
|---|---|---|
| Độ dài mật khẩu tối thiểu là 4 | authentication (4-80) | nâng ≥ 8-12 + kiểm tra độ phức tạp / mật khẩu bị lộ |
| Đăng ký cấp OWNER mặc định | authentication | gate OWNER (mời / duyệt); mặc định role tối thiểu quyền |
/webhooks/payment nội bộ chưa xác thực | Hợp đồng IPN VNPAY → vấn đề đã biết | verify X-Webhook-Signature (constant-time) + cửa sổ chống replay |
| So sánh checksum / chữ ký không constant-time | helper verify của mq-pay | dùng crypto.timingSafeEqual |
| Ví dụ secret trong docs | infrastructure/configuration | giữ secret là <placeholder>, không bao giờ chuỗi thật |
Các fix này nằm trong code app / hạ tầng, không phải docs - liệt kê ở đây để Security có một danh sách.