如何限制GitHub Actions仅在指定分支执行以保护仓库级密钥?
GitHub仓库级限制工作流运行分支方案
首先明确:存在无需逐个修改工作流的仓库级配置项,可完全覆盖你提到的恶意协作者提交恶意分支窃取密钥的场景,可通过以下两种方案组合实现最佳防护:
方案1:全局分支规则限制工作流触发
通过仓库分支规则集配置,直接阻断非受信分支的所有工作流运行,从源头避免恶意工作流执行:
- 进入仓库「Settings」页面,在左侧菜单栏找到「Code and automation」→「Rules」→「Rulesets」
- 点击新建分支规则集,在「Target branches」中配置规则适用范围:选择「Include all branches」,再在「Exclude by name or pattern」中添加你允许运行工作流的受信分支(如
main、release/*等) - 在「Rules to apply」列表中找到「Block GitHub Actions runs」并开启
- 保存规则后,所有不在受信列表中的分支推送、PR都无法触发任何工作流执行,就算协作者提交恶意工作流文件也不会运行
方案2:敏感密钥绑定受保护环境(兜底防护)
作为规则疏漏的兜底方案,从密钥访问层面限制非受信分支的权限:
- 进入仓库「Settings」→「Code and automation」→「Environments」,新建一个受信环境
- 开启环境配置中的「Deployment branches」选项,选择「Selected branches」,仅添加你允许的受信分支
- 删除原有的仓库级密钥,将所有敏感密钥迁移到该受信环境的密钥配置中
- 原有需要使用密钥的工作流,仅需在顶层添加一行
environment: 你创建的受信环境名即可正常读取密钥 - 配置完成后,非受信分支就算异常触发工作流,也无法获取该环境下的任何密钥,自然不会出现密钥泄露问题
可选强化配置
你还可以在仓库「Settings」→「Actions」→「General」→「Workflow permissions」中,将工作流默认权限设置为最低的「Read repository contents and packages permissions」,关闭不需要的额外权限,进一步降低风险。
内容的提问来源于stack exchange,提问作者pkaramol
相关产品推荐
相关产品推荐

