Chuyển đến nội dung chính

第 3 課:健康資料分類 (PHI/ePHI) 與風險評估

根據敏感度等級將醫療資料分類:PHI、ePHI、PII、臨床資料、管理資料。根據NIST SP 800-30制定資料分類政策、資料流程映射、風險評估,並為醫療微服務系統建立風險登記冊。

🏗️ 建築 — 第 3 課 第 3 課:醫療資料分類 (PHI/ePHI) & 風險評估

建構微服務醫療保健系統 — Quarkus、PostgreSQL、符合 HIPAA 標準的 Keycloak

第 1 部分:架構與平台

亞洲開發網

1. 醫療保健資料分類框架

醫療資料分類金字塔 — 從公開到受限的 4 個級別

1.1。為什麼需要對資料進行分類?

並非所有資料都需要相同等級的保護。資料分類有助於:

  • 優化安全成本:將資源集中在最重要的資料上
  • 法律合規性:根據監管要求應用正確的控制
  • 減少攻擊面:限制敏感資料的範圍
  • 事件回應:發生違規時優先處理

1.2。醫療保健數據分類級別

醫療資料分類金字塔 — 從公開到受限的 4 個級別

水平名稱範例加密存取稽核
4 - 受限最大限制愛滋病毒/愛滋病、心理健康、遺傳學、成癮治療、生殖健康必要 (AES-256)僅指名個人完整記錄、即時警報
3 - 機密安全醫療記錄、測試、處方、診斷成像、健康保險必需 (AES-256)基於角色(治療臨床醫生)完整記錄
2 - 內部內部預約時間表、統計(匿名)、醫護人員、配置推薦部門為本標準記錄
1 - 公開公共服務清單、工作時間、醫院聯絡方式、健康說明不需要公共基本日誌記錄

1.3。 PostgreSQL 模式中的資料分類

-- Data classification metadata table
CREATE TABLE data_classification (
    id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
    schema_name VARCHAR(100) NOT NULL,
    table_name VARCHAR(100) NOT NULL,
    column_name VARCHAR(100) NOT NULL,
    classification_level INTEGER NOT NULL CHECK (classification_level BETWEEN 1 AND 4),
    classification_label VARCHAR(50) NOT NULL,
    contains_phi BOOLEAN DEFAULT false,
    encryption_required BOOLEAN DEFAULT false,
    masking_rule VARCHAR(100),
    retention_days INTEGER,
    legal_basis TEXT,
    created_at TIMESTAMPTZ DEFAULT NOW(),
    updated_at TIMESTAMPTZ DEFAULT NOW()
);

-- Ví dụ classification cho patient table
INSERT INTO data_classification (schema_name, table_name, column_name,
    classification_level, classification_label, contains_phi, encryption_required, masking_rule)
VALUES
    ('public', 'patients', 'id', 2, 'INTERNAL', false, false, NULL),
    ('public', 'patients', 'full_name', 3, 'CONFIDENTIAL', true, true, 'PARTIAL_MASK'),
    ('public', 'patients', 'date_of_birth', 3, 'CONFIDENTIAL', true, false, 'YEAR_ONLY'),
    ('public', 'patients', 'cccd_number', 3, 'CONFIDENTIAL', true, true, 'FULL_MASK'),
    ('public', 'patients', 'phone', 3, 'CONFIDENTIAL', true, true, 'PARTIAL_MASK'),
    ('public', 'patients', 'email', 3, 'CONFIDENTIAL', true, true, 'PARTIAL_MASK'),
    ('public', 'patients', 'address', 3, 'CONFIDENTIAL', true, true, 'CITY_ONLY'),
    ('public', 'patients', 'blood_type', 2, 'INTERNAL', false, false, NULL),
    ('public', 'patients', 'hiv_status', 4, 'RESTRICTED', true, true, 'FULL_MASK'),
    ('public', 'patients', 'insurance_number', 3, 'CONFIDENTIAL', true, true, 'PARTIAL_MASK');

2. 資料流映射

2.1。微服務中的 PHI 資料流

跨微服務的 PHI 資料流 - 從病患入口網站透過 API 閘道、Keycloak 到服務和資料庫

2.2。資料流文檔模板

| #|資料元素|來源 |目的地 |交通 |加密 |分類| |---|-------------|--------|------------||------------|------------||----------| | 1 |病人姓名 |門戶|病人服務 | HTTPS/TLS 1.3 |途中 + 休息 | L3 | | 2 |實驗室結果 |實驗室儀器|實驗室服務|基於 TLS 的 HL7v2/MLLP |途中 + 休息 | L3 | | 3 |診斷代碼|臨床服務|計費服務|卡夫卡(SSL)|應用級 | L3 | | 4 |愛滋病毒狀況|臨床服務|臨床資料庫| JDBC/SSL |列加密| L4 | | 5 |審計事件|所有服務 |審計服務|卡夫卡(SSL)|事件加密 | L2 | | 6 |預約 |排程服務|通知服務|卡夫卡(SSL)|在途| L2 |

3. 根據 NIST SP 800-30 進行風險評估

3.1。風險評估方法

根據 NIST SP 800-30 評估風險的 6 個步驟 — 從識別威脅到風險應對

3.2。醫療保健微服務的威脅識別

威脅類別威脅威脅來源
外部SQL 注入病人服務攻擊者
外部勒索軟體加密資料庫網路犯罪
外部對API呼叫的中間人攻擊網路攻擊
外部將憑證填入病患入口網站機器人網路
內部未經授權的員工存取 PHI內幕
內部資料庫管理員匯出所有病患資料特權使用者
內部開發人員硬編碼憑證疏忽的員工
環境硬體故障導致資料庫損壞基礎設施
環境自然災害造成的資料遺失自然災害
供應鏈Quarkus 依賴項中的漏洞第三方

