关于 GitHub 托管的运行器的 Azure 私有网络
可在 Azure Vnet 中使用 GitHub 托管的运行器。 这样就将 GitHub 托管基础结构用于 CI/CD,同时取得对运行器网络策略的完全控制。 有关 Azure VNET 的详细信息,请参阅 Azure 文档中的什么是 Azure 虚拟网络?。
可以将多个 VNET 子网连接到 GitHub.com 并通过运行器组来管理运行器的专用资源访问权限。 有关运行器组的详细信息,请参阅“控制对较大运行器的访问”。
在 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 上的更改网络接口设置。
Note
订阅中的单个作业可能会出现多个 NIC,因为 GitHub Actions 服务预配过多资源来运行作业。 待运行程序空闲后,% data variables.product.prodname_actions %} 服务会自动取消预配资源并删除相应的 NIC。
- GitHub Actions 工作流被触发。
- GitHub Actions 服务创建运行器。
- 运行器服务将 GitHub 托管运行器网络接口卡 (NIC) 被部署到 Azure VNET 中。
- 运行器代理会选取工作流作业。 GitHub Actions 服务会对作业进行排队。
- 运行器将日志发送回 GitHub Actions 服务。
- NIC 访问本地资源。
关于支持的区域
GitHub Actions 服务支持 Azure 提供的所有区域中的一部分区域。 为了方便 GitHub Actions 服务与你的子网之间进行通信,你的子网必须位于以下受支持区域之中的一个区域。
EastUs
EastUs2
WestUs2
AustraliaEast
CentralUs
FranceCentral
NorthEurope
NorwayEast
SoutheastAsia
SwitzerlandNorth
UkSouth
Azure 专用网络支持以下区域中的 GPU 运行程序。
EastUs
WestUs
NorthCentralUs
SouthCentralUs
你也可以使用全局虚拟网络对等互连连接不同 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 托管的运行器配置专用网络”。