GitHub Actions 新增 cache-mode:代理測試流程稽核方案

GitHub 於 2026 年 9 月 10 日宣布,Actions 現已支援在工作流程與作業層級設定 cache-mode。此功能已對所有 GitHub 方案正式開放,可決定任務能否讀取快取、寫入快取、只寫不讀,或完全停用快取。

明亮彩色鉛筆網際網路測試流程讓已驗證構件通過彼此隔離的快取權限閘門

這是 GitHub 的功能,並非 98IP 新產品能力。它與代理測試有關,因為全球 CI 常快取瀏覽器、驅動程式、相依套件、編譯用戶端與測試夾具。若低信任事件能寫入可重用快取,後續可信任務可能還原不應信任的構件。

公開來源說明:GitHub,《Control GitHub Actions cache access with cache-mode》,2026 年 9 月 10 日。

GitHub 更新了什麼

模式可還原可儲存常見用途
read需要核准相依項目的低信任測試
write管理快取生命週期的可信分支建置
write-only只能產生新構件、不能消費舊狀態的任務
none高隔離敏感任務

GitHub 說明,pull_request_target 等低信任事件預設使用 readpush 等可信事件預設使用 write。作業層級設定會覆寫工作流程層級設定;權限也會傳遞到可重用工作流程,被呼叫方不能獲得高於呼叫方的快取權限。

明確設定可覆寫預設值。若低信任事件明確獲得 writewrite-only,GitHub 會顯示警告,因為這會提高快取污染風險。未設定此欄位的既有工作流程繼續沿用原有安全預設值。

代理測試為何需要快取邊界

獲准的代理測試流程可能快取套件管理器下載、瀏覽器與字型、網路測試用戶端、已去識別化夾具、跨地區建置產物和效能基準。但絕不能快取即時代理密碼、Cookie、工作階段權杖、授權標頭、原始客戶資料或住宅出口位址。快取以重用為目標,不適合保存祕密與可變身分狀態。

安全問題不只是「誰能執行任務」,還包括「這個事件能否儲存一個未來由更可信任務還原的構件」。

先盤點事件信任層級

為每個觸發器與可重用工作流程記錄工作流程、事件、來源儲存庫與分支、權限、快取模式、快取鍵輸入、還原鍵範圍、呼叫鏈、祕密與部署權限。

重點檢查來自 fork 的拉取請求、pull_request_target、含使用者輸入的手動觸發、使用寬泛還原鍵的排程任務,以及跨信任域呼叫的可重用工作流程。

不要因為分支名稱看起來正常就認定安全。判斷應依據事件內容、儲存庫關係、受保護環境和實際有效權限。

為不同代理 CI 作業選擇模式

低信任貢獻需要已核准相依項目但不得修改快取時,使用 read,並禁止存取正式代理憑證。受保護預設分支在程式碼已審查且憑證範圍明確時可使用 write,但只能管理狹窄命名空間下的可重現產物。

只需產生全新基準包且不能消費歷史狀態的地區任務,可採用 write-only。驗證、Cookie 邊界、憑證變更或一次性事故夾具測試則應考慮 none,從乾淨環境開始且不寫入可重用狀態。

搭配代理憑證輪替指南,避免長期快取跨越身分驗證變更。

縮小快取鍵範圍

最小權限模式無法修復危險的快取鍵。鍵中應包含儲存庫、工作流程、作業系統、架構、執行階段版本、鎖定檔摘要及構件用途等影響相容性與信任的維度。

不得把祕密放進快取鍵,不使用代理使用者名稱、密碼、權杖、Cookie 或出口 IP 作為鍵材料,也要避免寬泛還原前綴回退到其他工作流程的共享項目。

瀏覽器與代理用戶端版本也是邊界。舊用戶端在 DNS、TLS、連線重用或 HTTP/2 多工上可能不同。curl 8.22 多工連線存續時間檢視說明了版本與連線行為為何必須進入驗證證據。

區分夾具與執行期觀測

經過審查的靜態夾具可以快取,即時觀測通常不可以。公開測試頁面的確定性快照、瀏覽器校驗和清單與編譯測試工具可列為候選;即時回應、客戶 URL、工作階段 Cookie、出口映射、臨時允許清單與事故封包擷取則應進入具保留政策與存取日誌的證據系統。

需要關聯時使用帶密鑰指紋,並移除非必要識別資訊。

稽核可重用工作流程

即使 GitHub 規定被呼叫方不能突破呼叫方的權限上限,仍應驗證完整呼叫鏈:確定發起事件與儲存庫;記錄呼叫方工作流程層級模式;記錄各作業覆寫項;追蹤所有可重用呼叫;確認每個作業的有效模式;證明低信任呼叫方不能儲存;證明 none 任務既不能還原也不能儲存。

同時依供應鏈政策固定第三方 Action、縮減權杖權限,且不要向不需要的任務暴露代理憑證。

建立安全迴歸測試

使用一次性儲存庫與無敏感合成構件:

  1. 可信任務以狹窄快取鍵儲存標記。
  2. read 低信任任務還原標記。
  3. 該任務嘗試替換標記,儲存必須失敗。
  4. write-only 任務證明不能還原舊標記,再寫入獨立新項目。
  5. none 任務證明還原與儲存均不可用。
  6. 可重用工作流程證明有效權限不高於呼叫方。
  7. 後續可信任務確認核准項目沒有被低信任任務修改。

測試不得使用真實祕密或正式代理帳號。即使所有測試構件公開,也不應造成風險。

上線與監控

先在最高風險工作流程明確宣告 cache-mode。監控快取命中率、建置時間、下載量、儲存失敗、警告註記與測試一致性。隔離可能減少寬泛還原並增加時間,應量測成本,不應在未審查時弱化邊界。

跨地區工作節點可依地區與位址家族比較結果,但快取信任與代理路由健康必須分開。快取未命中不是代理故障。代理池隔離與復原指南提供獨立的異常出口狀態模型。

檢查清單

  • [ ] 每種觸發事件都有明確信任分類。
  • [ ] 低信任事件不能儲存可重用快取。
  • [ ] 敏感網路測試依需要使用 none
  • [ ] 快取鍵範圍狹窄且不含祕密。
  • [ ] 寬泛還原前綴已移除或有充分理由。
  • [ ] 可重用呼叫鏈維持呼叫方權限上限。
  • [ ] 即時密碼、Cookie 與回應從不進入快取。
  • [ ] Action 與執行階段版本受控。
  • [ ] 合成測試證明各模式有效行為。
  • [ ] 上線後已量測建置效能變化。

常見問題

read 能讓低信任任務完全安全嗎?

不能。它阻止儲存快取,但不能取代祕密隔離、最小權杖權限、Action 固定、輸入驗證與受保護環境。

所有代理測試都應停用快取嗎?

不需要。經審查的相依項目與確定性構件可以安全受益。若重用狀態與驗證、隱私或事故隔離衝突,則使用 none

cache-mode 能保護已放進快取的祕密嗎?

它能減少存取路徑,但不能讓快取祕密變得合理。憑證、Cookie 與權杖不應進入快取。

快取未命中能證明代理失敗嗎?

不能。快取服務、相依項目下載、代理傳輸與目標行為是不同階段,需要分別記錄。

合規說明

僅對獲准資源與目標執行代理和資料蒐集測試。遵守儲存庫政策、軟體授權、目標條款、隱私規則與速率限制。快取和日誌不得保存憑證,也不得使用代理路由規避存取決定。