限時優惠

OpenClaw 製品出口與最小權限:預簽名 URL、短時 STS 與 Runner 完整性校驗——雲 Mac 構建物入庫與審計鏈路設計

OpenClaw openclaw
2026-05-09 約 9 分鐘閱讀

OpenClaw 調度到獨佔雲 Mac Runner 後,真正的風險往往不在編譯本身,而在製品離開 Runner 的那一刻:長期雲端金鑰、過寬的儲存區策略、缺少清單校驗的上傳,都會在覆盤時變成「說不清是誰寫了哪個物件」。本文依工程順序固定預簽名 URL、短時 STS、完整性校驗與審計欄位四層,讓出庫鏈路可降級、可舉證、可對照 Runbook 執行。

本文要點

  1. Runner 側禁止存放長期雲端帳號金鑰;上傳出口優先預簽名 PUT短時 AssumeRole,並與 repo/sha/job_id 路徑前綴綁定。
  2. STS 工作階段名稱、ExternalId、IAM 策略版本號寫進結構化日誌,拒絕「同一角色打全場」的模糊歸因。
  3. 上傳前產生 manifest.json(逐檔 SHA-256/大小/mtime)並對 manifest 再雜湊;物件儲存側以版本控制不可變前綴承接爭議回放。
  4. 控制面入庫事件應記錄:trace_idrunner_idpolicy_version、物件鍵、ETag/VersionId 與憑證指紋(截斷雜湊)。
辦公桌上的筆電與文件,象徵構建產出與安全出庫流程
製品出庫較適合畫成「Runner → 短時憑證 → 限定前綴物件鍵 → 控制面入庫確認」四跳;封面為氛圍示意。

1. 威脅模型:把「能寫儲存區」縮成「能寫這一條鍵」

預設 Runner 行程空間可被惡意任務讀取環境:任何靜態 AWS_ACCESS_KEY_ID 級別金鑰最終都會進日誌、crash dump 或供應鏈腳本。最小權限的第一刀是按任務頒發寫權限:要嘛控制面為單次上傳 mint 預簽名 URL(HTTP PUT,Content-Type 固定,過期 5–15 分鐘),要嘛下發STS 暫時工作階段,內嵌策略只允許 s3:PutObjectarn:…:prefix/${tenant}/${repo}/${sha}/…。兩者都要拒絕 ListBucket 與刪除類動作,除非你有獨立的 GC 服務帳號。

與佇列容量、租戶配額與出口形態相關的權衡,可對照 OpenClaw 執行策略與 Runner 畫像:風險分級路由、租戶配額與人工閘——把雲 Mac 算力封裝成受控執行面:把「上傳併發 × 單次物件大小 × 預簽名視窗」放在同一頁評審材料裡,避免上傳風暴把邊緣簽發服務打滿。

2. 預簽名 URL:短壽命、單意圖、可觀測

預簽名 URL 讓 Runner 無需常駐雲端 SDK 設定:控制面驗簽任務後下發 URL,並同步預期物件鍵最大位元組數。日誌至少包含 upload_intent_id、簽發/過期時間與簽章演算法;若 Runner 回報的 ETag 與控制面 HeadObject 不一致,應判部分失敗並走補償,而非靜默覆寫。

大型目錄可拆「清單+分塊」,塊鍵仍落在同一 sha 前綴,便於依提交列舉與銷毀。配額與暫存樹膨脹會直接拖慢 manifest 掃描,可對照 Apple Silicon 雲 Mac Runner 磁碟與 inode 治理:Derived Data、容器層、統一日誌與快取——配額告警、分層清理與套餐儲存邊界的容量規劃 的分層清理順序一起檢視。

3. 短時 STS:工作階段就是審計的第一公民

若必須讓 Runner 直接呼叫 SDK(例如 multipart 或需要伺服器端加密參數),請以 AssumeRole 頒發≤15 分鐘的工作階段,並在 RoleSessionName 嵌入 tenantjob_id(注意長度與字元集限制)。配合帳戶側 sts:ExternalId 防止混淆代理人問題;IAM 策略裡以條件鍵限制 s3:prefixaws:userid。日誌側至少列印:assumed_role_idpolicy_versionfederated_from(OIDC 主體)——與後續法務舉證對齊。

Apple 平台產出若還需 codesign、公證與 stapler,上傳前的「簽章執行緒」與「出庫執行緒」應分離:出庫層永遠碰不到 p12,只提交「已簽章製品的 digest 與路徑宣告」,並與鑰匙串/發佈憑證的生命週期對齊。

4. Runner 完整性校驗:manifest 優於口頭約定

在上傳前由 Runner 產生 manifest.json:列出相對路徑、長度、SHA-256;再對 manifest 檔案本身計算 manifest_sha256。控制面入庫時先校驗 manifest,再接受物件列表;可選疊加程式碼簽章或 SBOM digest,但清單雜湊是底線。遇到快取污染或並行構建寫入同一目錄時,manifest 能在分鐘級定位「哪棵檔案樹不該出現」。

欄位 用途
upload_intent_id 綁定預簽名或 STS 工作階段與物件鍵集合
manifest_sha256 入庫驗收與回放比對
object_version_id/ETag 物件儲存版本舉證
credential_fp 暫時憑證指紋(截斷 SHA),不存金鑰材料

5. 入庫與審計鏈路:讓財務與合規讀得懂

控制面對「上傳完成」寫入不可變事件:OIDC subrunner_idpolicy_version、物件鍵、manifest 與 VersionId。對外分發繼續用短時 GET 簽名;週期清理用獨立角色,與 Builder 分離。

與 OpenClaw「佇列驗簽、Runner 獨佔」一致:出庫/入庫都應是策略驅動,先固定欄位字典再擴併發。

在雲端 Mac 上,製品出庫與觀測更容易對齊

Apple Silicon 統一記憶體與低待機功耗,適合作為長期在線、獨佔槽位的 CI Runner;macOS 原生工具鏈讓簽章與上傳指令稿行為更接近開發者筆電,減少「僅限 Linux Runner」的漂移。把預簽名視窗、STS 工作階段名稱與 manifest 校驗放進同一套日誌與告警後,獨佔雲 Mac 能把「哪次任務寫了哪個前綴」一次說清;Gatekeeper、SIP、FileVault 疊加也讓互動式排障與無人值守收斂到更可預期的攻擊面。

若你正在為 OpenClaw 流水線設計可舉證出庫並希望審計帳本可直接對齊物件儲存版本,kvmboot 雲端 Mac mini M4 是性價比很高的落地起點——立即了解套餐方案,讓 Runner、物件儲存與最小權限策略在同一台穩態機器上閉環。