1700 字
9 分鐘

GitHub Actions workflow execution protections GA 怎麼設?用 ruleset 限制誰能觸發 CI

GitHub Actions 原本主要由 workflow 裡的 on、branch filter 和 job condition 決定何時執行。這些設定能縮小事件範圍,卻不能集中回答「哪一個人、哪一個 event,或哪一份 workflow 檔案可以讓 CI 進入 runner」。GitHub 已在 2026 年 9 月把 workflow execution protections 從 public preview 推進為正式 GA,讓管理員用 ruleset 在 workflow 開始前限制這些條件。

先講結論:把它當成 workflow 的前置准入層,不是 YAML 裡 on 的替代品,也不是 permissions 或 environment reviewer 的替代品。先用 evaluate mode 觀察會被擋住的 run,再啟用 active ruleset;同時檢查 public repository 對 pull_request_target 的預設政策變更。

GA 版本多了什麼#

GitHub 官方公告的 GA 能力包含 workflow file path targeting、Insights,以及 REST API。它們分別解決「哪一份 workflow 要套政策」、「目前政策會影響哪些執行」,以及「如何把規則放進管理自動化」三個問題。

控制面它回答什麼適合怎麼用
Workflow path rule哪一份 workflow 檔案要套用政策先保護部署、雲端憑證與 OIDC workflow
Actor rule哪一個人、role、GitHub App 或 automation 可以觸發明確列出 maintainer、Dependabot、Copilot 等必要來源
Event rule哪一種 event 可以通過優先盤點 pull_request_targetworkflow_dispatch 與 release event
Evaluate mode 與 Insights啟用前會擋到什麼先收集誤擋案例,再改成 active
REST API如何由平台程式建立、更新或盤點 policy納入 organization/enterprise 的設定漂移檢查

GA 不代表所有 workflow 都會自動變安全。它只是讓前置准入政策有較完整的 targeting、觀察和管理介面;workflow 內的 token、secret、checkout 與第三方 action 仍要各自 review。

這個 protection 解決哪一個邊界#

workflow execution protections 會在 workflow 執行前評估 allow list;未通過的 actor、event 或 target 不會進入一般執行階段。這和 workflow 內的安全設定是不同層次:

控制面它回答什麼何時生效
on、branch/path filter哪些 repository event 會匹配 workflowworkflow 觸發判斷時
Workflow execution protections哪個 actor、event、workflow path 可以通過runner 開始前
permissionsworkflow 取得的 GITHUB_TOKEN 能做什麼job 執行時
Environment reviewers哪個部署 job 需要人工核准、何時可讀取 environment secretsjob 進入環境前

例如 on: workflow_dispatch 只說明 workflow 支援手動執行;它不會單獨限制哪些 repository role 可以按下執行。execution protection 的 actor rule 才是在集中政策中處理「誰能觸發」的控制面。

先從高權限 workflow 做 ruleset#

預設情況下,具有 repository write access 的使用者可能觸發 workflow。這不代表他一定能讀取 production secret 或推送程式碼,但它可能讓一份剛被修改的 workflow YAML 進入 runner;若該 workflow 有過寬權限,風險就會在執行時放大。

建議把導入範圍拆成三層:

  1. 先選 workflow path:列出會使用部署 token、cloud credential、OIDC 或 production environment 的 workflow,不要一開始對整個 repository 的所有檔案套同一種規則。
  2. 再限制 actor 與 event:針對 pull_request_target、手動 workflow_dispatch 和 release 流程做 allow list,並把必要的 Dependabot、Copilot 或 release automation 明確列入。
  3. 最後補最小權限:即使 actor 和 event 通過,仍在 workflow 明確設定 permissions,並讓 production environment 保留獨立 reviewer。

這種分層方式可以讓 policy 只保護真正有影響力的執行面,也比較容易從 Insights 判斷哪條規則造成誤擋。

設定位置與安全導入順序#

