# SAD-005　安全架構與個資保護

| 項目 | 內容 |
|---|---|
| 文件編號 | SAD-005 |
| 版本 | **1.3**（BEAM PMO 2026-09-21 17:10 核定採 B：新增 **§3.4 身分轉傳原則**） |
| 狀態 | 已核定 |
| 撰寫者 | Security Architect |
| 審查者 | SA / 法遵 |
| 對應需求 | B.2 Authentication / Authorization / Transaction security / Audit Trail / 資料儲存的安全性 / 資料傳輸 |

---

## 1. 安全原則

| 編號 | 原則 | 說明 |
|---|---|---|
| SP-01 | 預設拒絕 | 未明確允許者一律拒絕 |
| SP-02 | 最小權限 | 每個角色、每個服務僅擁有完成職責所需之最小權限 |
| SP-03 | 縱深防禦 | 網路、主機、應用、資料多層控制 |
| SP-04 | 零信任 | 服務間亦須驗證與授權，不因在內網而信任 |
| SP-05 | 個資最小化 | 僅蒐集與處理業務必要之個資 |
| SP-06 | 全程加密 | 傳輸中與靜態資料皆加密 |
| SP-07 | 可稽核 | 所有敏感操作留下不可竄改之軌跡 |
| SP-08 | 失敗安全 | 安全檢查失敗時拒絕服務而非放行 |
| SP-09 | 密鑰隔離 | 金鑰由 HSM 或密鑰管理服務持有，不落應用程式碼 |
| SP-10 | 供應鏈安全 | 第三方套件須經漏洞掃描與授權審查 |

---

## 2. 威脅建模（STRIDE）

| 威脅類別 | 具體威脅 | 影響 | 控制措施 | 對應需求 |
|---|---|---|---|---|
| **S**poofing（偽冒） | 偽冒持卡人交易、偽冒內部使用者 | 資金損失 | MFA、Token 化、裝置綁定、EMV 驗證 | Authentication |
| **T**ampering（竄改） | 竄改交易金額或帳務紀錄 | 帳務錯誤 | 交易紀錄不可變、數位簽章、完整性雜湊、稽核軌跡 | Audit Trail |
| **R**epudiation（否認） | 否認曾執行某筆交易或操作 | 爭議無法釐清 | 不可否認性軌跡、時間戳、操作者識別 | Audit Trail |
| **I**nformation Disclosure（資訊洩露） | 卡號、身分證字號外洩 | 法遵與商譽 | 加密、遮罩、最小權限、日誌遮罩 | 資料儲存的安全性 |
| **D**enial of Service（阻斷服務） | 瞬間大量交易打垮授權 | 服務中斷 | 限流、自動擴容、斷路器、佇列削峰 | POC-17 |
| **E**levation of Privilege（權限提升） | 客服取得管理員權限 | 內部舞弊 | RBAC + 資料層級權限、職責分離、雙人覆核 | Authorization |

### 2.1 攻擊面分析

```mermaid
flowchart LR
  subgraph EXT["外部攻擊面"]
    U1["使用者登入"]
    U2["合作夥伴 API"]
    U3["卡組織連線"]
  end
  subgraph EDGE["邊緣防護"]
    W1["WAF"]
    W2["API 閘道<br/>認證 / 限流"]
    W3["mTLS"]
  end
  subgraph APP2["應用防護"]
    A1["RBAC + 資料層級權限"]
    A2["輸入驗證"]
    A3["日誌遮罩"]
  end
  subgraph DATA["資料防護"]
    D1["靜態加密"]
    D2["欄位級加密"]
    D3["稽核軌跡"]
  end
  U1 --> W1 --> W2 --> A1
  U2 --> W3 --> W2
  U3 --> W3
  A1 --> A2 --> D1
  A3 --> D3
  D1 --> D2
```

---

## 3. 身分驗證（Authentication）

### 3.1 使用者認證

