Brett Cannon:如何使用 GitHub Actio... 笔记

Brett Cannon:如何使用 GitHub Actions 安全地发布到 PyPI

近期涉及 GitHub Actions 工作流的安全事件凸显了其在发布流程中作为潜在漏洞的风险。本文提出了三种使用 GitHub Actions 安全发布至 PyPI 的缓解策略。需特别强调,本文建议仅针对发布流程,而非构建流程,并推荐为两者分别设置独立的工作流。第一步是使用 zizmor 工具识别并修复 GitHub Actions 工作流中的不安全默认配置。这包括运行 zizmor 自动修复问题,并手动处理任何遗留问题。zizmor 标记的三个常见问题包括:默认权限范围过宽、检出(checkout)后凭据持续保留,以及未将操作(actions)锁定到特定提交哈希(commit hash)。为应对权限范围过宽的问题,应将全局权限设置为空,然后显式指定作业级别的权限。对于检出操作,请将 persist-credentials 设置为 false,以防止凭据泄露。将操作锁定到提交哈希而非标签(tags),可防止因恶意代码更新标签而导致的 compromise。gha-update、zizmor 或 Pinact 等工具可帮助自动化此锁定过程。第二个关键策略是将 zizmor 集成到 CI 流水线中。这样做会将任何安全问题报告为私有代码扫描结果,从而提供一份逐步修复的检查清单。第三个也是最后一个推荐步骤是实施 PyPI 的可信发布(Trusted Publishing)。此举消除了管理 API 令牌的需求,并利用 GitHub 的安全基础设施。在配置可信发布时,至关重要的是设置一个 GitHub 环境。在该环境中,要求发布工作流经过审查者审批,可添加关键的批准关卡。即使审批仅由本人完成,此审批流程也能防止发布被意外或恶意触发。通过实施这三步措施,可显著提升通过 GitHub Actions 向 PyPI 发布的安全性。
CdXz5zHNQW_Sp7hMh7V4c.png