GitHub 自托管运行器可以访问单独虚拟网络后面的 Azure 资源

Posted

技术标签:

【中文标题】GitHub 自托管运行器可以访问单独虚拟网络后面的 Azure 资源【英文标题】:GitHub self hosted runner have access to Azure resources behind a separate virtual network 【发布时间】:2021-09-08 01:26:37 【问题描述】:

我创建了一些 GitHub 自托管运行器,并希望它们能够访问我在单独虚拟网络后面的资源。我知道将机器的 IP 地址列入白名单将使其能够访问,但我最终将拥有任意数量的可以成为自托管运行器的虚拟机,因此为我的每个资源添加/删除这些 IP 地址白名单似乎就像在创建自托管运行器时,需要进行大量手动工作或自动将我的每个资源的 IP 地址列入白名单。

我尝试将我的自托管运行器将连接到的虚拟网络与我的其余资源的虚拟网络进行对等,认为它会授予自托管运行器对这些资源的访问权限,但我得到了 403当我尝试对资源进行任何更改或读取时出现防火墙错误...我在这里遗漏了什么吗?通读 Microsoft 文档后,对等虚拟网络似乎可行。

我在两个 Vnet 上都有双向对等互连,并在对等互连设置中转发进出 Vnet 的流量。我在两个 VNet 子网上的 NSG 只是允许入站和出站 VNet 流量的基本 NSG

https://docs.microsoft.com/en-us/azure/virtual-network/virtual-network-peering-overview

有推荐的方法吗?

【问题讨论】:

【参考方案1】:

如果您只想从另一个 VNet 访问一个 VNet 中的资源,网络对等互连就足够了。但是有一个限制,必须没有与资源或 VNet 关联的 NSG。如果 NSG 存在,您需要添加规则以允许流量。例如,如果资源是虚拟机,那么它应该根据需要工作。当然,虚拟机内部的防火墙也应该允许这些流量。

【讨论】:

我在两个 VNet 的子网上都有基本的 NSG,因此它允许 VNet 入站和出站,但我的 VM 和我的 VM 上的容器仍然无法使用 az cli 或 terraform 访问资源。 Client address is not authorized and caller is not a trusted service.... 'Forbidden by firewall' 是我得到的一个这样的错误。我在两个 Vnet 上都有双向对等 @user3369494 此错误表示您无权访问其他资源。我建议您可以启用 VM 的托管标识并将 Contributor 角色分配给具有您要访问的资源的范围的标识。 Here 是文档。 我尝试在 VM 上使用托管标识并为其授予对资源(例如存储帐户)的访问权限,但我仍然遇到相同的错误。我什至尝试手动将我的自托管运行器的 IP 地址列入白名单,但我似乎仍然无法访问它(同样的错误)。但是,当我在工作流程中动态地将 Microsoft 托管运行器的 IP 地址列入白名单时,它的工作时间约为 80%。这很令人沮丧

以上是关于GitHub 自托管运行器可以访问单独虚拟网络后面的 Azure 资源的主要内容,如果未能解决你的问题,请参考以下文章

Github Action 是不是支持按需自托管运行器?

Docker 中的 Docker | Github 操作 - 自托管运行器

自托管 GitHub Actions 运行器的 GitHub API 权限名称?

如何使用输入变量来指定 GitHub 操作将在哪个自托管运行器上运行?

如何在 GitHub Actions 的自托管运行器上修复“GitHub.Services.OAuth.VssOAuthTokenRequestException”

dockerized github 操作是不是支持 docker run 参数的网络选项