管理运行器
在本部分中,你将了解 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 范围的检索脚本,自动执行此过程有助于确保允许列表保持最新状态,而无需手动干预。
在公共存储库上启用自托管运行器的影响和潜在的滥用途径
启用自托管运行器的效果
自定义和性能优化
- 自托管运行器允许控制硬件、已安装的软件和环境设置。
- 可以使用专用高性能计算机优化工作流的性能。
节省费用
- 与 GitHub 托管的运行程序(其免费使用有限)不同,自承载运行程序在您自己的基础设施上运行,从而降低成本限制。
状态持久性
- 自托管运行器不会在 GitHub 托管运行器等作业之间重置。
- 允许 缓存依赖项、重用大型数据集和维护持久状态。
安全和维护责任
- 安全修补程序、依赖项更新和系统监视 成为运行程序所有者的责任。
- 错误配置可能会使运行程序面临外部威胁。
自承载运行器的潜在滥用途径
在公共存储库上启用自托管运行器会产生重大安全风险。 由于 任何人都可以 通过提交拉取请求来触发工作流,因此攻击者可以通过多种方式利用此功能:
恶意行为者执行任意代码(RCE)
- 攻击者可以提交包含 恶意脚本的拉取请求,自承载运行程序会自动执行这些脚本。
- 如果运行程序具有 提升的权限,攻击者将获得 完整的系统访问权限。
加密货币挖掘和资源开发
- 攻击者可能会滥用自承载运行程序来挖掘加密货币,从而导致 意外的高 CPU 和 GPU 使用率。
- 这会增加 运营成本 并降低合法工作流 的可用性 。
数据外泄和凭据被盗
- 如果机密(API 密钥、数据库凭据、SSH 密钥)存储在运行程序上,攻击者可能会提取它们。
- 示例攻击途径:恶意拉取请求可以读取和将存储的环境变量发送到外部服务器。
拒绝服务 (DoS) 攻击
- 攻击者可能会向存储库发出大量拉取请求,以重载自承载运行程序。
- 如果运行程序位于共享基础结构上,则可能会中断其他关键工作流。
横向移动和网络利用
- 如果自托管运行器位于企业网络中,攻击者可能会横向渗透到内部系统中。
- 可能导致 数据泄露、 勒索软件攻击或 持续访问 专用资源。
缓解策略
若要降低安全风险,请遵循以下最佳做法:
- 将自托管运行器限制为仅用于专用存储库
- 需要对来自外部参与者的拉取请求进行工作流审批
- 在 安全隔离的环境中 运行自承载运行程序(例如容器、虚拟机)
- 使用 防火墙和网络规则 阻止未经授权的访问
- 限制对 敏感机密 的访问并安全地存储凭据
- 监视和记录运行器活动以检测异常
选择适当的运行器以支持工作负载
了解 GitHub 运行器
GitHub Actions 支持两种类型的运行器:
GitHub 托管运行器
- 由 GitHub 管理,自动预配和缩放。
- 包括 预安装的常见工作流的软件、工具和依赖项 。
- 适用于 Windows、Linux 和 macOS。
- 建议用于 常规自动化、开源项目和快速设置。
自托管运行器
- 由用户管理,提供 对环境和资源的完全控制。
- 可以为 自定义硬件、本地或云基础结构配置。
- 支持 作业之间的持久状态,从而更好地缓存和自定义依赖项。
- 建议用于 专用存储库、企业工作负荷和性能密集型任务。
在 GitHub 托管和自托管运行器之间进行选择
两种类型的运行器可以执行 GitHub Actions 工作流:GitHub 托管运行器或自承载运行器。
注意
GitHub 托管运行器仅适用于 Enterprise Cloud。 如果你有 Enterprise Server 实例,则本部分内容对你不适用。
GitHub 托管运行器可提供一种更快、更简单的方法来运行工作流,而自承载运行器是一种高度可配置的方式,可以在你自己的自定义环境中运行工作流。 例如,如果需要使用组织的 IP 地址允许列表或专用硬件配置来运行工作流,请使用自托管运行器。
下表比较了 GitHub 托管运行器与自托管运行器。 使用它来选择适合你的工作负载的运行器。
GitHub 托管运行器 | 自托管运行器 |
---|---|
接收操作系统、预安装包和工具以及自托管运行器应用程序的自动更新。 | 仅接收自托管运行器应用程序的自动更新。 你负责更新操作系统和所有其他软件。 |
GitHub 托管和维护。 | 可以使用已付费的云服务或本地计算机。 也可以根据硬件、操作系统、软件和安全要求进行自定义。 |
每次执行作业时提供一个干净的实例。 | 无需在每次执行作业时提供一个干净的实例。 |
在 GitHub 计划上使用免费分钟数,超过免费分钟数后按每分钟费率进行计费。 | 可免费使用 GitHub Actions,但需负责运行器计算机的维护成本。 |
为跑步者选择正确的操作系统
1.Linux 运行器(默认)
- 最适合大多数工作负荷
- 快速、经济高效且广受支持
- 用于 CI/CD、脚本、Docker 和自动化
示例:ubuntu-latest
、ubuntu-22.04
2.Windows 运行器
- .NET、基于 Windows 的软件和 GUI 应用需要
- 支持 PowerShell、特定于 Windows 的依赖项
示例:windows-latest
、windows-2022
3. macOS 运行器
- iOS、macOS、Xcode 和 Apple 特定版本需要 macOS 运行程序
- 支持 Swift、Objective-C 和 macOS 应用程序
示例:macos-latest
、macos-13
选择运行器的最佳做法
- 将 GitHub 托管运行器用于常规工作流和自动化。
- 将自托管运行器用于自定义环境、大型工作负载或安全敏感型应用程序。
- 选择性能和成本效益出色的 Linux 运行器,以将其用于大多数工作负载。
- 仅当需要兼容时,才使用 Windows 或 macOS 运行程序 。
- 定期更新和监视自托管运行器,以防止安全风险。
对比 GitHub 托管和自托管运行器
GitHub Actions 支持两种类型的运行程序来执行工作流:
- GitHub 托管的运行程序 – 由 GitHub 管理、自动预配并使用常用开发工具预配置。
- 自承载运行程序 – 由用户管理,允许完全控制环境、资源和配置。
本部分重点介绍 GitHub 托管和自承载运行程序之间的主要区别。
比较:GitHub 托管与自托管运行器
功能 / 特点 | GitHub 托管运行器 | 自托管运行器 |
---|---|---|
设置和维护 | 无需设置;GitHub 管理所有内容 | 用户必须安装、配置和维护 |
可伸缩性 | 自动缩放动态 | 必须手动预配添加的运行程序 |
安全性 | 高等级安全;每个任务的全新虚拟环境 | 需要手动安全强化 |
自定义 | 有限;仅预安装的工具 | 完全可自定义;用户可以安装任何依赖项 |
性能 | 标准化计算资源 | 可以使用高性能硬件 |
状态持久性 | 在每个作业后重置 | 可以在作业之间保留数据 |
成本 | 公共存储库免费;专用存储库有限免费使用 | 无需 GitHub 成本,但需要基础结构投资 |
网络访问 | 不直接访问内部网络 | 可以访问内部/专用网络 |
用例 | 最适合常规 CI/CD、自动化和开放源代码项目 | 最适合企业环境、安全生成和大型工作负载 |
主要差异和注意事项
1. 设置和维护
- GitHub 托管的运行程序 需要 零设置;用户可以立即开始运行工作流。
- 自承载运行程序 需要 手动安装、配置、更新和安全管理。
2. 安全风险
- GitHub 托管的运行程序 在隔离的虚拟机中运行 ,这些虚拟机在每个作业后重置,最大限度地减少攻击面。
- 自托管运行器在作业之间持续存在,这意味着可以跨多个工作流运行利用泄露的运行器。
3. 性能和成本注意事项
- GitHub 托管的运行程序 提供标准环境 ,但 具有使用限制 (例如,专用存储库每月免费分钟数)。
- 自承载运行程序 允许更好的性能优化 (例如,在高端服务器上运行),但需要 基础结构和维护成本。
4. 网络和访问
- GitHub 托管的运行程序无法在没有进一步的配置的情况下 访问专用/内部资源 。
- 自承载运行程序 可以访问内部系统,使它们非常适合 专用存储库、内部工具和本地部署。
何时使用每个运行器?
在以下情况下使用 GitHub 托管的运行程序:
- 您需要一种快速简便的设置,无需基础设施管理。
- 工作流不需要预安装的工具以外的 自定义依赖项 。
- 你正在使用具有免费托管运行器分钟数的开放源代码或公共存储库。
在以下情况下使用自托管运行器:
- 工作流需要 特定的依赖项、配置或持久性状态。
- 需要 访问专用网络资源 (例如,本地数据库、内部服务)。
- 对于大型 CI/CD 管道,需要更高的性能计算机。