官方文件的設定入口在 repository、organization 或 enterprise 的 Actions policy。以 repository 為例:

  1. 開啟 Settings > Actions > Policies
  2. 建立 workflow execution protection ruleset,選擇要 targeting 的 workflow path。
  3. 加入 actor 和 event rules,先選 Evaluate
  4. 透過 Insights 檢查將被拒絕或需要調整的 workflow run。
  5. 確認例外與維運流程後,再切換成 active;需要大量管理時,再評估 REST API。

Evaluate mode 是觀察工具,不是安全封鎖。正式啟用前,應把允許與拒絕案例都放進 rollout 紀錄,避免「看起來有規則」卻沒有真正阻擋。

pull_request_target 要提前做一次盤點#

GitHub 已公告 public repository 的預設 workflow execution policy 將限制 pull_request_target,受影響的 repository 會在 2026 年 11 月 2 日開始套用這項變更。若現有流程依賴 pull_request_target,不要等到日期當天才看失敗訊息,現在就應檢查:

  • 哪些 workflow 使用 pull_request_target,以及是否真的需要高權限上下文。
  • workflow 是否 checkout 或執行來自不受信任 fork 的程式碼。
  • 需要的權限是否可改成 pull_request 加上明確的審查、artifact 或外部服務流程。
  • repository 的 Actions policy 是否使用 GitHub 的 default policy,還是已經有自訂 ruleset。

這項預設政策不會取代 pull_request_target 的安全邊界。即使 actor 與 event 被允許,也不能在高權限上下文中直接執行不可信的 fork 程式碼。需要更完整的風險分層時,也可搭配 疑似惡意 workflow 的保留與核准檢查

啟用前後怎麼驗證#

至少留下以下五類測試案例:

測試要觀察的結果
允許的 maintainer 手動觸發workflow 正常進入 run,token scope 沒有變寬
不允許的 role 觸發run 在執行前被 policy 擋住,沒有 runner side effect
Dependabot/Copilot 等自動來源符合業務需求的 automation 沒被誤擋
被 targeting 的部署 workflow只有明確核准的 actor/event 能進入 workflow
pull_request_target 流程既有 PR、fork 與 secret 行為符合新的 default policy

把被允許與被拒絕的案例都放進 rollout 紀錄。規則只改變「能不能進入 workflow」,不會替你驗證程式碼、secret 或第三方 action,因此仍應保留 build、test 和部署前檢查。

結論:先控准入,再控權限#

GA 後的 workflow execution protections 已經不只是試用中的 actor/event 開關:workflow path targeting、Insights 與 REST API 讓它更適合放進組織級治理。不過安全導入順序仍相同:先盤點高權限 workflow,再用 Evaluate 收集誤擋案例,最後同時檢查 actor、event、permissions、environment reviewer,以及 pull_request_target 的安全邊界。

常見問題#

Q: workflow execution protections 會取代 on 設定嗎?#

A: 不會。on 仍然決定 workflow 監聽哪些事件與分支;execution protections 再往前加一層,限制哪些 actor、event 與 workflow path 可以通過准入。兩者應一起設定,而不是把所有事件交給 ruleset 後刪掉 workflow filter。

Q: GA 之後還能用 Evaluate mode 嗎?#

A: 可以。GitHub 的 GA 公告保留 evaluate mode,讓管理員在正式 enforcement 前觀察政策影響。Evaluate 只用來收集案例,不能取代 active ruleset 的封鎖效果。

Q: 這項功能會讓 workflow 的 GITHUB_TOKEN 自動變成唯讀嗎?#

A: 不會。它控制 workflow 能否被觸發,permissions 才是 GITHUB_TOKEN scope 的控制面。即使 ruleset 已啟用,也要在 workflow 明確設定最小權限,並對 production environment 使用獨立核准。

參考資料:

GitHub Changelog:Workflow execution protections are now generally available

GitHub Docs:Control workflow execution

GitHub REST API:Actions policies

GitHub Docs:Secure use of pull_request_target

GitHub Actions workflow execution protections GA 怎麼設?用 ruleset 限制誰能觸發 CI
https://laplusda.com/posts/github-actions-workflow-execution-protections/
作者
Zero
發佈於
2026-08-10
許可協議
CC BY-NC-SA 4.0
這篇文章有幫助嗎?

回報錯字、失效連結,或告訴我你想看的延伸主題。