| 項目 | 設計 |
|---|---|
| 認證方式 | 帳號密碼 + 多因子（MFA） |
| 密碼政策 | 長度 ≥ 12、含大小寫與數字與符號、不得與前 5 次相同 |
| 密碼儲存 | Argon2id 雜湊 + 個別 salt |
| 登入失敗 | 連續 5 次鎖定 15 分鐘，並記錄來源 IP |
| 工作階段 | JWT（有效期 15 分鐘）+ Refresh Token（有效期 8 小時） |
| 閒置逾時 | 15 分鐘無操作自動登出 |
| 單一登入 | 支援 SSO（SAML 2.0 / OIDC） |
| 敏感操作再驗證 | 調額、沖正、覆核等高風險操作須再次輸入密碼或 OTP |

### 3.2 服務間認證

| 項目 | 設計 |
|---|---|
| 方式 | mTLS（服務憑證）+ 服務權杖（Service Token） |
| 憑證管理 | 由憑證管理服務簽發與輪替（有效期 90 天） |
| 授權範圍 | 每個服務僅能呼叫其被允許之服務端點（見 `SAD-002 §5`） |

**實作狀態對照（2026-09-20 更新，誠實揭露）**：

| 設計項 | 狀態 | 說明 |
|---|---|---|
| 服務權杖（Service Token） | ✅ **已實作並實測通過** | OAuth2 `client_credentials`，由 Keycloak realm `cardcore` 之 confidential client `cardcore-services` 簽發；呼叫端由 `ClientCredentialsTokenProvider` 取得並快取，攜於 `Authorization` 標頭。詳見 **`CR-010`** 與 `SCS-022 §7.9` |
| mTLS（服務憑證） | ⚪ **未實作** | 須基礎設施（憑證簽發／輪替／佈署）先就緒；目前僅完成權杖半邊，**縱深防禦尚未完整**（違反 SP-03 之完整意圖，但已非「內網即信任」） |
| 授權範圍（服務對服務之端點白名單） | ✅ **已實作並實測通過**（2026-09-21） | 依 `CR-011` 階段二：以 `SAD-002 §5` 互動矩陣為**單一真實來源**，由 `tools/gen_service_acl.py` 轉置產生 `cardcore-service-acl.yml`；不符即 **403 `CC-PLT-4030`**。⚠️ 原「未實作」之記載**已過時**，本列更正 |

> ⚠️ **fail-closed 已就位**：入站認證啟用（`cardcore.security.enabled=true`）但出站憑證未設定完整時，
> 服務**啟動期即失敗**（`OutboundTokenAutoConfiguration` 拋 `IllegalStateException`），
> 不會退化為「內網免驗證」——此點確保上述缺口**不會被靜默放行**，而是**顯式暴露**。

### 3.3 認證流程

```mermaid
sequenceDiagram
  participant U as 使用者
  participant GW as API 閘道
  participant IDP as 身分提供者
  participant SVC as 領域服務

  U->>GW: 帳號密碼 + MFA 驗證碼
  GW->>IDP: 驗證憑證
  IDP-->>GW: 驗證通過
  GW->>IDP: 取得權杖（含角色）
  IDP-->>GW: JWT + Refresh Token
  GW-->>U: 回傳權杖
  U->>GW: 業務請求（Bearer Token）
  GW->>GW: 驗證簽章與有效期
  GW->>SVC: 轉發請求（含 trace_id 與角色）
  SVC->>SVC: 資料層級權限檢查
  SVC-->>U: 回應
```

---

### 3.4 身分轉傳原則（Token Relay）——**gateway／bff 呼叫領域服務之唯一方式**

> **裁定**：BEAM PMO **2026-09-21 17:10 核定採 B（轉傳使用者權杖）**，不採「為 gateway／bff 開 M2M 白名單」。
> 依據：`CR-011 §11`。本節為該裁定之**設計層**落地；程式設計規格見 `SCS-022 §7.11`。

