跳至主要内容

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

GitHub 拥有多个安全功能,可以增强您使用和发布的操作的安全性。

关于 GitHub 的安全功能

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

本文将解释如何使用一些 GitHub 的安全功能来提高您对 GitHub Actions 使用的安全性。

了解工作流中的依赖项

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

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

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

在依赖关系图中,依赖项会根据漏洞严重性自动排序。如果您使用的任何操作都有安全建议,它们将显示在列表的顶部。您可以从依赖关系图导航到建议,并访问解决漏洞的说明。

公共存储库已启用依赖关系图,您可以选择在私有存储库上启用它。有关使用依赖关系图的更多信息,请参阅“探索存储库的依赖项”。

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

对于市场上提供的操作,GitHub 会审核相关的安全建议,然后将这些建议添加到 GitHub 安全建议数据库。您可以搜索您使用的操作的数据库,以查找有关现有漏洞的信息以及如何修复它们的说明。为了简化您的搜索,请在GitHub 安全建议数据库中使用 GitHub Actions 过滤器。

您可以设置您的存储库,以便:

监控工作流中的操作

您可以使用 Dependabot 来监控工作流中的操作,并启用 Dependabot 警报以在您使用的操作存在报告的漏洞时通知您。Dependabot 会扫描已启用它的存储库的默认分支以检测不安全的依赖项。当向 GitHub 安全建议数据库添加新的建议或您使用的操作被更新时,Dependabot 会生成 Dependabot 警报。

注意

Dependabot 仅为使用语义版本控制的易受攻击的操作创建警报,不会为固定到 SHA 值的操作创建警报。

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

您可以在存储库的 Dependabot 警报选项卡中查看所有打开和关闭的 Dependabot 警报以及相应的 Dependabot 安全更新。有关更多信息,请参阅“查看和更新 Dependabot 警报”。

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

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

  • 添加、删除或更新了哪些依赖项,以及发布日期。
  • 有多少项目使用这些组件。
  • 这些依赖项的漏洞数据。

如果您对工作流所做的任何更改都被标记为易受攻击,您可以避免将它们添加到您的项目中,或将它们更新到安全版本。

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

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

Screenshot of a workflow run that uses the dependency review action.

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

保持工作流中的操作安全和最新

您可以使用 Dependabot 来确保存储库中使用的操作和可重用工作流的引用保持最新。操作通常会通过错误修复和新功能进行更新,以使自动化流程更快、更安全、更可靠。Dependabot 会自动为您完成此操作,从而无需您费力维护依赖项。有关更多信息,请参阅“使用 Dependabot 保持操作最新”和“关于 Dependabot 安全更新”。

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

  • Dependabot 版本更新在发布新版本时打开拉取请求以将操作更新到最新版本。
  • Dependabot 安全更新打开拉取请求以将具有报告漏洞的操作更新到最小的已修补版本。

注意

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

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

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

保护您创建的操作

GitHub 支持发布和维护操作的人员与漏洞报告者之间的协作,以促进代码安全。存储库安全建议允许公共存储库的维护者私下讨论和修复项目中的安全漏洞。在协作修复后,存储库维护者可以发布安全建议,以公开向项目的社区披露安全漏洞。通过发布安全建议,存储库维护者可以使他们的社区更容易更新软件包依赖项并研究安全漏洞的影响。

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

  • 使用依赖关系图中的相关者视图查看哪些项目依赖于您的代码。如果您收到漏洞报告,这将使您了解需要与谁沟通有关漏洞以及如何修复它。有关更多信息,请参阅“探索存储库的依赖项”。
  • 使用存储库安全建议来创建安全建议,私下协作以在临时的私有分支中修复漏洞,并在发布补丁后发布安全建议以提醒您的社区存在漏洞。有关更多信息,请参阅“配置存储库的私有漏洞报告”和“创建存储库安全建议”。