Share Notes

chundev

View the Project on GitHub latteouka/share-notes

OpenShift Air-Gapped 環境的 AI 容器資安治理——六層防禦架構設計

日期:2026-06-30 技術棧:Red Hat OpenShift 4.x、ACS 4.9、Quay 3.x、NVIDIA H200 GPU


TL;DR

Air-gapped OpenShift 叢集承載多廠商 AI 工作負載時,「廠商用硬碟帶 image 進來直接跑」的模式會在規模擴大後失控。六層資安治理架構涵蓋 OpenShift 原生能力(RBAC、Namespace、NetworkPolicy)和 Red Hat 安全產品線(ACS、Quay、Compliance Operator),目標是讓 A 級機關通過資安法稽核。核心原則——管不了 container 裡面放什麼,但管得了 container 能碰到什麼


目錄


背景

場景:一個擁有 air-gapped OpenShift 叢集和 NVIDIA H200 GPU 的 A 級機關,各業務單位找不同廠商開發 AI 應用。平台由 B 廠商建置維運,C、D、E 廠商各自開發完後用硬碟把 container image 帶進來,B 廠商的工程師幫忙把 container 跑起來——沒有 image 掃描、沒有准入控制、沒有操作紀錄、沒有任何治理機制。

合規要求:資通安全管理法 A 級 + ISO 27001。A 級是最高等級,對委外管理、稽核軌跡、弱點掃描都有明確的應辦事項。

驅動力不是已經出事,而是預見「現在兩三個廠商還行,以後十幾個就亂了」加上合規壓力。SI 的角色是提前佈局,設計一套治理框架。


問題:無治理狀態的風險

廠商 C(開發 AI 應用)
  │
  │ 硬碟帶 image
  ▼
B 廠商工程師
  │
  │ podman load → oc apply
  ▼
OpenShift GPU Node (H200)
  │
  │ 沒有掃描 ✕
  │ 沒有准入控制 ✕
  │ 沒有操作紀錄 ✕
  │ 沒有網路隔離 ✕
  ▼
  直接跑起來

四個具體風險:

  1. 不知道 image 裡面有什麼 — 廠商打包了什麼 library、有沒有已知 CVE、有沒有夾帶 crypto miner,完全不知道
  2. 廠商之間沒有隔離 — 所有 container 跑在同一個叢集,理論上可以互相存取
  3. 出事追不到人 — 沒有 audit log 記錄誰在什麼時候做了什麼部署
  4. 稽核交不出東西 — 資安法 A 級的委外管理、弱點掃描、事件通報,全部交白卷

機制拆解:OpenShift 與原生 Kubernetes 的關鍵差異

三種操作方式,同一個 API

OpenShift 就是 Kubernetes 的企業發行版,底層 API 完全一樣。

┌─────────────────────────────────────────┐
│         OpenShift API Server             │
│    (就是 Kubernetes API + 擴充)         │
└──────┬──────────────┬──────────┬────────┘
       │              │          │
  ┌────┴────┐   ┌─────┴────┐  ┌─┴──────────┐
  │ kubectl  │   │  oc CLI  │  │ Web Console │
  │(完全能用)│   │(kubectl  │  │  (GUI)     │
  │          │   │ 的超集)  │  │             │
  └─────────┘   └──────────┘  └─────────────┘

kubectl get podskubectl apply -fkubectl logs 全部照用。oc CLI 包含 kubectl 的所有功能再加上 OpenShift 特有操作(oc loginoc new-projectoc image mirror)。Web Console 可以直接管 RBAC、裝 Operator、開 terminal 進 Pod。

對治理的意義: 不管廠商用哪種工具操作,全部打同一個 API Server。治理機制只要設在 API 層(RBAC + Admission Controller),所有操作方式都會被涵蓋。

認證系統:不需要手動生 kubeconfig

這是跟原生 K8s 最大的差異之一。