| 項目 | 設計 |
|---|---|
| 適用對象 | `api-gateway`（8100）／`bff-web`（8101） |
| 呼叫領域服務時之身分 | **轉傳當前使用者之 JWT**，**非**自身 M2M 身分 |
| 組態 | `cardcore.security.outbound.mode: token-relay`（預設 `client_credentials`） |
| 禁止 | ❌ 以 `cc-api-gateway`／`cc-bff-web` 之 M2M 權杖呼叫領域服務（將遭 **403 `CC-PLT-4030`** 拒絕） |
| 例外 | 非使用者情境（批次／排程／事件消費）→ 採 M2M `client_credentials`，**且須列於 `SAD-002 §5` 互動矩陣** |

**為何不得以 M2M 替代（三點）**：

1. **失去使用者身分**——gateway／BFF 係**使用者之代理人**（`§3.3` 認證流程即為「GW 轉發請求（含角色）」，
   **轉傳本為原始設計意圖**）。改以自身身分呼叫，領域服務將**無從得知「誰做的」**，
   使用者層級授權（`§4.1`）與稽核軌跡（`§6.1` 之 `actor`）皆無從實作——銀行核心之硬需求。
2. **違反最小權限（SP-02）**——為 gateway／bff 開白名單，等於給予「可呼叫所有服務」之**超級身分**
   （`CR-011 §11` 選項 A）。
3. **現行 ACL 已預留此路徑**——使用者權杖之 `azp` 非 `cc-` 前綴，本就不受服務間 ACL 管制
   （`SCS-022 §7.10` 規則 3），故**無須修改白名單**即成立。

> ⚠️ **配套（消除誤用誘因）**：`CR-010 §9.5` 曾為 gateway／bff 補上出站 M2M 組態。
> 採本原則後該組態**不得用於呼叫領域服務**——已於組態層改為 `token-relay` 模式
> （`SCS-022 §7.11`），**從機制上移除誤用之可能**，而非僅靠文件告誡。
> ⚠️ 直接刪除該組態**不可行**：`OutboundTokenAutoConfiguration` 之 fail-closed 會使
> 「入站啟用 ＋ 出站憑證未設定」**啟動期失敗**——故須以模式切換，不是移除。

---


## 4. 授權（Authorization）

### 4.1 權限模型

採 **RBAC + 資料層級權限（Data Scope）**：

| 層次 | 說明 |
|---|---|
| 功能權限 | 角色可否使用某功能（端點層） |
| 資料層級 | 角色可存取哪些資料範圍（如僅自己分行、僅自己承辦案件） |
| 欄位層級 | 敏感欄位是否可見（如完整卡號僅特定角色可見） |
| 操作層級 | 是否需覆核（如超限調額） |

### 4.2 角色權限矩陣（節錄）

| 功能 ＼ 角色 | CSR | CSR_SUP | CREDIT | CREDIT_MGR | OPS | RISK | FIN | AUDIT | ADMIN |
|---|:--:|:--:|:--:|:--:|:--:|:--:|:--:|:--:|:--:|
| 查詢客戶資料 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| 查詢完整卡號 | ❌ | ⚠️ | ❌ | ❌ | ⚠️ | ❌ | ❌ | ⚠️ | ❌ |
| 掛失／鎖卡 | ✅ | ✅ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ |
| 額度調整（限額內） | ❌ | ✅ | ✅ | ✅ | ❌ | ✅ | ❌ | ❌ | ❌ |
| 額度調整（超限） | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |
| 沖正交易 | ❌ | ⚠️ | ❌ | ❌ | ✅ | ❌ | ⚠️ | ❌ | ❌ |
| 爭議受理 | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
| 批次執行 | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ✅ | ❌ | ❌ |
| 清算覆核 | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ |
| 參數設定 | ❌ | ❌ | ❌ | ⚠️ | ❌ | ✅ | ❌ | ❌ | ✅ |
| 權限管理 | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ |
| 稽核軌跡匯出 | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ |

