工程指南

GitHub Actions macOS Runner 的 iOS 簽名金鑰放哪?2026 企業選型

GitHub Actions macOS Runner 的 iOS 簽名金鑰放哪?2026 企業選型

症狀:不同儲存庫共用一台持久化 macOS Runner,iOS 發布金鑰可能留在建置環境中。
最快解法:不要長期保留簽名私鑰;只讓受信任的發布工作流取得最小權限憑據,在隔離任務中匯入 macOS 臨時鑰匙串,並驗收任務後的清理證據。

本文適合負責簽名憑據保管、授權與撤銷流程的企業 IT 及安全負責人。
平台工程師可據此設計 GitHub Actions macOS Runner 的憑據注入和清理流程。
iOS 技術負責人則可用文中的條件,判斷現有共享建置節點是否適合承載生產簽名工作。

先分清憑據保管、工作流授權與執行時使用

GitHub Actions macOS Runner 的 iOS 簽名金鑰管理,不能只回答「金鑰放在哪裡」。長期憑據保管、工作流是否有權取得憑據,以及建置程序如何在 macOS 上使用簽名身份,是不同控制邊界;任何一層都不能代替其他層。

Apple 說明程式碼簽名身份涉及憑證與對應私鑰。這代表匯入憑證的程序若能使用私鑰完成簽名,該執行環境就應納入風險評估,而不能只把 .p12 檔案視為唯一需要保護的物件。可對照 Apple 對程式碼簽名憑證與私鑰的說明。

控制位置 主要責任 不能據此推定的事
GitHub Secrets 或外部憑據庫 保管憑據、設定可用範圍或存取規則;具體能力以所選平台文件及設定為準 憑據已進入工作流後,Runner 就具有隔離性
GitHub Actions 工作流 決定哪些工作流可以要求使用憑據,以及工作流的權限 有審批或 Secrets 授權,就能阻止同一主機上的其他任務接觸殘留資料
macOS 鑰匙串 在簽名工作執行時供程序使用簽名身份 鑰匙串是合適的長期憑據保管庫
Runner 與建置任務 執行工作、承載工作目錄和作業系統狀態 任務結束時,腳本成功便能證明所有憑據都已移除

GitHub 文件說明 Secrets 可用於工作流,但仍須按其設定方式及存取範圍評估;可參照 GitHub Actions Secrets 文件。外部憑據管理方案則應逐項核對其存取控制、輪換流程與稽核記錄,不應只因「存在外部保管庫」便假設建置節點不會接觸明文憑據。

長期保管方案應按責任與稽核能力比較

GitHub Actions Secrets 與外部憑據庫處理的是保管和授權問題,不是 macOS 執行環境本身的隔離。選型時要把憑據由誰建立、誰負責輪換、哪些工作流可使用,以及出事後能否追查列為不同問題。

評估指標 GitHub Actions Secrets 外部憑據管理方案
憑據保管 可將憑據設定為工作流可用的 Secrets,實際可見範圍依設定類型及儲存庫結構核對 依方案文件確認保管方式、存取授權及可用介面
工作流授權 檢查儲存庫、環境及工作流設定,避免把發布憑據暴露給不需要它的工作 檢查工作流如何取得憑據、憑據如何授權給執行者
輪換責任 明確指定負責更新憑據、驗證新憑據及撤銷舊憑據的人員或流程 除確認方案本身支援的功能外,也要確認企業內部誰負責執行與留存紀錄
稽核證據 依官方文件及組織設定核對可取得的記錄,不推定所有使用細節都可追蹤 逐項核對可查詢的存取記錄、保存方式及稽核範圍
執行時風險 Secrets 被工作流使用時,Runner 仍要按其持續狀態和共享方式評估 憑據由外部來源取得後,仍會進入執行過程,不能跳過 Runner 隔離評估

GitHub 對工作流安全使用的說明提醒,第三方 Action、工作流程式碼及權限配置都會影響風險評估,參見安全使用 GitHub Actions 的官方指引。若選用外部憑據庫,企業仍需驗證其取用流程與工作流授權,並把供應商文件中未明確承諾的能力視為待查項目,而非既成事實。

實際成本也不應只比較保管服務的費用。至少要納入維護 Runner 與憑據設定的人力、節點更新及故障處理、憑據輪換與撤銷,以及稽核證據保存等項目。若採購比較涉及遠端 Mac,應先依團隊作業方式盤點環境需求,再參閱 ArmMacs 的租用方案;不能在沒有實際價格和用量資料時,直接宣稱租用或購置哪一種一定更便宜。

執行時用臨時鑰匙串,不等於任務已隔離

簽名身份需要在建置執行階段可供簽名程序使用。Apple 提供建立鑰匙串的安全性介面,說明可在程式執行時建立鑰匙串;這是執行控制的參考,不代表單靠建立臨時鑰匙串就能保證私鑰清除。可查閱 Apple 的臨時鑰匙串介面說明。

實作上,團隊應把建置帳戶、鑰匙串檔案、工作目錄與暫存憑據一起檢查。若多個儲存庫或不同信任等級的工作流輪流使用同一個持久化 Runner,僅改用不同工作目錄,不能證明作業系統狀態彼此隔離。GitHub 對自託管 Runner 的說明也要求使用者評估由工作流執行所帶來的環境風險,參見自託管 Runner 文件。

注意:把鑰匙串刪除命令放進工作流程,只能證明工作流程包含這項動作;清理是否完成、取消或失敗時是否執行,以及其他位置是否還有副本,都必須在實際環境驗證。

