Azure Web 应用程序:当 VNET 在不同的订阅上时,无法使用 PowerShell 添加 VNET 限制规则

Azure Web App: Cannot add a VNET Restriction Rule using PowerShell when VNET is on a different subscription

我有一个 Azure Web 应用程序,我想确保只有我的构建服务器(或同一子网上的任何其他 VM)是唯一能够访问 SCM 站点的服务器。我认为最明显的事情是创建一个访问限制规则,事实上,我可以从门户创建它,没有任何问题。

但是,当我尝试使用 powershell 自动执行此操作时,就会出现问题。我的构建服务器子网与我的 Web 应用程序所在的订阅不同。

我正在执行以下 powershell 脚本:

$subnetId = "/subscriptions/$VNETSubscriptionId/resourceGroups/$VNETResourceGroup/providers/Microsoft.Network/virtualNetworks/$buildServerVNET/subnets/$buildServerSubNet"
Add-AzWebAppAccessRestrictionRule -ResourceGroup $webAppRg -WebAppName $webAppname -Name VNETAccess -Priority 1000 -Action Allow -SubnetId $subnetId

我收到以下错误:

Add-AzWebAppAccessRestrictionRule : The client '{{my user credential}}' with object id '81fa4eb1-5553-4daa-af44-3c717b19eda2' does not have authorization to perform action 'Microsoft.Network/virtualNetworks/subnets/read' over scope '/subscriptions/{{websiteSubscriptionId}}/resour
ceGroups/{{VNETResourceGroup}}/providers/Microsoft.Network/virtualNetworks/{{buildServerVNET}}/subnets/{{buildServerSubNet}}' or
the scope is invalid. If access was recently granted, please refresh your credentials.

错误似乎表明 cmdlet 正在搜索与网站相同的订阅 ID 上的子网,而不是子网所在的订阅,因为错误消息中返回的 resourceId 字符串具有错误的订阅 ID。它使用网站所在的那个,而不是使用构建服务器所在的那个。

为了通过 powershell 创建此规则还需要做什么?

错误信息很混乱。

事实上,经过我的验证,您需要在添加来自不同订阅的子网时添加-IgnoreMissingServiceEndpoint参数。阅读此 GitHub 个案例 WebApp:Add-AzWebAppAccessRestrictionRule.md - incorrect use of subscription context over SubnetId param

When using a subnet from a different subscription, we cannot validate the subnet to see if the correct service endpoint (Microsoft.Web) has been set. If you use -IgnoreMissingServiceEndpoint the rule can be added.