✅ 允許　⚠️ 需覆核或另需權限　❌ 不允許

> 完整矩陣（含頁面層級）見 `SDD-007 §5`。

### 4.3 職責分離（Segregation of Duties）

| 規則 | 說明 |
|---|---|
| SoD-01 | 交易之建立者不得為其覆核者 |
| SoD-02 | 參數設定者不得為其生效之核准者 |
| SoD-03 | 沖正申請人不得為沖正覆核人 |
| SoD-04 | 權限管理者不得為稽核軌跡匯出者 |
| SoD-05 | 超過門檻之金額操作須雙人覆核 |

---

## 5. 加密與個資保護

### 5.1 傳輸加密

| 通道 | 協定 | 要求 |
|---|---|---|
| 使用者 ↔ 閘道 | TLS 1.3 | 停用 TLS 1.0／1.1；停用弱加密套件 |
| 服務 ↔ 服務 | mTLS 1.3 | 雙向憑證驗證 |
| 服務 ↔ 資料庫 | TLS 1.3 | 憑證驗證，不允許明文 |
| 服務 ↔ 外部系統 | TLS 1.3 / SFTP | 依對方能力，至少 TLS 1.2 |
| 卡組織 | 專線 + 加密 | 依卡組織規範 |

### 5.2 靜態加密

| 資料 | 加密方式 |
|---|---|
| 資料庫檔案 | 透明資料加密（TDE） |
| 個資欄位（卡號、身分證字號） | **欄位級加密**（AES-256-GCM） |
| 備份檔 | 加密後儲存 |
| 日誌 | 個資欄位遮罩後寫入 |

### 5.3 個資分類與處理

| 資料項 | 分類 | 儲存 | 顯示 | 日誌 |
|---|---|---|---|---|
| 卡號（PAN） | 最高敏感 | 加密 | `4111****1234`（前 6 後 4） | **禁止** |
| CVV2 | 最高敏感 | **不儲存** | 產生後即回傳 | **禁止** |
| 身分證字號 | 高敏感 | 加密 | `A12345****` | **禁止** |
| 生日 | 敏感 | 明文（需權限） | 需權限 | 遮罩 |
| 手機號碼 | 敏感 | 加密 | `0912***567` | 遮罩 |
| 電子郵件 | 敏感 | 加密 | `abc***@mail.com` | 遮罩 |
| 姓名 | 一般 | 明文 | 明文 | 允許 |
| 交易金額 | 一般 | 明文 | 明文 | 允許 |
| 地址 | 敏感 | 加密 | 需權限 | 遮罩 |

> **CVV2 不得儲存**（`BRD-001 BR-01-03`、POC-06 情境 6-8）。

### 5.4 金鑰管理

| 項目 | 設計 |
|---|---|
| 金鑰儲存 | HSM（主金鑰）／密鑰管理服務（資料金鑰） |
| 金鑰輪替 | 資料金鑰每 90 天；主金鑰每年 |
| 金鑰分級 | 依敏感度分級，不同用途不同金鑰 |
| 存取控制 | 金鑰操作須經服務身分驗證與授權 |
| 稽核 | 所有金鑰操作留存軌跡 |
| 禁止 | 金鑰不得出現於程式碼、設定檔或日誌 |

#### 5.4.1 實作機制（`W-1`，2026-09-19）

金鑰由 **`common-security`** 之 `KeyProvider` 埠介面取得；其實作由環境提供：

| 環境 | `KeyProvider` 實作 | 取得方式 |
|---|---|---|
| **SIT／UAT／PROD** | **HSM／KMS 版本**（由部署方提供，**尚未實作**） | 服務自行定義 `KeyProvider` bean；`CryptoAutoConfiguration` 因 `@ConditionalOnMissingBean` 自動讓位 |
| 本地／測試 | `StaticKeyProvider`（`common-security` 提供） | `cardcore.security.crypto.*` 組態；由 `CryptoAutoConfiguration` 建立 |