可採用以下操作步驟建立可稽核的執行流程:

  1. 盤點憑據與使用者。 列出簽名憑證、對應私鑰、provisioning profile,以及哪些儲存庫和發布流程需要使用。不要將任何真實金鑰或令牌寫入文件、工單或日誌。
  2. 選定長期保管來源。 由責任人決定使用 GitHub Secrets 或經核實的外部憑據管理方案,並記錄誰可設定、誰可授權、誰負責輪換及撤銷。
  3. 限制工作流入口。 只向受信任的發布工作流提供所需憑據;核對工作流權限、第三方 Action 來源及環境審批設定。GitHub 的 部署環境文件可用於核對環境與審批設定,但審批不是主機隔離。
  4. 隔離建置任務。 將生產簽名工作與不受信任的分支、外部貢獻者工作流及其他團隊任務分開評估。工作流權限可按 GitHub 的工作流語法文件核對;權限收斂仍不能取代 Runner 邊界。
  5. 在任務執行時匯入。 建立臨時鑰匙串,將簽名身份匯入供本次簽名使用的環境;避免把憑據寫入版本控制、永久工作目錄或輸出日誌。
  6. 設計退出與失敗路徑。 將登出或鎖定、移除臨時鑰匙串、清理憑據檔案與工作目錄列入流程,並檢查工作取消、簽名失敗及 Runner 中斷時的處理。
  7. 保存驗收證據。 以無敏感內容的記錄證明工作流使用了預期憑據來源、簽名步驟完成、清理流程被觸發,並由具權限的人員檢查節點是否仍有可用的簽名身份。不得把單一腳本的成功狀態等同於完整清除證明。

若團隊需要進一步確認共享 Mac 的帳戶及存取安排,可先檢視 ArmMacs 的支援與環境說明,再依實際服務內容核實,不應將一般產品說明推定為特定的簽名隔離承諾。

權限與清理驗收決定生產簽名能否上線

受信任分支、發布環境審批與最小權限令牌,都應納入授權檢查;但這些設定回答的是「工作流能否取得或執行某項操作」,不會自動把持久化共享 Runner 轉變成彼此隔離的執行環境。GitHub 對安全使用及自託管 Runner 的文件可作為平台邊界參照,具體控制仍須依企業自己的 Runner 架構實測。

驗收項目 團隊需留下的證據 未能驗證時的處理
憑據授權 儲存庫、環境及工作流設定的核對結果;具體誰能觸發發布 縮小憑據可用範圍,暫停共享節點上的生產簽名
身份匯入 匯入流程、執行帳戶及臨時鑰匙串使用情況;記錄不得包含秘密值 在隔離測試環境重做驗證
簽名呼叫 可辨識工作及結果的非敏感建置記錄 檢查簽名工具輸出,避免將憑據內容寫入日誌
任務清理 清理動作、失敗與取消路徑的檢查紀錄,以及節點上的實際檢查 不把清理腳本的成功回傳視為已證明無殘留
共享邊界 Runner 使用者、工作目錄與可執行工作流範圍的盤點 先分隔 Runner 和憑據權限,再安排生產發布

以上屬於團隊的驗收控制,不是 Apple 或 GitHub 對所有企業環境訂定的通用強制要求。簽名身份如何同步與使用,可參照 Apple 的團隊簽名身份說明;但團隊仍須按自身節點、帳戶與憑據注入方式檢查實際效果。

按團隊信任邊界選型

對照現有方案時,長期自管 Mac 可能涉及硬體折舊、更新維護及故障處理;一般共享節點則可能增加權限協調、任務互相影響與清理驗證的負擔。租用遠端 Mac 可作為另一種建置環境選項,但不會自動解決憑據授權或 Runner 隔離問題;企業仍須按租用環境的實際帳戶、存取方式和驗收證據逐項確認。若團隊缺少可隔離的 macOS 試點環境,可向 ArmMacs 了解遠端 Mac 是否符合試點及驗收需求;若工作負載長期穩定且需要專用實體硬體,購置自有設備也可能更合適。最後應以簽名任務清單、Runner 共享範圍、權限設定和真實清理紀錄作為上線依據。

常見問題

自託管 macOS Runner 適合長期保存 iOS 簽名私鑰嗎?

不建議把私鑰長期留在可重複執行不同工作流的共享 Runner。自託管節點會持續保留其作業系統與工作目錄狀態,清理腳本成功也不能單獨證明沒有殘留。應改用受控憑據注入及任務隔離;若無法驗證隔離邊界,先分開 Runner。

GitHub Secrets 和 macOS 鑰匙串,哪個才是簽名憑據的存放位置?

兩者用途不同。GitHub Secrets 或外部憑據庫負責憑據保管與授權入口;macOS 鑰匙串則供建置程序在執行期間使用簽名身份。簽名工作通常需要憑據進入建置環境,因此不能把加密存放誤當成執行環境隔離。

如何避免不同儲存庫的建置工作讀取同一台 Mac 上的簽名憑據?

先分開不受信任與生產發布工作流的 Runner,再限制哪些工作流可取得發布憑據。只使用不同工作目錄或不同儲存庫的 Secrets,不能證明同一台持久化 Mac 上的作業系統狀態彼此隔離;驗收時應檢查帳戶、鑰匙串及工作目錄邊界。

GitHub Actions 工作結束後,匯入鑰匙串的簽名金鑰要怎麼處理?

將匯入、簽名及移除鑰匙串納入同一工作流程,並在失敗與取消路徑中檢查清理行為。另行核對鑰匙串檔案、工作目錄、暫存憑據和日誌;只有腳本回傳成功不足以證明金鑰已清除,還需保留實際環境的驗收紀錄。

延伸閱讀

ArmMacs 雲端 Mac

為 iOS 簽署流程配置專用 Mac Runner

透過 ArmMacs 租用獨享實體 Mac,按發佈衝刺或 CI/CD 週期選擇租期,執行自託管 macOS Runner。

選擇機型並訂購