Skip to main content

使用 GitHub 的安全功能来保护 GitHub Actions 的使用

GitHub 具有多种安全功能,可以增强你使用和发布操作的安全性。

关于 GitHub 安全功能

GitHub 提供了许多功能,使代码更安全。 可以使用 GitHub 的内置功能来了解工作流所依赖的操作,确保收到有关所用操作中的漏洞的通知,或自动执行使工作流中的操作保持最新状态的过程。 如果发布和维护操作,则可以使用 GitHub 与社区就漏洞以及如何修复漏洞进行沟通。 有关 GitHub 提供的安全功能的详细信息,请参阅“GitHub 安全功能”。

本文将介绍如何使用 GitHub 的一些安全功能来提高 GitHub Actions 的使用的安全性。

了解工作流中的依赖项

可以使用依赖项关系图浏览存储库中工作流所使用的操作。 依赖项关系图是存储库中所存储之清单和锁文件的摘要。 它还将 ./github/workflows/ 中文件识别为清单,这意味着使用语法 jobs[*].steps[*].usesjobs.<job_id>.uses 引用的任何操作或工作流都将解析为依赖项。

依赖项关系图显示了有关工作流中使用的操作的以下信息:

  • 拥有操作的帐户或组织。
  • 引用操作的工作流文件。
  • 操作固定到的版本或 SHA。

在依赖项关系图中,依赖项按漏洞严重程度自动排序。 如果使用的任意操作有安全公告,它将显示在列表顶部。 可以从依赖项关系图导航到公告,并访问用于解决漏洞的说明。

依赖项关系图为公共存储库启用,你可以选择在专用存储库上启用它。 有关使用依赖项关系图的详细信息,请参阅“探索仓库的依赖项”。

了解所使用的操作中的安全漏洞

有关市场上可用的操作,GitHub 会审查相关的安全公告,然后将这些公告添加到 GitHub Advisory Database 中。 可以搜索数据库来了解可用于查找现有漏洞信息的操作以及有关修复这些漏洞方式的说明。 若要简化搜索,请在 GitHub Advisory Database 中使用 GitHub Actions 筛选器。

可以设置存储库,从而:

监视工作流中的操作

可以使用 Dependabot 监视工作流中的操作,并启用 Dependabot alerts 以便在使用的操作有报告漏洞时通知你。 Dependabot 执行对启用存储库的默认分支扫描,以检测不安全的依赖项。 Dependabot 在向 GitHub Advisory Database 添加新公告或更新所使用的操作时,将生成 Dependabot alerts。

注意: Dependabot 仅针对使用语义化版本控制的有漏洞操作创建警报,且不会为固定到 SHA 值的操作创建警报。

可以为个人帐户、存储库或组织启用 Dependabot alerts。 有关详细信息,请参阅“配置 Dependabot 警报”。

你可以在存储库的 Dependabot alerts 选项卡中查看所有打开和关闭的 Dependabot alerts 以及对应的 Dependabot security updates。 有关详细信息,请参阅“查看和更新 Dependabot 警报”。

筛选新工作流或更新工作流中的漏洞操作

开立拉取请求来更新工作流时,最好使用依赖项评审来了解对所用操作所做更改的安全影响。 依赖项审查帮助您了解依赖项变化以及这些变化在每个拉取请求中的安全影响。 它提供了一个易于理解的依赖项变化可视化效果,多差异显示在拉取请求的“更改的文件”选项卡上。 依赖项审查告知您:

  • 哪些依赖项连同发行日期一起添加、删除或更新。
  • 有多少项目使用这些组件。
  • 这些依赖项的漏洞数据。

如果对工作流所做的任意更改标记为了易受攻击,则可以避免将其添加到项目或将其更新为安全版本。

有关依赖项评审的详细信息,请参阅“关于依赖项评审”和“配置依赖项审查”。

可以使用存储库中的 dependency-review-action 对拉取请求强制措施依赖项执行评审。 该操作会扫描拉取请求中包版本更改引入的易受攻击的依赖项版本,并警告你相关的安全漏洞。 这样可以更好地了解拉取请求中发生的变化,并帮助防止漏洞添加到存储库中。

使用依赖项评审操作的工作流运行的屏幕截图。

默认情况下,如果 依赖项审查操作 检查发现任何易受攻击的包,它将失败。 当存储库所有者需要依赖项审查检查才能通过时,失败的检查将阻止拉取请求合并。 有关详细信息,请参阅“关于受保护分支”。

确保工作流中的操作安全且为最新版本

可使用 Dependabot 来确保对存储库中使用的操作 和可重用工作流 的引用保持最新。 操作通常使用漏洞修复和新功能进行更新,以使自动化流程更快速、更安全、更可靠。 Dependabot 使你无需维护依赖项,因为其会自动执行此操作。 有关详细信息,请参阅“使用 Dependabot 保持操作的最新状态”和“关于 Dependabot 安全更新”。

以下功能可以自动更新工作流中的操作。

  • Dependabot version updates 开立拉取请求,以在新版本发布时将操作更新到最新版本。
  • Dependabot security updates 打开拉取请求,将带有所报告漏洞的动作更新为最低修补版本。

注意:

  • Dependabot 仅支持使用 GitHub 存储库语法(例如 actions/checkout@v4)更新 GitHub Actions。 Dependabot 将忽略本地引用的操作或可重用工作流(例如,./.github/actions/foo.yml)。
  • 目前不支持 Docker Hub 和 GitHub Packages Container registry URL。 例如,不支持使用 docker:// 语法引用 Docker 容器操作。
  • Dependabot 支持 GitHub Actions 的公共存储库和专用存储库。 有关专用注册表配置选项,请参阅“dependabot.yml 文件的配置选项”中的“git”。

有关如何配置 Dependabot version updates 的详细信息,请参阅“配置 Dependabot 版本更新”。

有关如何配置 Dependabot security updates 的详细信息,请参阅“配置 Dependabot 安全更新”。

保护已创建的操作

GitHub 可促成发布和维护操作以及漏洞报告程序之人员间的协作,以提升代码安全性。 使用存储库安全公告,存储库维护人员可私下讨论和修复项目中的安全漏洞。 协作得到修补程序后,存储库维护人员可发布安全通知,向项目社区公开安全漏洞。 通过发布安全通知,存储库维护人员可使其社区更轻松地更新包依赖项并对安全漏洞的影响进行调查。

如果你是维护其他项目中使用的操作的人,则可以使用以下 GitHub 功能来增强已发布的操作的安全性。

  • 使用依赖项关系图中的依赖项视图查看哪些项目依赖于你的代码。 如果收到漏洞报告,这会让你了解需要与谁沟通漏洞以及漏洞修复方式的信息。 有关详细信息,请参阅“探索仓库的依赖项”。
  • 使用存储库安全公告创建安全公告,私人协作以修复临时专用分支中的漏洞,并发布安全公告,以便在修补程序发布后向社区提醒该漏洞。 有关详细信息,请参阅“为存储库配置私人漏洞报告”和“创建存储库安全公告”。