獨享實體節點安全模型

釐清雲端 Mac 的安全邊界

每筆訂單對應一台租期明確的獨享實體機,而非虛擬機。ZoomMini 負責實體節點與控制台的運作,客戶負責系統帳戶、應用程式設定、程式碼、機密資訊與備份。邊界清楚,權限才能被稽核與撤銷。

  • 1 筆訂單對應 1 台獨享實體機
  • 分層管理遠端入口、系統權限與應用程式機密
  • 所有節點全年 365 天正常運作
安全邊界 訂單隔離檢視
實體層 獨享 Mac mini 訂單租期內不與其他客戶共用系統環境
入口層 控制台與遠端連線 裝置狀態、位址、連線說明
系統層 帳戶與權限 客戶設定唯一帳戶與最低權限
工作負載層 程式碼、金鑰與建置 客戶控管儲存、輪換與移出
邊界可識別 實體/存取/工作負載
隔離模型

實體隔離解決共用資源爭用,權限隔離仍需由客戶設定

獨享實體機將客戶工作負載置於明確的裝置邊界內,但裝置獨享不代表所有帳戶、遠端入口與應用程式憑證會自動安全。真正可執行的隔離模型由實體層、控制層、系統層與工作負載層共同組成。

實體節點邊界

每筆有效訂單對應一台獨享實體機與一段明確租期。裝置不是共用虛擬機,處理器、記憶體與本機儲存空間不會以多租戶虛擬工作階段的形式分配給其他客戶。

  • 邊界物件訂單、裝置、節點、租期
  • 核對位置控制台中的執行個體詳細資料
  • 客戶操作確認裝置識別碼與租期起訖資訊

遠端入口邊界

控制台用於查看裝置狀態與連線資訊;VNC、螢幕共享與 SSH 用於進入系統。控制台工作階段與作業系統工作階段屬於兩個權限面,應分別保護,不應共用弱憑證。

  • 圖形操作使用 VNC 或螢幕共享
  • 自動化工作優先使用受控 SSH 金鑰
  • 異常處理先限制入口,再檢查系統工作階段

系統權限邊界

取得遠端位址不應自動擁有全部系統權限。管理員權限、日常開發帳戶、CI runner 與臨時疑難排解帳戶應分開,依工作授予權限,工作完成後立即撤銷。

  • 管理員僅用於系統層級變更
  • 開發帳戶用於日常互動工作
  • Runner僅取得建置所需的目錄與指令權限
存取控制

讓每次登入都可歸屬、可限制、可撤銷

存取控制的目標不是增加登入步驟,而是讓團隊能回答三個問題:誰曾進入裝置、使用了哪些權限,以及離開專案後是否已失去存取能力。

  1. 01

    為人員配置唯一帳戶

    不要讓多人長期共用同一個系統帳戶。唯一帳戶能將終端機歷史記錄、檔案擁有權、runner 操作與疑難排解記錄連結至明確人員,也能在成員離開團隊時單獨撤銷存取權。

  2. 02

    SSH 優先使用金鑰驗證

    為不同人員與自動化工作使用不同金鑰,記錄金鑰用途與持有人。私鑰只應保存在受控終端機或金鑰系統中,不要透過工單、電子郵件、聊天記錄或程式碼儲存庫傳遞。

  3. 03

    依工作授予最低權限

    日常建置不應持續使用管理員權限。為 CI runner 限定工作目錄、儲存庫範圍與必要指令;需要臨時提升權限時,先確認變更目的,完成後恢復原有權限。

  4. 04

    依風險與人員變動輪換憑證

    團隊應依內部政策定期輪換系統密碼、SSH 金鑰與儲存庫權杖。發現成員離開團隊、裝置轉交、金鑰外洩或異常登入時,應立即輪換,不要等到例行週期。

  5. 05

    清理失效入口

    刪除不再使用的公開金鑰、帳戶、runner 註冊、遠端桌面儲存項目與自動化工作。只停用人員帳戶卻保留共用權杖,仍會留下難以追查的持續存取路徑。

資料保護

程式碼與金鑰的控制權掌握在客戶手中

ZoomMini 提供裝置與遠端入口。客戶決定哪些程式碼、建置產物、測試資料與機密資訊進入裝置,也負責在租期結束前完成驗證、備份與移出。

傳輸通道

依工作類型選擇 VNC、螢幕共享或 SSH 進行遠端操作。連線前核對控制台提供的位址與裝置資訊;SSH 首次連線時核對主機指紋,發現變更應先停止連線並調查原因。

應核對
節點、位址、主機指紋、帳戶
應避免
跳過身分核對後直接接受連線