**啟用方式**：`cardcore.security.crypto.static-keys-enabled=true`（**預設 `false`**，
必須顯式開啟）。未開啟時不產生任何 bean——生產環境若忘記設定 HSM 實作，
啟動會因**缺少 `KeyProvider`** 而 fail-fast，而非靜默地以組態金鑰運作。

#### 5.4.2 本地開發之豁免條款（**與「禁止」項之衝突及處置**）

> ⚠️ **本節 5.4 之「禁止：金鑰不得出現於程式碼、設定檔或日誌」與本地開發實務衝突。**

**衝突內容**：本地開發須解密 `ops/local/init/oracle/*-dev-*-seed.sql` 之**預先產生密文**
（如 `party-service` 之 `MOBILE_ENC`），否則服務無法啟動驗證。
HSM 於本地不可得，故本地**必須**有可用的靜態金鑰。

**豁免範圍（僅限本地／測試）**：

| 項 | 說明 |
|---|---|
| 允許位置 | 各服務 `src/main/resources/application-local.yml` 之 `cardcore.security.crypto.keys.<keyId>`（Base64） |
| 金鑰性質 | **非機密之測試常數**——材質已公開於版控（含種子檔產生時所用者），**不得**與任何真實金鑰相同 |
| 強制防護 | `CryptoAutoConfiguration` 對作用中 profile 屬**生產類**（`prod`／`production`／`prd`／`uat`／`sit`／`staging`／`preprod`，含複合名如 `prod-tokyo`）時**拒絕啟動**並拋出例外。該清單**刻意不可由組態調整**——若可調整，誤設即可繞過防護 |
| 流向限制 | `application-local.yml` 僅供本地，**禁止**流入 SIT／UAT／PROD（`SAD-006 §2.1`） |
| 啟動可見性 | 啟用時記 **`WARN`**，明載「此機制僅供本地／測試；生產環境必須改用 HSM／KMS」 |

**因此**：5.4「禁止」項之效力**限於 SIT／UAT／PROD**；本地開發依本豁免條款為之，
且由**自動配置之 fail-fast** 而非「人工自律」確保不外流。

> **歷史（已修正）**：`W-1` 之前，`party-service` 之 `DevKeyProvider` 將金鑰材質
> **硬編於 Java 程式碼**（`PartyCryptoConfig`）——該作法連本地豁免之形式要求都不符
> （金鑰出現於**程式碼**，且無任何環境防護）。`W-1` 已改為組態驅動 ＋ fail-fast 防護。

> **仍待辦（誠實揭露）**：**HSM／KMS 版本之 `KeyProvider` 尚未實作**。
> 生產環境之金鑰保管、輪替（資料金鑰 90 天）、操作稽核均**未實作亦未驗證**。
> 本節 5.4 其餘各項（輪替週期、存取控制、稽核軌跡）目前皆為**設計**，非實作。

---

## 6. 稽核軌跡（Audit Trail）

### 6.1 軌跡內容

| 欄位 | 說明 |
|---|---|
| `trace_id` | 追蹤識別碼 |
| `occurred_at` | 發生時間（UTC，毫秒精度） |
| `actor_type` | 操作者類型（USER / SERVICE / SYSTEM） |
| `actor_id` | 操作者識別碼 |
| `actor_role` | 操作者角色 |
| `action` | 動作（CREATE / UPDATE / DELETE / APPROVE / REJECT / QUERY_SENSITIVE） |
| `resource_type` / `resource_id` | 標的資源 |
| `before_image` | 異動前值（JSON） |
| `after_image` | 異動後值（JSON） |
| `result` | 成功 / 失敗 |
| `source_ip` / `user_agent` | 來源資訊 |

### 6.2 軌跡保證

