Skip to main content

关于组织中 GitHub 托管的运行器的 Azure 专用网络

可以为您的组织创建一个专用网络配置,以便在 Azure 虚拟网络 (VNET) 中使用 GitHub 托管的运行器。

谁可以使用此功能?

企业中组织的组织所有者可以在组织级别为 GitHub 托管的运行器配置 Azure 专用网络。

关于 GitHub 托管运行器的 Azure 专用网络

可在 Azure Vnet 中使用 GitHub 托管的运行器。 这样就将 GitHub 托管基础结构用于 CI/CD,同时取得对运行器网络策略的完全控制。 有关 Azure VNET 的详细信息,请参阅 Azure 文档中的什么是 Azure 虚拟网络?

可以将多个 VNET 子网连接到 GitHub 并通过运行器组来管理运行器的专用资源访问权限。 有关运行器组的详细信息,请参阅“控制对较大运行器的访问”。

在 Azure VNET 中使用 GitHub 托管运行器可执行以下操作。

  • 以私密方式将运行器连接到 Azure VNET 内的资源,而无需打开 Internet 端口,包括可从 Azure VNET 访问的本地资源。
  • 通过对出站网络策略的完全控制来限制 GitHub 托管运行器可以访问或连接的内容。
  • 监视 GitHub 托管运行器的网络日志,并查看与运行器之间的所有连接。

关于在 Azure VNET 中使用较大的运行器

Azure VNET 仅支持 2-64 vCPU Ubuntu 和 Windows 运行器。 有关这些运行器类型的详细信息,请参阅“大型运行程序”。

GitHub 托管的运行器专用网络不支持将静态 IP 地址用于大型运行器。必须使用动态 IP 地址,这是大型运行器的默认配置。 有关适用于大型运行器的网络的详细信息,请参阅“大型运行程序”。

关于网络通信

为便于在 GitHub 网络与 VNET 之间进行通信,GitHub 托管的运行器网络接口卡 (NIC) 将会部署到你的 Azure VNET。

由于 NIC 位于 VNET 中,GitHub 无法阻止入站连接。 默认情况下,Azure 虚拟机会接受来自同一 VNET 的入站连接。 有关详细信息,请访问 Microsoft Learn 上的 AllowVNetInBound。 建议显式阻止指向运行器的所有入站连接。 GitHub 永远不会需要到这些计算机的入站连接。

Azure 虚拟机 (VM) 通过 NIC 与互联网、Azure 及本地资源通信。 通过此方式,所有通信都在网络边界内保持私密,应用于 VNET 的网络策略也适用于运行器。 有关如何管理网络接口的详细信息,请参阅 Microsoft Learn 上的更改网络接口设置

注意

不久,GitHub Actions 服务创建的 NIC 将不再显示在 Azure 订阅中。 今后,NIC 将在服务订阅中进行预配,并从子网中分配 IP 地址。

GitHub 与专用网络之间的网络通信示意图。 每个步骤都有编号,与示意图下方列出的步骤相对应。

  1. GitHub Actions 工作流被触发。
  2. GitHub Actions 服务创建运行器。
  3. 运行器服务将 GitHub 托管运行器网络接口卡 (NIC) 被部署到 Azure VNET 中。
  4. 运行器代理会选取工作流作业。 GitHub Actions 服务会对作业进行排队。
  5. 运行器将日志发送回 GitHub Actions 服务。
  6. NIC 访问本地资源。

关于支持的区域

该服务 GitHub Actions 支持 Azure 提供的所有区域的子集。 为了方便服务与子网之间的 GitHub Actions 通信,子网必须位于支持的区域之一。

注意

如果在数据驻留上使用GHE.com,那么支持的区域会有所不同。 请参阅“GHE.com 的网络详细信息”。

在 GitHub.com 上支持以下区域。

  • AustraliaEast
  • BrazilSouth
  • CanadaCentral
  • CanadaEast
  • CentralUs
  • EastAsia
  • EastUs
  • EastUs2
  • FranceCentral
  • GermanyWestCentral
  • JapanWest
  • KoreaCentral
  • NorthCentralUs
  • NorthEurope
  • NorwayEast
  • SouthCentralUs
  • SoutheastAsia
  • SouthIndia
  • SwedenCentral
  • SwitzerlandNorth
  • UkSouth
  • UkWest
  • WestUs
  • WestUs2
  • WestUs3

Azure 专用网络支持以下区域中的 GPU 运行程序。

  • EastUs
  • NorthCentralUs
  • SouthCentralUs
  • WestUs

Azure 专用网络支持以下区域中的 arm64 运行程序。

  • CentralUs
  • EastUs
  • EastUs2
  • NorthCentralUs
  • SouthCentralUs
  • WestUs
  • WestUs2
  • WestUs3

我们将很快启动一个流程,请求支持新区域。 你也可以使用全球虚拟网络对等互连来连接不同 Azure 区域的虚拟网络。 有关详细信息,请参阅 Azure 文档中的虚拟网络对等互连

关于 GitHub Actions 服务权限

