跳至主要内容

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

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

谁可以使用此功能?

拥有 GitHub Team 计划的组织所有者可以在组织级别为 GitHub 托管的运行器配置 Azure 专用网络。

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

您可以在 Azure VNET 中使用 GitHub 托管的运行器。这使您能够使用 GitHub 托管的基础设施进行 CI/CD,同时为您提供对运行器网络策略的完全控制。有关 Azure VNET 的更多信息,请参阅 Azure 文档中的 什么是 Azure 虚拟网络?

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

在 Azure VNET 内使用 GitHub 托管的运行器允许您执行以下操作。

  • 将运行器私有连接到 Azure VNET 内部的资源(包括可从 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 永远不需要这些机器的入站连接。

NIC 使 Azure 虚拟机 (VM) 能够与互联网、Azure 和本地资源通信。这样,所有通信都将保存在网络边界内,并且应用于 VNET 的网络策略也适用于运行器。有关如何管理网络接口的更多信息,请参阅 Microsoft Learn 上的 更改网络接口设置

注意

在您的订阅中,单个作业可能会显示多个 NIC,因为 GitHub Actions 服务会过度预配资源以运行作业。运行器空闲后,GitHub Actions 服务会自动取消预配资源并删除相应的 NIC。

Diagram of the network communication architecture between GitHub networks and your private networks. The diagram describes each step in connecting GitHub-hosted runners to an Azure VNET. Each step is numbered and the numbers correspond to the numbered descriptions of the step listed below the diagram.

  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 支持以下区域。

  • EastUs
  • EastUs2
  • WestUs2
  • WestUs3
  • CentralUs
  • NorthCentralUs
  • AustraliaEast
  • JapanEast
  • FranceCentral
  • GermanyWestCentral
  • NorthEurope
  • NorwayEast
  • SwedenCentral
  • SwitzerlandNorth
  • UkSouth
  • SoutheastAsia
  • KoreaCentral

Azure 专用网络在以下区域支持 GPU 运行器。

  • EastUs
  • WestUs
  • NorthCentralUs

Azure 专用网络在以下区域支持 arm64 运行器。

  • EastUs
  • EastUs2
  • WestUs2
  • WestUs3
  • NorthCentralUs

如果您的目标区域不受支持,请在 此 GitHub 表单 中提交新区域可用性的请求。您也可以使用全局虚拟网络对等互连在 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 网络服务 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 文档中的 默认出站访问

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

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

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