程式碼與機密資訊

儲存庫憑證、簽署材料、部署金鑰與服務權杖由客戶自行管理。優先使用受控金鑰系統依工作注入,設定有效範圍與撤銷途徑,不要將機密資訊寫入版本庫。

應核對
用途、範圍、持有人、輪換方式
應避免
明文設定、在腳本中硬編碼、多人共用權杖

日誌去識別化

提交疑難排解資訊前,移除密碼、私鑰、完整權杖、完整支付憑證與無關個人資料。保留問題時間、指令、錯誤碼與必要脈絡,避免刪除過多而無法重現問題。

建議保留
時間點、錯誤碼、版本、重現步驟
必須移除
密碼、私鑰與完整機密資訊

租期結束前移出

在到期時間前移出程式碼、建置產物、日誌與業務資料,並確認備份可讀取。接著撤銷儲存庫權杖、部署憑證與 runner 註冊,刪除不再需要的本機副本。

完成標準
資料已移出、備份可驗證、存取權已撤銷
核對位置
控制台中的裝置狀態與到期時間
到期前執行順序

不要把「已經複製」當成「已完成移出」

1. 清點列出程式碼、產物、快取、日誌與機密資訊
2. 複製移轉至客戶控管的目標儲存空間或新環境
3. 驗證抽查檔案完整性並執行必要的還原測試
4. 撤銷輪換權杖、解除 runner 綁定、移除遠端權限
CI/CD 安全

建置機可以持續上線,機密資訊不應持續暴露

持續整合環境通常擁有儲存庫讀取、簽署、測試與發布權限。應將這些能力拆分為獨立機密,依流水線階段注入,並確保每項機密都能單獨輪換與撤銷。

01

儲存庫存取

權杖只涵蓋所需的儲存庫與操作。僅負責擷取的 runner 不應取得管理權限,臨時工作不應重複使用長期發布權杖。

限制範圍
02

建置與測試

runner 使用獨立帳戶與工作目錄。依賴快取應可驗證來源,建置腳本避免輸出環境變數與要求標頭中的機密資訊。

隔離帳戶
03

簽署材料

簽署憑證與相關私鑰放入受控金鑰系統,僅在需要簽署的工作中注入。工作完成後清理暫存檔案與程序環境。

依需注入
04

發布憑證

發布權杖與儲存庫權杖分開,測試流水線不能繼承正式環境發布權限。人員或專案變動時,應能單獨撤銷而不影響其他工作。

獨立撤銷
提交前檢查

在腳本與日誌中尋找機密資訊外洩途徑

檢查建置腳本是否列印環境變數、錯誤處理是否回顯完整指令、快取目錄是否包含憑證檔案,以及產物封存是否意外收錄設定檔。發現機密資訊進入日誌後,不只要刪除日誌,還要輪換對應憑證。

pipeline-security-check
$ git grep -nE "TOKEN|PRIVATE_KEY|PASSWORD" -- .
$ find build/ -type f -name "*.env" -o -name "*.key"
$ security find-identity -v -p codesigning
$ launchctl list | grep runner

檢查結果:
✓ 儲存庫中未發現明文機密
✓ 建置封存未包含憑證檔案
✓ runner 使用獨立系統帳戶
✓ 簽署材料由受控流程注入
運作狀態

以明確目標與事件記錄說明服務運作情況

ZoomMini 的服務可用率目標為 99.9%。所有節點全年 365 天正常運作;運作記錄按日呈現,事件標記用於提示需要複核的狀態變更,不直接等同於整日無法使用。

服務可用率目標 99.9% 適用於服務條款所定義的統計與審核口徑
近 90 天每日狀態 每條狀態列代表 1 天
正常運作記錄 事件標記

若客戶認為服務未達目標,應透過控制台提交工單,提供訂單識別碼、節點、受影響時段、可重現現象與去識別化日誌。符合條件的請求將依服務條款審核,並以服務額度賠付。

查看服務條款與審核口徑
安全事件處理

先限制持續存取,再保留足夠證據

