【问题标题】:Azure Web App: Cannot add a VNET Restriction Rule using PowerShell when VNET is on a different subscriptionAzure Web 应用程序:当 VNET 位于不同的订阅上时,无法使用 PowerShell 添加 VNET 限制规则
【发布时间】:2023-03-24 21:22:02
【问题描述】:

我在 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创建这个规则还需要做什么?

【问题讨论】:

    标签: azure powershell azure-web-app-service azure-powershell


    【解决方案1】:

    错误信息很混乱。

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

    当使用来自不同订阅的子网时,我们无法验证 子网以查看正确的服务端点 (Microsoft.Web) 是否具有 被设置。如果您使用 -IgnoreMissingServiceEndpoint 规则可以是 已添加。

    【讨论】:

    • 我会试试你的建议。但是,错误中显示的资源 ID 不是正确的。它显示 Web 应用程序所在的订阅的订阅 ID,而不是 VNET 所在的订阅 ID。最重要的是,我确实拥有对该 VM 的贡献者访问权限。我检查了 cmdlet 的源代码,它有这一行 var subnetResourceId = NetworkClient.ValidateSubnet(subnet, VirtualNetworkName, subNetResourceGroupName, DefaultContext.Subscription.Id);所以我不知道这是否可能,因为它将始终使用我的上下文的订阅 ID
    • 我可以毫无问题地从门户添加 VNET。我也是 VNET 的贡献者
    • 我无法重现此错误消息。错误消息看起来很混乱,因为事实上,我们无法访问与当前活动订阅上下文不同的订阅中的子网。真正的错误是在我这边“未找到”。我有同样的经验,我可以从门户网站但不能从 PowerShell 做到这一点。如果添加参数-IgnoreMissingServiceEndpoint。 PowerShell 有效。
    • 您好,我刚刚尝试添加您的建议,它确实有效。非常感谢您的帮助
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-14
    • 2020-07-15
    • 1970-01-01
    • 2020-05-15
    • 2018-08-15
    • 2019-02-01
    相关资源
    最近更新 更多