为了成功部署 NIC 并将 NIC 加入子网,GitHub Actions 服务在你的 Azure 订阅中维持了下列 Azure 基于角色的访问控制 (RBAC) 权限。 有关 Azure 资源精细访问管理的详细信息,请参阅 Azure 文档中的 Azure RBAC

  • GitHub.Network/operations/read
  • GitHub.Network/networkSettings/read
  • GitHub.Network/networkSettings/write
  • GitHub.Network/networkSettings/delete
  • GitHub.Network/RegisteredSubscriptions/read
  • Microsoft.Network/locations/operations/read
  • Microsoft.Network/locations/operationResults/read
  • Microsoft.Network/locations/usages/read
  • Microsoft.Network/networkInterfaces/read
  • Microsoft.Network/networkInterfaces/write
  • Microsoft.Network/networkInterfaces/delete
  • Microsoft.Network/networkInterfaces/join/action
  • Microsoft.Network/networkSecurityGroups/join/action
  • Microsoft.Network/networkSecurityGroups/read
  • Microsoft.Network/publicIpAddresses/read
  • Microsoft.Network/publicIpAddresses/write
  • Microsoft.Network/publicIPAddresses/join/action
  • Microsoft.Network/routeTables/join/action
  • Microsoft.Network/virtualNetworks/read
  • Microsoft.Network/virtualNetworks/subnets/join/action
  • Microsoft.Network/virtualNetworks/subnets/read
  • Microsoft.Network/virtualNetworks/subnets/write
  • Microsoft.Network/virtualNetworks/subnets/serviceAssociationLinks/delete
  • Microsoft.Network/virtualNetworks/subnets/serviceAssociationLinks/read
  • Microsoft.Network/virtualNetworks/subnets/serviceAssociationLinks/write
  • Microsoft.Network/virtualNetworks/subnets/serviceAssociationLinks/details/read
  • Microsoft.Network/virtualNetworks/subnets/serviceAssociationLinks/validate/action
  • Microsoft.Resources/subscriptions/resourceGroups/read
  • Microsoft.Resources/subscriptions/resourcegroups/deployments/read
  • Microsoft.Resources/subscriptions/resourcegroups/deployments/write
  • Microsoft.Resources/subscriptions/resourcegroups/deployments/operations/read
  • Microsoft.Resources/deployments/read
  • Microsoft.Resources/deployments/write
  • Microsoft.Resources/deployments/operationStatuses/read

Azure 租户中的两个企业应用程序上将显示以下权限。 配置 Azure 专用网络后,会看到 Azure 租户的企业应用程序。

  • GitHub CPS Network Service ID:85c49807-809d-4249-86e7-192762525474
  • GitHub Actions API ID:4435c199-c3da-46b9-a61d-76de3f2c9f82

使用 VNET 的网络策略

由于 GitHub 托管的运行器 NIC 已部署在 Azure VNET 中,因此应用于 VNET 的网络策略也适用于运行器。

例如,如果将 VNET 配置为使用 Azure ExpressRoute 来提供对本地资源的访问(例如 Artifactory)或连接到 VPN 隧道以提供对其他基于云的资源的访问,则这些访问策略也适用于运行器。 此外,适用于 VNET 网络安全组 (NSG) 的任何出站规则也适用,使你能够控制运行器的出站访问。

如果为 VNET 启用了任何网络日志监视,还可以监视运行器的网络流量。

GitHub 托管的运行器使用网络正在使用的任何出站控制。 如果网络依赖于 Azure 的默认出站访问,则 IP 不可预测,并且无法添加到 GitHub IP 允许列表中。 有关使用稳定出站 IP 的建议,请参阅 Azure 文档中的默认出站访问

关于 VNET 故障转移

注意

VNET 故障转移处于 公共预览版 阶段,可能会发生变化。

可以为您的网络配置故障转移网络。 故障转移网络是辅助 Azure 虚拟网络子网,可以位于与主子网不同的 Azure 区域中。 如果主子网因区域性中断或其他原因而不可用,您可以启用故障转移网络,通过辅助子网路由跑程流量,从而保持 GitHub Actions 工作流的连续性。

关于 VNET 故障转移的关键点:

  • 故障转移子网可以驻留在与主子网不同的 Azure 区域中。
  • 在主子网和故障转移子网之间切换是一个手动过程。 可以随意启用或禁用故障转移网络。
  • 主子网和故障转移子网都必须使用所需的 Azure 资源(VNET/子网、网络设置等)进行配置,然后才能使用故障转移。
  • 故障转移子网必须位于 受支持的区域中

有关配置故障转移网络的详细信息,请参阅 为组织中的 GitHub 托管的运行器配置专用网络

将 GitHub 托管运行器与 Azure VNET 配合使用

若要将 GitHub 托管的运行程序与 Azure VNET 配合使用,需要配置 Azure 资源,然后在 GitHub 中创建网络配置。

默认情况下,企业中的组织无法创建新的网络配置,只能继承企业级网络配置。 企业所有者可以设置策略,允许企业中的组织创建独立于企业的网络配置。 有关详细信息,请参阅“为企业中的GitHub托管运行器配置私有网络”。

有关在企业级别配置 Azure 专用网络的程序,请参阅“为企业中的GitHub托管运行器配置私有网络”。

有关在组织级别配置 Azure 专用网络的程序,请参阅“为组织中的 GitHub 托管的运行器配置专用网络”。