管理运行器

已完成

在本部分中,你将了解 GitHub Enterprise Cloud 和 GitHub Enterprise Server 中可用的不同工具和策略,以管理企业中的 GitHub Actions 运行程序的使用。

选择适合工作负载的运行器

两种类型的运行器可以执行 GitHub Actions 工作流:GitHub 托管运行器或自承载运行器。

注意

GitHub 托管运行器仅适用于 Enterprise Cloud。 如果你有 Enterprise Server 实例,则本部分内容对你不适用。

GitHub 托管运行器可提供一种更快、更简单的方法来运行工作流,而自承载运行器是一种高度可配置的方式,可以在你自己的自定义环境中运行工作流。 例如,如果需要使用组织的 IP 地址允许列表或专用硬件配置来运行工作流,请使用自托管运行器。

下表比较了 GitHub 托管运行器与自托管运行器。 使用它来选择适合你的工作负载的运行器。

GitHub 托管运行器 自托管运行器
接收操作系统、预安装包和工具以及自托管运行器应用程序的自动更新。 仅接收自托管运行器应用程序的自动更新。 你负责更新操作系统和所有其他软件。
GitHub 托管和维护。 可以使用已付费的云服务或本地计算机。 也可以根据硬件、操作系统、软件和安全要求进行自定义。
每次执行作业时提供一个干净的实例。 无需在每次执行作业时提供一个干净的实例。
在 GitHub 计划上使用免费分钟数,超过免费分钟数后按每分钟费率进行计费。 可免费使用 GitHub Actions,但需负责运行器计算机的维护成本。

管理企业的运行器

管理企业的运行程序涉及配置和保护 GitHub 托管的运行程序和自承载运行程序,以确保高效且安全的 CI/CD 工作流。 此管理包括设置 IP 允许列表来控制访问、通过限制对特定 IP 地址的运行程序访问以及确保符合组织策略来提高安全性。 正确配置 GitHub 托管的运行程序和自承载运行程序 IP 允许列表对于维护内部应用程序和 GitHub Actions 运行程序之间的安全可靠交互至关重要。 需要定期更新和审查这些配置,以适应 IP 地址范围的变化并保持最佳安全性。

在 GitHub 托管和自承载运行程序上配置 IP 允许列表

配置 IP 允许列表可通过将其限制为特定 IP 地址来帮助控制对运行器的访问。 此配置通过防止未经授权的访问来增强安全性,但可能需要进一步的网络配置。

GitHub 托管运行器 自托管运行器
GitHub 托管的运行程序使用动态 IP 地址,因此很难配置精确的 IP 允许列表。 使用静态或受控 IP,允许精确的 IP 允许列表或基于 IP 的访问控制。
组织必须允许 GitHub 的已发布 IP 范围。 可以放置在防火墙或 VPN 后面,以增强安全性。
可以使用 GitHub 的企业安全设置来限制 GitHub 托管的运行程序。 需要显式配置才能与外部服务通信,从而提高安全性。

允许的 IP 列表

允许的 IP 列表是一项安全功能,它基于预定义的 IP 地址限制对服务或资源的访问。 当组织配置 IP 允许列表时,他们可以:

  • 增强安全性: 通过仅允许受信任的 IP 地址来防止未经授权的访问。
  • 控制网络流量: 将入站和出站请求限制为已知和已验证的 IP。
  • 提高合规性: 通过限制对授权网络的访问来确保合规性。
GitHub 托管运行器 自托管运行器
组织必须允许 GitHub 发布的 IP 范围,这些范围会定期更改。 管理员可以定义允许访问运行器的特定 IP 地址。
可以通过 GitHub 的安全设置来配置 GitHub 托管的运行器。 自托管运行器适用于防火墙、VPN 或云安全组。

为内部应用程序配置 IP 允许列表,以与 GitHub 托管运行器交互

若要为内部应用程序和系统配置 IP 允许列表以与 GitHub 托管的运行程序交互,可参阅以下官方 GitHub 文档:

1.了解 GitHub 的 IP 地址范围

GitHub 托管的运行程序在特定 IP 地址范围内运行。 若要确保内部应用程序能够与这些运行程序通信,需要允许这些 IP 范围通过防火墙。 GitHub 提供元 API 终结点 https://api.github.com/meta ,用于列出 GitHub 服务使用的所有当前 IP 地址范围,包括 Actions 运行程序的 IP 范围。 根据此信息定期更新允许列表至关重要,因为 IP 范围可能会更改。

2.配置防火墙

a。 获取 GitHub 的 IP 范围:
  • 使用 Meta API 终结点检索 GitHub Actions 运行器使用的最新 IP 地址范围。
b. 更新防火墙规则:
  • 将规则添加到防火墙,以允许传入和传出这些 IP 范围的入站和出站流量。 此配置可确保内部系统可与 GitHub 托管的运行程序交互,而不会造成连接问题。