| 保證 | 機制 |
|---|---|
| 不可竄改 | 僅 INSERT 權限；定期計算雜湊鏈 |
| 完整性 | 每筆軌跡含前一筆雜湊（hash chain） |
| 可查詢 | 依時間、操作者、資源、動作查詢 |
| 保留 | 依 `BRD-001 §7.3`；不得任意刪除 |
| 匯出 | 僅 `AUDIT` 角色可匯出 |

### 6.3 必稽核事件

| 類別 | 事件 |
|---|---|
| 認證 | 登入成功／失敗、登出、MFA 驗證、密碼變更 |
| 授權 | 權限變更、角色指派、存取被拒 |
| 敏感查詢 | 查詢完整卡號、查詢客戶個資 |
| 金額操作 | 額度調整、沖正、退費、點數調整 |
| 參數 | 參數新增／修改／刪除、規則發布 |
| 批次 | 批次啟動、中止、重跑 |
| 匯出 | 報表匯出、軌跡匯出 |
| 系統 | 服務啟停、設定變更、金鑰操作 |

---

## 7. 交易安全

| 控制 | 說明 |
|---|---|
| 電文完整性 | 交易金額、卡號以 MAC 或簽章保護 |
| 重放防護 | 交易序號（STAN）+ 時間窗檢核 |
| EMV 驗證 | ARQC / ARPC 驗證 |
| PIN 驗證 | 由 HSM 執行，PIN Block 不在應用層解密 |
| Token 化 | 行動支付使用 Token，不以真實卡號傳輸 |
| 3D 驗證 | 3-D Secure 交易依卡組織規範 |
| 異常偵測 | 即時風險評分（MCC、地區、金額、頻率） |
| 交易限額 | 單筆、日限額、日限次、專用額度 |

---

## 8. 應用安全控制

| 控制 | 說明 | 驗證方式 |
|---|---|---|
| 輸入驗證 | 依 OpenAPI schema 嚴格驗證 | 契約測試 |
| 輸出編碼 | 防 XSS | DAST |
| 參數化查詢 | 防 SQL Injection | SAST + 人工複核 |
| CSRF 防護 | 前端使用 Token | 安全測試 |
| 依賴掃描 | 第三方套件漏洞掃描 | CI 自動 |
| 秘密掃描 | 禁止硬編碼密鑰 | CI 自動 |
| 錯誤訊息 | 不對外揭露內部細節 | 人工複核 |
| 檔案上傳 | 型別與大小限制 | 安全測試 |

---

## 9. 安全測試

| 測試類型 | 時機 | 工具／方式 | 通過標準 |
|---|---|---|---|
| SAST | 每次提交 | CI 靜態分析 | 0 Critical／High |
| DAST | 每週 | 動態掃描 | 0 Critical／High |
| 依賴掃描 | 每次建置 | 套件漏洞庫 | 0 Critical |
| 滲透測試 | 上線前 | 第三方 | 高風險項全數修復 |
| 權限矩陣測試 | 每次 release | 自動化逐角色測試 | 100% 符合矩陣 |
| 個資遮罩測試 | 每次 release | 自動化 | 100% 欄位正確遮罩 |
| 稽核軌跡測試 | 每次 release | 自動化 | 必稽核事件 100% 留痕 |
| 弱點修補驗證 | 修補後 | 複測 | 原弱點不復現 |

---

## 10. 安全檢核清單

| # | 檢核項 | 標準 |
|---|---|---|
| 1 | 所有端點皆經認證 | 0 匿名端點（除健康檢查） |
| 2 | 所有端點皆經授權 | 100% 掛載授權中介層 |
| 3 | 個資欄位皆加密 | 資料字典標記 `PII` 者 100% 加密 |
| 4 | 日誌無個資 | 掃描日誌輸出 0 筆個資 |
| 5 | CVV2 不落地 | 資料庫掃描 0 筆 CVV2 |
| 6 | 金鑰不落程式碼 | 秘密掃描 0 筆；**生產環境**另須符合 §5.4「禁止」項（不含設定檔）。本地開發依 **§5.4.2 豁免條款**（組態驅動 ＋ 生產類 profile 拒絕啟動） |
| 7 | 職責分離生效 | SoD-01~05 自動化測試通過 |
| 8 | 稽核軌跡完整 | 必稽核事件 100% 留痕 |
| 9 | 傳輸加密 | 0 明文通道 |
| 10 | 依賴無高風險漏洞 | 0 Critical |

