关于 Azure 私有网络在 GitHub 托管运行器中
您可以在 Azure VNET 中使用 GitHub 托管运行器。这使您能够使用 GitHub 管理的基础设施进行 CI/CD,同时为您提供对运行器网络策略的完全控制。有关 Azure VNET 的更多信息,请参阅 Azure 文档中的 什么是 Azure 虚拟网络?。
您可以将多个 VNET 子网连接到 GitHub.com,并通过运行器组管理运行器的私有资源访问。有关运行器组的更多信息,请参阅 "控制对大型运行器的访问。"。
在 Azure VNET 中使用 GitHub 托管运行器允许您执行以下操作。
- 将运行器私有连接到 Azure VNET 中的资源,而无需打开互联网端口,包括从 Azure VNET 访问的本地资源。
- 通过对出站网络策略的完全控制,限制 GitHub 托管运行器可以访问或连接到的内容。
- 监控 GitHub 托管运行器的网络日志,并查看所有进出运行器的连接。
关于使用 Azure VNET 的大型运行器
2-64 vCPU Ubuntu 和 Windows 运行器支持 Azure VNET。有关这些运行器类型的更多信息,请参阅 "关于大型运行器。"。
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。
- 触发 GitHub Actions 工作流。
- GitHub Actions 服务创建运行器。
- 运行器服务将 GitHub 托管运行器的网络接口卡 (NIC) 部署到您的 Azure VNET 中。
- 运行器代理获取工作流作业。GitHub Actions 服务将作业排队。
- 运行器将日志发送回 GitHub Actions 服务。
- NIC 访问本地资源。
关于支持的区域
GitHub Actions 服务支持 Azure 提供的所有区域的子集。为了促进 GitHub Actions 服务与您的子网之间的通信,您的子网必须位于以下支持的区域之一。
美国东部
美国东部 2
美国西部 2
美国西部 3
美国中部
美国中北部
美国中南部
澳大利亚东部
日本东部
法国中部
德国西部中部
北欧
挪威东部
瑞典中部
瑞士北部
英国南部
东南亚
Azure 私有网络在以下区域支持 GPU 运行器。
美国东部
美国西部
美国中北部
美国中南部
Azure 私有网络在以下区域支持 arm64 运行器。
美国东部
美国东部 2
美国西部 2
美国中北部
美国中南部
注意
GPU 和 arm64 运行器目前处于测试阶段,可能会发生变化。
如果您的目标区域不受支持,请在 此 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
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 VNET 配合使用
要将 GitHub 托管的运行器与 Azure VNET 配合使用,您需要配置 Azure 资源,然后在 GitHub 中创建网络配置。
有关在组织级别配置 Azure 私有网络的步骤,请参阅“在您的组织中为 GitHub 托管的运行器配置私有网络”。