疑似帳戶異常、未授權存取或機密外洩時,應避免一邊持續執行高權限工作,一邊等待完整結論。先縮小影響範圍,再保存必要記錄、通知支援團隊並輪換機密資訊。

  1. 01

    識別異常範圍

    記錄發現時間、裝置識別碼、節點、異常帳戶、相關程序與受影響工作負載。區分控制台異常、系統帳戶異常、儲存庫權杖異常與應用程式行為異常,避免將不同權限面混為一談。

    輸出初始時間線與受影響物件
  2. 02

    限制持續存取

    暫停可疑自動化工作、撤銷異常工作階段、停用相關帳戶或公開金鑰,並限制高風險權杖。不要為了保留現場而讓已知異常存取持續擴大;限制操作本身也要記錄時間與執行人。

    輸出已撤銷入口與暫停工作清單
  3. 03

    保留必要日誌

    保存與事件相關的登入記錄、指令歷史、runner 輸出、程序資訊與錯誤碼。匯出前完成去識別化,不要傳送密碼、私鑰、完整支付憑證或與事件無關的個人資訊。

    輸出去識別化日誌與重現線索
  4. 04

    通知支援團隊

    透過控制台工單或 support@zoommini.com 提交訂單識別碼、節點、發生時間、已執行的限制操作與去識別化日誌。若仍存在持續風險,請在主旨中明確標示「安全事件」,以便快速分流。

    輸出可直接開始調查的事件說明
  5. 05

    輪換機密並驗證復原

    依影響範圍輪換系統憑證、SSH 金鑰、儲存庫權杖、runner 金鑰、簽署材料與部署憑證。復原工作前確認舊憑證已失效、新權限符合最低範圍,且異常程序不再存在。

    輸出輪換記錄與復原驗證結果
提交時包含

讓支援團隊能直接開始定位的資訊

訂單識別碼用於定位對應的實體節點
節點與裝置核對事件發生的環境邊界
問題時間註明時區與首次發現時間
重現步驟說明觸發條件與預期結果
已執行操作列出停用、撤銷與輪換操作
去識別化日誌保留錯誤碼,不附機密資訊
責任邊界

基礎設施由 ZoomMini 運作,工作負載由客戶控管

清楚的責任邊界能減少疑難排解時的等待與重複確認。實體節點、控制台與裝置交付屬於 ZoomMini 的運作範圍;進入系統後的帳戶、應用程式、程式碼、機密資訊與備份則由客戶控管。

ZoomMini 與客戶的資料保護及安全責任對照
控制領域 ZoomMini 負責 客戶負責 建議核對項目
實體節點 裝置與訂單的獨享對應關係、節點基礎運作、控制台中的裝置狀態。 依訂單用途使用裝置,並在租期內完成工作負載管理與資料移出。 裝置識別碼、節點、租期起訖時間。
控制台帳戶 提供帳戶存取、訂單管理、執行個體狀態與工單入口。 保護登入憑證、識別異常存取,並及時更新或撤銷相關權限。 近期存取、訂單變更、工單記錄。
遠端連線 在控制台提供對應裝置的連線資訊與狀態說明。 核對位址與主機指紋、保護遠端憑證、設定可信任的用戶端。 節點、位址、指紋、連線帳戶。
系統帳戶 提供可使用的 macOS 圖形介面與命令列環境。 建立唯一帳戶、執行最低權限、輪換憑證、移除離隊成員。 帳戶清單、公開金鑰清單、管理員權限。
應用程式與 CI/CD 維持實體節點與控制台的服務運作。 管理 Xcode、相依套件、runner、腳本、儲存庫權限與發布流程。 runner 帳戶、工作目錄、權杖範圍。
程式碼與金鑰 不代替客戶決定程式碼與機密資訊的存放、授權及輪換策略。 使用受控金鑰系統,避免以明文寫入腳本、儲存庫與日誌。 機密用途、範圍、持有人、撤銷方式。
日誌與支援 根據工單資訊調查實體節點與控制台相關問題。 提交準確時間、重現步驟與去識別化日誌,不要傳送機密資訊。 錯誤碼、版本、時間線、已執行操作。
備份與移出 在控制台呈現訂單與裝置的租期資訊。 制定備份策略、驗證可復原性,並在租期結束前移出資料。 備份完整性、復原測試、權杖撤銷。
ZoomMini 運作範圍

實體節點與控制台

訂單對應的獨享實體機、節點基礎運作、裝置狀態、訂單管理入口與支援工單處理。

客戶控管範圍

系統帳戶與工作負載

作業系統權限、遠端憑證、應用程式設定、程式碼、金鑰、建置流水線、日誌去識別化、備份與移出。

共同處理範圍

事件定位與復原驗證

客戶提供訂單、節點、時間線與去識別化日誌;ZoomMini 依邊界定位基礎設施狀態,雙方分別完成各自權限面的驗證。

下一步

先確認邊界,再將工作負載移入獨享節點

選擇合適的機型與租期後,依唯一帳戶、SSH 金鑰、最低權限、受控金鑰注入與到期移出清單設定環境。