原生 Kubernetes OpenShift
手動建 ServiceAccount 建 User 帳號(GUI 或 oc create user
手動綁 RoleBinding GUI 上 User Management → RoleBindings 點一點
手動拼 kubeconfig 發給人 對方 oc login 輸入帳密就好
想看誰有什麼權限要下指令查 GUI 上 User Management 一目瞭然

身分來源可以接:

對治理的意義: 每個廠商工程師有自己的帳號,所有操作自動綁定身分。不再是「不知道是誰在操作」。

Namespace(OpenShift 叫 Project)

OpenShift 把 Namespace 包裝成 “Project”,加了一些額外功能(預設的 LimitRange、ResourceQuota 模板等),但底層就是 Kubernetes Namespace。


常見誤解駁斥

以下誤解如果不糾正,會導致治理框架留下盲區。

誤解 實際情況 為什麼會搞混
❌ Namespace 隔開 = 網路也隔開 ⚠️ 錯!OpenShift 預設 namespace 之間網路是通的。 廠商 C 的 Pod 可以直接連到廠商 D 的 Pod,只要知道 Service name 或 IP。要真的隔開需要額外設 NetworkPolicy 因為 Namespace 在 RBAC 層面確實是隔離的(看不到對方的資源),直覺會以為網路也隔離了
❌ Image 掃過沒問題 = 跑起來也沒問題 ⚠️ Image 掃描只檢查靜態內容(已知 CVE、惡意檔案)。Container 跑起來後的動態行為(異常程序、權限提升、挖礦)需要 runtime 監控才抓得到 因為「掃描」聽起來像是全面檢查,但實際上只覆蓋部署前的靜態分析
❌ Air-gapped = 不會有資安問題 ⚠️ Air-gapped 降低了外部入侵和資料外洩的風險,但內部威脅完全沒有減少 — 惡意 image、權限濫用、廠商之間互相干擾,全部在內網發生 因為 air-gapped 直覺上感覺很安全(「都斷網了還能怎樣」)
❌ 問客戶「你們 OpenShift 是什麼版本」就能知道訂閱層級 ⚠️ 客戶會回答 “4.16”(軟體版本),不是訂閱層級。訂閱層級是商業合約層面的東西(Container Platform vs Platform Plus),不會顯示在叢集裡 因為在其他產品中「版本」通常就代表功能等級
❌ Namespace 隔離就夠了,不需要其他治理 ⚠️ Namespace 擋不住:image 裡的漏洞、root 權限逃逸、夾帶惡意程式、資料外帶。需要六層完整治理 因為 Namespace 已經做到 RBAC 隔離和資源配額,看起來「已經很安全了」

驗證:Namespace 預設不隔離網路

在 OpenShift(使用 OVN-Kubernetes CNI)中,預設所有 Namespace 之間的 Pod 網路是完全互通的

要做到 Namespace 間的網路隔離,需要手動建立 NetworkPolicy。最基本的 deny-all 範本:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: deny-all-ingress
  namespace: vendor-c
spec:
  podSelector: {}
  policyTypes:
    - Ingress
  ingress: []

這會阻擋所有進入 vendor-c namespace 的流量。然後再用白名單開放需要的連線(例如 Ingress Controller 進來的流量)。


六層治理架構

六層的設計邏輯:從外到內、從靜態到動態、從預防到偵測

┌─────────────────────────────────────────────────┐
│ L1 帳號與權限    誰能進來操作?                    │
├─────────────────────────────────────────────────┤
│ L2 廠商隔離      各廠商互相看不到、碰不到           │
├─────────────────────────────────────────────────┤
│ L3 Image 掃描    進來的東西先檢查                  │
├─────────────────────────────────────────────────┤
│ L4 准入控制      不合規的東西不准跑                 │
├─────────────────────────────────────────────────┤
│ L5 Runtime 監控  跑起來後持續盯                    │
├─────────────────────────────────────────────────┤
│ L6 合規稽核      所有事留紀錄、產報告               │
└─────────────────────────────────────────────────┘

L1:帳號與權限管理(OpenShift RBAC)

做什麼: 每個廠商工程師有自己的帳號,只能操作被授權的 Namespace。

用什麼: OpenShift 原生 RBAC + OAuth 認證系統。免費,所有訂閱層級都有。

實作重點:

資安法對應: 委外廠商存取範圍管控、最小權限原則。

L2:廠商隔離(Namespace + NetworkPolicy)

做什麼: 每個業務單位一個 Namespace,廠商只是被授權來操作的人。Namespace 間網路隔離。

用什麼: OpenShift 原生功能。免費。

設計決策 — 按業務單位切,不是按廠商切:

切法 優點 缺點
按廠商切 簡單直覺 廠商會換,Namespace 跟著亂
✅ 按業務單位切 業務單位穩定,廠商只是操作者 需要管理廠商的權限指派

實作重點:

L3:Image 安全掃描(Quay + Clair)

做什麼: 所有 container image 必須先進入內部 Quay Registry,自動觸發 Clair 掃描。

用什麼: Red Hat Quay(私有 registry)+ 內建 Clair 掃描引擎。Platform Plus 包含,否則加購。

Quay 的角色:

Air-gapped 部署:

L4:部署准入控制(ACS Admission Controller)

做什麼: 在 Kubernetes API 層攔截部署請求,不合規的 image 直接擋掉,連部署都不讓發生。

用什麼: Red Hat ACS (Advanced Cluster Security) 的 Admission Controller。Platform Plus 包含,否則加購。

這是治理的核心機制。 運作原理是在 OpenShift API Server 註冊為 ValidatingAdmissionWebhook——每當有人嘗試建立 Deployment / Pod / DaemonSet 等工作負載,API Server 會先把請求發給 ACS 檢查,ACS 根據預設的 Policy 決定放行或擋掉。

任何操作方式
  │
  ▼
OpenShift API Server
  │
  │ → ValidatingAdmissionWebhook → ACS
  │                                  │
  │                            合規? │
  │                            ✓ 放行 │
  │                            ✕ 拒絕 │
  │ ←────────────────────────────────┘
  ▼
執行部署(或回傳錯誤)

可以設定的 Policy 範例:

設計原則: 不依賴人的自律,用平台層技術強制。廠商的工程師可能忘記掃描、可能偷懶、可能不知道有漏洞——都不重要,因為 Admission Controller 在 API 層就把關了。

ACS vs Clair 掃描深度比較:

掃描項目 Clair (Quay 內建) ACS
已知 CVE 漏洞
Image 內含的 Secret / 密碼
危險套件偵測(crypto miner 等)
Dockerfile 最佳實踐檢查
執行身分(root?)檢查
元件清單(SBOM 等級) 部分

Quay + Clair 是第一道濾網(已知 CVE),ACS 是第二道(更深入的安全分析 + 准入控制的強制力)。兩者搭配使用,不是二選一。

ACS 的架構組件:

┌─────────────────────────────────────┐
│ Central(管理平面)                   │
│  ├── API Server + Dashboard         │
│  ├── Scanner(image 掃描引擎)       │
│  └── Policy Engine                  │
├─────────────────────────────────────┤
│ Secured Cluster(每個被管理的叢集)    │
│  ├── Sensor(收集叢集資訊)           │
│  ├── Collector(節點層級資料收集)     │
│  └── Admission Controller            │
│       (ValidatingAdmissionWebhook) │
└─────────────────────────────────────┘

Central 可以管理多個叢集,但在單叢集的場景下,Central 和 Secured Cluster 組件跑在同一個 OpenShift 叢集上。

L5:Runtime 監控(ACS Runtime Monitoring)

做什麼: Container 跑起來之後,持續監控內部行為,偵測異常。

用什麼: ACS 的 Runtime Monitoring 功能。已包含在 ACS 中。

偵測項目:

為什麼需要這一層: Image 掃描只能檢查已知的靜態內容。如果一個 image 在部署時是乾淨的,但跑起來後從內部下載了惡意程式(即使在 air-gapped 環境,如果 image 裡預埋了惡意邏輯,也可能在 cluster 內部造成損害),runtime 監控才抓得到。

L6:合規稽核(Compliance Operator + ACS + File Integrity Operator)

做什麼: 自動掃描叢集合規狀態、產出報告、監控檔案完整性。

用什麼:

工具 功能 費用
Compliance Operator 自動掃描叢集是否符合 CIS Benchmark、NIST 等標準 免費(所有 OCP 訂閱都有)
ACS 合規報告 跨叢集合規狀態視覺化(CIS、NIST、PCI DSS、HIPAA) 包含在 ACS 中
File Integrity Operator 持續監控節點上的檔案是否被竄改(基於 AIDE) 免費(所有 OCP 訂閱都有)

資安法 A 級應辦事項 ↔ 治理架構對照:

應辦事項 具體要求 六層架構對應
委外廠商管理 管控廠商存取範圍、資格審查 L1 RBAC(限制操作範圍)+ L2 Namespace 隔離
弱點掃描 定期掃描系統漏洞 L3 Quay/Clair 自動掃描 + L4 ACS 深度掃描
資安威脅偵測 偵測異常行為 L5 ACS Runtime 監控
稽核軌跡 所有操作可追溯 OpenShift Audit Log + ACS 操作紀錄
資安事件通報 發現事件後通報 ACS 告警機制 + File Integrity Operator
定期稽核 產出合規報告 L6 Compliance Operator(CIS Benchmark)
滲透測試 定期執行 需另外安排(不在本框架範圍內)

ISO 27001 對應的控制項:


生態定位:Red Hat 安全產品線全覽

Red Hat 自家產品(單一窗口支援)

┌─────────────────────────────────────────────────────────┐
│ 所有 OCP 訂閱都有(免費)                                 │
│                                                         │
│  ├── RBAC / Namespace / NetworkPolicy (平台原生)        │
│  ├── Compliance Operator (合規掃描)                     │
│  └── File Integrity Operator (檔案完整性)               │
│                                                         │
├─────────────────────────────────────────────────────────┤
│ Platform Plus 包含(或可單獨加購)                         │
│                                                         │
│  ├── ACS (Advanced Cluster Security)                    │
│  │     原 StackRox,2021 年被 Red Hat 收購               │
│  │     2022 年開源(StackRox 社群版)                     │
│  │     功能:Image 掃描、准入控制、Runtime 監控、合規報告   │
│  │                                                      │
│  ├── Quay (私有 Container Registry + Clair 掃描)       │
│  │                                                      │
│  └── RHACM (Advanced Cluster Management)                │
│        多叢集管理,本場景暫不需要                          │
│                                                         │
├─────────────────────────────────────────────────────────┤
│ 獨立加購                                                 │
│                                                         │
│  ├── OpenShift AI (模型治理、MLOps,未來擴展用)          │
│  └── Trusted Software Supply Chain                      │
│        (Image 簽章、SBOM、供應鏈安全)                   │
└─────────────────────────────────────────────────────────┘

OpenShift 訂閱層級

層級 定位 ACS Quay
Virtualization Engine VM 專用,最底層
Kubernetes Engine 基礎容器平台
Container Platform 最常見,完整開發者工具
Platform Plus 最高層 ✅ 包含 ✅ 包含

層級是累加制 — 買 Platform Plus 就包含以下所有層級的功能。問客戶「你們是 Container Platform 還是 Platform Plus」就能判斷 ACS 和 Quay 是否已包含。

訂閱方式: Red Hat OpenShift 的訂閱通常是 per-core 或 per-socket(依部署方式和合約而定),不公開具體價格,需要聯繫 Red Hat 業務或經銷商報價。

NVIDIA 產品(H200 相關)

產品 說明 費用
GPU Operator GPU 驅動和 runtime 的自動化管理 免費(社群版)
GPU Operator Government-Ready 符合 FedRAMP 等政府安全要求 需 NVIDIA AI Enterprise 授權
Confidential Containers + GPU 硬體層級保護 container 內容 較新,目前太前沿

替代方案比較

為什麼全選 Red Hat 自家產品?

方案 支援窗口 適合場景
全 Red Hat 全部找 Red Hat 一個窗口 A 級機關、需要原廠支援保證
Red Hat + Falco (CNCF) Red Hat + 社群自維護 技術能力強的團隊,想要更深的 runtime 偵測
Red Hat + NeuVector (SUSE) Red Hat + SUSE 已有 NeuVector 經驗的團隊
純開源(StackRox 社群版 + Trivy + Falco) 沒有原廠支援 預算有限、技術能力強、非政府機關

選擇 Red Hat 全家桶的理由:

  1. A 級機關 — 出事要有人負責,「社群開源自己維護」在稽核時不好看
  2. L0 客戶 — 技術認知有限,單一窗口降低溝通成本
  3. Air-gapped — Red Hat 產品都有官方 air-gapped 部署文件,第三方的離線支援品質不一
  4. 如果已是 Platform Plus — ACS + Quay 已經包含在訂閱裡,不用額外花錢

何時不用這個方案?


Air-Gapped 環境的邊界與陷阱

✅ Air-gapped 降低的風險

⚠️ Air-gapped 沒有降低的風險

⚠️ 陷阱 1:漏洞資料庫更新延遲

Clair 和 ACS 的漏洞掃描依賴漏洞資料庫(CVE 定義)。在有網路的環境自動更新不是問題,但 air-gapped 環境需要手動搬運更新:

⚠️ 陷阱 2:Image 入口管理

⚠️ 陷阱 3:Operator 和工具的離線安裝

ACS、Quay、Compliance Operator 本身的安裝也需要 container image。在 air-gapped 環境,這些 Operator 的 image 也要先 mirror 進來:

⚠️ 陷阱 4:GPU Operator 的安全設定

NVIDIA GPU Operator 在 OpenShift 上需要特殊的 Security Context Constraints (SCC)。v25.3+ 已改用 namespace-scoped role 取代 cluster role,但較舊版本可能需要 privileged SCC——這與資安治理的最小權限原則衝突。確認 GPU Operator 版本,必要時升級。


分階段落地策略

為什麼不一次全上?

技術上可以一次部署全部,但實際考量:

  1. 預算分批 — 如果客戶不是 Platform Plus,階段二需要加購 ACS + Quay
  2. B 廠商配合 — 設定這些機制需要 B 廠商的技術配合,一次全改動太大
  3. 學習曲線 — L0 客戶需要時間消化每個階段帶來的改變
  4. 快速見效 — 階段一免費且快速,讓客戶先看到效果,建立信心

三階段時間軸

階段一(1-2 週)              階段二(4-8 週)            階段三(2-4 週)
━━━━━━━━━━━━━━              ━━━━━━━━━━━━━━            ━━━━━━━━━━━━━━

L1 RBAC 帳號管理              L3 Quay 部署 +             L6 Compliance
  每個廠商自己的帳號             統一 Image 入口             Operator 掃描
  綁定到對應 Namespace          Clair 自動掃描
                                                        ACS 合規報告
L2 Namespace 隔離             L4 ACS 准入控制
  NetworkPolicy deny-all        Policy 設定               File Integrity
  ResourceQuota GPU 配額        不合規 Image 擋掉           Operator

                              L5 ACS Runtime
                                異常行為監控

─────────────────────────────────────────────────────────────────

費用:免費                     費用:Platform Plus        費用:免費
                              或加購 ACS + Quay          (前提是階段二已完成)
效果:門禁 + 隔間              效果:安檢 + 監控          效果:稽核護身符

為什麼這個順序:

每個階段獨立有效 — 不需要等全部做完才有治理效果。


提案技巧:SI 視角

問對問題

跟技術認知有限的客戶溝通,問對問題比解釋技術更重要。

你想知道的 不要這樣問 應該這樣問
訂閱層級 ❌「你們 OpenShift 是什麼版本?」(會得到 “4.16”) ✅「方便讓我看一下你們跟 Red Hat 的訂閱合約嗎?我確認品項名稱,看哪些資安工具已經包含在裡面。」
訂閱層級(替代問法) ❌「你們有沒有買 ACS?」(客戶不知道 ACS 是什麼) ✅「可以幫我問一下 B 廠商,你們裝的 OpenShift 是 Container Platform 還是 Platform Plus?」
現有 Registry ❌「你們有 Quay 嗎?」 ✅「目前廠商的 image 有沒有一個統一存放的地方?」

用比喻溝通

技術概念 比喻
Namespace 大樓裡的隔間
RBAC 門禁卡(不同卡進不同門)
Image Scanning 貨物安檢
Admission Controller 警衛——安檢不過就不讓進
Runtime Monitoring 監視器
NetworkPolicy 隔間之間的防火牆
Compliance Report 稽核護身符

最有力的一句:「Namespace 是隔間,但隔間只能防君子。廠商帶進來的 image 裡面有什麼、跑起來做什麼,需要另外一層機制來管——就像大樓有隔間,但還是需要門禁和監視器。」

商業包裝

交付物 給誰看 作用
一頁式簡報 客戶本人 快速理解全貌,取得 buy-in
管理辦法 稽核 / 上級 正式公文,制度依據
技術規格書 B 廠商 具體怎麼設定
SOP + 表單 日常運作 Image 上架申請流程、廠商權限申請
合規對照表 稽核 資安法應辦事項 ↔ 怎麼做到的

設計原則

更大的圖景

資安治理的本質不是技術,是信任的制度化。

沒有治理時,系統安全完全依賴「信任廠商不會亂搞」。規模一大就失控——不是因為廠商有惡意,而是因為沒有機制確保每個人都做到該做的事。

六層架構的本質是把「信任」從「相信人會做對的事」轉換為「平台確保只有對的事能被做」。RBAC 確保只有被授權的人能操作、Admission Controller 確保只有合規的 image 能跑、Runtime Monitoring 確保跑起來後有人盯著——每一層都是在用技術機制取代人的自律。

對 SI 而言,這也是商業模式的轉變:不是賣一份報告,而是幫客戶建立一套即使 SI 離開了也能持續運作的治理機制


參考資料