3.考虑使用自托管运行器

如果维护 GitHub 托管运行程序的 IP 允许列表由于 IP 范围的频繁更改而具有挑战性,请考虑在网络中设置自承载运行程序。 此方法允许你更好地控制运行器环境和网络配置。 但是,使用自承载运行程序需要更多的维护和基础结构管理。

空运行器屏幕的屏幕截图。

4. 定期查看和更新允许列表

由于 GitHub 的 IP 地址范围可能会更改,因此定期查看和更新防火墙的 IP 允许列表至关重要。 通过编写 GitHub 元 API 中 IP 范围的检索脚本,自动执行此过程有助于确保允许列表保持最新状态,而无需手动干预。

在公共存储库上启用自托管运行器的影响和潜在的滥用途径

启用自托管运行器的效果

  1. 自定义和性能优化

    • 自托管运行器允许控制硬件、已安装的软件和环境设置。
    • 可以使用专用高性能计算机优化工作流的性能。
  2. 节省费用

    • 与 GitHub 托管的运行程序(其免费使用有限)不同,自承载运行程序在您自己的基础设施上运行,从而降低成本限制。
  3. 状态持久性

    • 自托管运行器不会在 GitHub 托管运行器等作业之间重置。
    • 允许 缓存依赖项、重用大型数据集和维护持久状态。
  4. 安全和维护责任

    • 安全修补程序、依赖项更新和系统监视 成为运行程序所有者的责任。
    • 错误配置可能会使运行程序面临外部威胁。

自承载运行器的潜在滥用途径

在公共存储库上启用自托管运行器会产生重大安全风险。 由于 任何人都可以 通过提交拉取请求来触发工作流,因此攻击者可以通过多种方式利用此功能:

  1. 恶意行为者执行任意代码(RCE)

    • 攻击者可以提交包含 恶意脚本的拉取请求,自承载运行程序会自动执行这些脚本。
    • 如果运行程序具有 提升的权限,攻击者将获得 完整的系统访问权限
  2. 加密货币挖掘和资源开发

    • 攻击者可能会滥用自承载运行程序来挖掘加密货币,从而导致 意外的高 CPU 和 GPU 使用率
    • 这会增加 运营成本 并降低合法工作流 的可用性
  3. 数据外泄和凭据被盗

    • 如果机密(API 密钥、数据库凭据、SSH 密钥)存储在运行程序上,攻击者可能会提取它们。
    • 示例攻击途径:恶意拉取请求可以读取和将存储的环境变量发送到外部服务器。
  4. 拒绝服务 (DoS) 攻击

    • 攻击者可能会向存储库发出大量拉取请求,以重载自承载运行程序。
    • 如果运行程序位于共享基础结构上,则可能会中断其他关键工作流。
  5. 横向移动和网络利用

    • 如果自托管运行器位于企业网络中,攻击者可能会横向渗透到内部系统中
    • 可能导致 数据泄露勒索软件攻击持续访问 专用资源。

缓解策略

若要降低安全风险,请遵循以下最佳做法:

  • 将自托管运行器限制为仅用于专用存储库
  • 需要对来自外部参与者的拉取请求进行工作流审批
  • 安全隔离的环境中 运行自承载运行程序(例如容器、虚拟机)
  • 使用 防火墙和网络规则 阻止未经授权的访问
  • 限制对 敏感机密 的访问并安全地存储凭据
  • 监视和记录运行器活动以检测异常

选择适当的运行器以支持工作负载

了解 GitHub 运行器

GitHub Actions 支持两种类型的运行器:

  1. GitHub 托管运行器

    • 由 GitHub 管理,自动预配和缩放。
    • 包括 预安装的常见工作流的软件、工具和依赖项
    • 适用于 Windows、Linux 和 macOS
    • 建议用于 常规自动化、开源项目和快速设置
  2. 自托管运行器

    • 由用户管理,提供 对环境和资源的完全控制
    • 可以为 自定义硬件、本地或云基础结构配置。
    • 支持 作业之间的持久状态,从而更好地缓存和自定义依赖项。
    • 建议用于 专用存储库、企业工作负荷和性能密集型任务

在 GitHub 托管和自托管运行器之间进行选择

两种类型的运行器可以执行 GitHub Actions 工作流:GitHub 托管运行器或自承载运行器。

注意

GitHub 托管运行器仅适用于 Enterprise Cloud。 如果你有 Enterprise Server 实例,则本部分内容对你不适用。

GitHub 托管运行器可提供一种更快、更简单的方法来运行工作流,而自承载运行器是一种高度可配置的方式,可以在你自己的自定义环境中运行工作流。 例如,如果需要使用组织的 IP 地址允许列表或专用硬件配置来运行工作流,请使用自托管运行器。