---

## 11. 修訂記錄

| 版本 | 日期 | 修訂者 | 說明 |
|---|---|---|---|
| 1.0 | 2026-09-17 | Security Architect | 初版 |
| 1.1 | 2026-09-19 | Security Architect | 依 **`W-1`（`KeyProvider` 推廣）** 更新：①**新增 §5.4.1 實作機制**——載明 `KeyProvider` 埠介面、各環境之實作對應（SIT/UAT/PROD 為 HSM／KMS，**尚未實作**；本地為 `StaticKeyProvider`），及 `static-keys-enabled` **預設 false** 之 fail-fast 設計。②**新增 §5.4.2 本地開發豁免條款**——**處理本節「禁止：金鑰不得出現於程式碼、設定檔或日誌」與本地開發實務之衝突**：本地須解密種子密文而 HSM 不可得，故明訂豁免範圍（僅 `application-local.yml`、材質為**非機密測試常數**、由自動配置對生產類 profile **拒絕啟動**把關、禁止流入 SIT/UAT/PROD）。**「禁止」項之效力限於 SIT／UAT／PROD**。③**§10 檢核項 6 補註**豁免條款之依據。④**新增本修訂記錄區**（原文件欠缺）。⑤**誠實揭露**：HSM／KMS 版本之 `KeyProvider` **尚未實作**；金鑰輪替（90 天）、存取控制、操作稽核**皆為設計、未實作亦未驗證** |
| 1.2 | 2026-09-20 | Security Architect | 依 **`CR-010`（服務間呼叫缺授權標頭）** 更新：①**§3.2 新增「實作狀態對照」表**——服務權杖（Service Token）**已實作並實測通過**（OAuth2 `client_credentials` ＋ Keycloak `cardcore-services`）；**mTLS 半邊仍未實作**（待基礎設施）；**服務對服務之端點白名單（授權範圍）未實作**，目前為「持有有效服務權杖即可呼叫」，與 `SAD-002 §5` 之限縮意圖仍有落差——三者皆**誠實揭露、未以「已設計」冒充「已實作」**。②**明載 fail-closed 已就位**：入站認證啟用而出站憑證缺漏時，服務於**啟動期即失敗**，確保上述缺口**顯式暴露**而非靜默退化為「內網即信任」。③**修正既有文件結構缺陷**：§10 檢核清單之第 7–10 項（職責分離／稽核軌跡／傳輸加密／依賴漏洞）原先誤置於 §11 修訂記錄表內（且欄數不合），已移回 §10 |
| 1.3 | 2026-09-21 | WorkBuddy AI | ①**新增 §3.4「身分轉傳原則（Token Relay）」**（BEAM PMO 2026-09-21 17:10 核定採 **B**：gateway／bff 呼叫領域服務**轉傳使用者權杖**，不以自身 M2M 身分替代；依據 `CR-011 §11`，程式規格見 `SCS-022 §7.11`）。②**更正 §3.2 之過時記載**——「授權範圍（服務對服務端點白名單）⚪ 未實作」**已過時**：`CR-011` 階段二（2026-09-21）已依 `SAD-002 §5` 實作並實測通過（不符即 403 `CC-PLT-4030`）。③明訂**配套**：`CR-010 §9.5` 為 gateway／bff 補之出站 M2M 組態改以 `token-relay` 模式取代，**不得直接刪除**（fail-closed 會導致啟動失敗） |