3.3。漏洞評估

// Ví dụ: Checklist kiểm tra vulnerabilities trong Quarkus service
public class SecurityVulnerabilityChecklist {

    // V1: SQL Injection - Sử dụng parameterized queries
    // ❌ VULNERABLE
    String badQuery = "SELECT * FROM patients WHERE name = '" + userInput + "'";

    // ✅ SECURE
    @NamedQuery(name = "Patient.findByName",
                query = "SELECT p FROM Patient p WHERE p.name = :name")
    List<Patient> findByName(@Param("name") String name);

    // V2: Broken Authentication - Token validation
    // ❌ VULNERABLE: Không verify token
    String userId = jwt.getClaim("sub"); // Không verify expiration, issuer

    // ✅ SECURE: Quarkus OIDC tự động verify
    @Authenticated
    @RolesAllowed("doctor")
    public Response getPatient(UUID id) { ... }

    // V3: Sensitive Data Exposure in Logs
    // ❌ VULNERABLE
    log.info("Patient created: " + patient.toString()); // Logs PHI!

    // ✅ SECURE
    log.info("Patient created: id={}", patient.getId()); // Only log ID
}

3.4。風險矩陣

5x5 風險評估矩陣 — 可能性 x 影響(從低到嚴重)

可以忽略不計 (1)低 (2)中 (3)高 (4)關鍵 (5)
非常高 (5)低中高關鍵關鍵
高 (4)低中高高關鍵
中 (3)低低中高高
低 (2)低低低中中
非常低 (1)低低低低中

4. 醫療保健微服務風險登記冊

4.1。風險登記冊模板

身分證風險描述可能性影響風險等級緩解措施業主狀態
R001SQL 注入到病患 API中 (3)關鍵 (5)高參數化查詢、輸入驗證、WAF開發團隊緩解措施
R002未經授權的內部存取 PHI高 (4)高 (4)高RBAC、RLS、審核日誌記錄、DLP安全團隊進行中
R003勒索軟體加密 Patient_db中 (3)關鍵 (5)高不可變備份、網路分段、EDR營運團隊緩解措施
R004Keycloak 令牌被盜中 (3)高 (4)高短期令牌、mTLS、DPoP開發團隊進行中
R005日誌中的 PHI 暴露高 (4)高 (4)高CI/CD 中的日誌清理、PHI 檢測開發團隊開啟
R006Kafka 中未加密的 PHI中 (3)高 (4)高應用級加密,Kafka SSL開發團隊開啟
R007資料庫備份被盜低 (2)關鍵 (5)中加密備份、金鑰管理營運團隊緩解措施
R008API 金鑰/憑證暴露中 (3)高 (4)高Vault 機密管理,無硬編碼機密所有團隊進行中
R009病患入口網站上的 DDoS中 (3)中 (3)中限速、WAF、CDN營運團隊緩解措施
R010第三方依賴CVE高 (4)中 (3)高自動掃描、Dependabot、SBOM開發團隊正在進行

4.2。風險處理計劃

4 種風險處理策略-緩解、轉移、接受、避免

  • 緩解 ← 高風險首選:實施控制,降低可能性/影響
  • 轉移(轉移):網路保險,外包給專業提供者
  • ACCEPT(接受)← 僅適用於低風險:記錄風險接受度、監控
  • AVOID(避免):消除風險來源,改變架構

5. 資料保留政策

5.1。越南健康的保留要求

資料類型儲存時間法律依據
門診病歷10年46/2018/TT-BYT 通知
住院病歷20年46/2018/TT-BYT 通知
死亡病歷20年46/2018/TT-BYT 通知
測試結果10年醫院規定
診斷影像10年醫院規定
審核日誌6 年 (HIPAA)HIPAA §164.530(j)
處方5 年藥學法
同意記錄使用壽命 + 6 年HIPAA / 法令 13/2023

5.2。 PostgreSQL 中的自動保留

-- Partition strategy for data retention
CREATE TABLE audit_events (
    id UUID DEFAULT gen_random_uuid(),
    event_time TIMESTAMPTZ NOT NULL DEFAULT NOW(),
    event_type VARCHAR(50) NOT NULL,
    actor_id UUID NOT NULL,
    resource_type VARCHAR(100) NOT NULL,
    resource_id UUID,
    action VARCHAR(20) NOT NULL,
    outcome VARCHAR(20) NOT NULL,
    details JSONB
) PARTITION BY RANGE (event_time);

-- Create monthly partitions
CREATE TABLE audit_events_2026_01 PARTITION OF audit_events
    FOR VALUES FROM ('2026-01-01') TO ('2026-02-01');

CREATE TABLE audit_events_2026_02 PARTITION OF audit_events
    FOR VALUES FROM ('2026-02-01') TO ('2026-03-01');

-- Automated partition management
-- Drop partitions older than retention period (6 years for HIPAA)
-- Archive to cold storage before dropping

6. 總結

在本課中,我們有:

  • 為醫療資料開發4級資料分類架構
  • 透過微服務架構為 PHI 建立資料流映射
  • 根據 NIST SP 800-30 方法執行風險評估
  • 建立風險登記冊以及風險處理計劃
  • 根據越南法規和 HIPAA 定義資料保留政策

練習

  1. 將醫療系統資料庫中的所有表格/列分為 4 個級別
  2. 繪製 3 個主要用例的資料流程圖:登記檢查、記錄檢查結果、開藥
  3. 執行風險評估並為至少 15 個風險建立風險登記冊
  4. 制定適合組織的資料保留政策


◀ 上一篇下一篇文章 ▶
第 2 課:使用 Quarkus Stack 實現醫療保健的安全微服務架構第 4 課:健康資訊系統的威脅建模 STRIDE/DREAD