下表比较了 GitHub 托管运行器与自托管运行器。 使用它来选择适合你的工作负载的运行器。

GitHub 托管运行器 自托管运行器
接收操作系统、预安装包和工具以及自托管运行器应用程序的自动更新。 仅接收自托管运行器应用程序的自动更新。 你负责更新操作系统和所有其他软件。
GitHub 托管和维护。 可以使用已付费的云服务或本地计算机。 也可以根据硬件、操作系统、软件和安全要求进行自定义。
每次执行作业时提供一个干净的实例。 无需在每次执行作业时提供一个干净的实例。
在 GitHub 计划上使用免费分钟数,超过免费分钟数后按每分钟费率进行计费。 可免费使用 GitHub Actions,但需负责运行器计算机的维护成本。

为跑步者选择正确的操作系统

1.Linux 运行器(默认)
  • 最适合大多数工作负荷
  • 快速、经济高效且广受支持
  • 用于 CI/CD、脚本、Docker 和自动化
    示例: ubuntu-latestubuntu-22.04
2.Windows 运行器
  • .NET、基于 Windows 的软件和 GUI 应用需要
  • 支持 PowerShell、特定于 Windows 的依赖项
    示例: windows-latestwindows-2022
3. macOS 运行器
  • iOS、macOS、Xcode 和 Apple 特定版本需要 macOS 运行程序
  • 支持 Swift、Objective-C 和 macOS 应用程序
    示例: macos-latestmacos-13

选择运行器的最佳做法

  • 将 GitHub 托管运行器用于常规工作流和自动化。
  • 将自托管运行器用于自定义环境、大型工作负载或安全敏感型应用程序
  • 选择性能和成本效益出色的 Linux 运行器,以将其用于大多数工作负载。
  • 仅当需要兼容时,才使用 Windows 或 macOS 运行程序
  • 定期更新和监视自托管运行器,以防止安全风险。

对比 GitHub 托管和自托管运行器

GitHub Actions 支持两种类型的运行程序来执行工作流:

  1. GitHub 托管的运行程序 – 由 GitHub 管理、自动预配并使用常用开发工具预配置。
  2. 自承载运行程序 – 由用户管理,允许完全控制环境、资源和配置。

本部分重点介绍 GitHub 托管和自承载运行程序之间的主要区别。

比较:GitHub 托管与自托管运行器

功能 / 特点 GitHub 托管运行器 自托管运行器
设置和维护 无需设置;GitHub 管理所有内容 用户必须安装、配置和维护
可伸缩性 自动缩放动态 必须手动预配添加的运行程序
安全性 高等级安全;每个任务的全新虚拟环境 需要手动安全强化
自定义 有限;仅预安装的工具 完全可自定义;用户可以安装任何依赖项
性能 标准化计算资源 可以使用高性能硬件
状态持久性 在每个作业后重置 可以在作业之间保留数据
成本 公共存储库免费;专用存储库有限免费使用 无需 GitHub 成本,但需要基础结构投资
网络访问 不直接访问内部网络 可以访问内部/专用网络
用例 最适合常规 CI/CD、自动化和开放源代码项目 最适合企业环境、安全生成和大型工作负载

主要差异和注意事项

1. 设置和维护
  • GitHub 托管的运行程序 需要 零设置;用户可以立即开始运行工作流。
  • 自承载运行程序 需要 手动安装、配置、更新和安全管理
2. 安全风险
  • GitHub 托管的运行程序 在隔离的虚拟机中运行 ,这些虚拟机在每个作业后重置,最大限度地减少攻击面。
  • 自托管运行器在作业之间持续存在,这意味着可以跨多个工作流运行利用泄露的运行器。
3. 性能和成本注意事项
  • GitHub 托管的运行程序 提供标准环境 ,但 具有使用限制 (例如,专用存储库每月免费分钟数)。
  • 自承载运行程序 允许更好的性能优化 (例如,在高端服务器上运行),但需要 基础结构和维护成本
4. 网络和访问
  • GitHub 托管的运行程序无法在没有进一步的配置的情况下 访问专用/内部资源
  • 自承载运行程序 可以访问内部系统,使它们非常适合 专用存储库、内部工具和本地部署

何时使用每个运行器?

在以下情况下使用 GitHub 托管的运行程序:

  • 您需要一种快速简便的设置,无需基础设施管理。
  • 工作流不需要预安装的工具以外的 自定义依赖项
  • 你正在使用具有免费托管运行器分钟数的开放源代码或公共存储库。

在以下情况下使用自托管运行器:

  • 工作流需要 特定的依赖项、配置或持久性状态
  • 需要 访问专用网络资源 (例如,本地数据库、内部服务)。
  • 对于大型 CI/CD 管道,需要更高的性能计算机