You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure VM的NSG出站规则适配VSTS部署组及IP动态配置问询

嘿,针对你的两个问题,我整理了实用的解决方案,帮你搞定NSG和Azure DevOps(原VSTS)的适配问题:

VSTS部署组IP地址是否每周变更?

首先要明确:VSTS部署组的代理是主动发起出站连接到Azure DevOps服务端的,所以你不需要在NSG里配置入站规则允许VSTS的IP访问VM,反而要确保VM能出站访问Azure DevOps服务端的IP范围。

而Azure DevOps Services(原VSTS)的服务IP范围确实会定期更新,和托管构建代理的IP变更逻辑一致,通常每周会发布新的IP列表,你需要同步这些范围来保证VM能正常和服务端通信。

动态为NSG配置Azure DevOps服务IP的替代方案

你提到之前的REST API失效了,这里有几个可靠的替代方法,适配你通过发布定义创建VM并配置NSG的场景:

方法1:拉取官方Azure DevOps IP范围JSON更新NSG

Azure官方会维护一个包含所有Azure服务IP范围的JSON文件,其中就包含Azure DevOps的IP段。你可以在发布流程中添加PowerShell任务,自动拉取并更新NSG规则:

  1. 添加PowerShell任务,拉取IP范围并提取Azure DevOps相关段:

    # 拉取最新的Azure服务IP范围JSON
    $azureIpRanges = Invoke-RestMethod -Uri "https://download.microsoft.com/download/7/1/D/71D86715-5596-4529-9B13-DA13A5DE5B63/ServiceTags_Public_20240506.json" -UseBasicParsing
    # 提取Azure DevOps的IP前缀列表
    $adoIpPrefixes = $azureIpRanges.values | Where-Object { $_.name -eq "AzureDevOps" } | Select-Object -ExpandProperty properties | Select-Object -ExpandProperty addressPrefixes
    

    注意:JSON文件的URL会定期更新,你可以通过微软官方页面获取最新地址,也可以使用动态跳转的URL https://www.microsoft.com/en-us/download/confirmation.aspx?id=56519 来自动获取最新文件。

  2. 接着使用Azure PowerShell模块更新NSG的出站规则:

    # 通过服务连接自动登录Azure(需提前配置Azure资源管理器服务连接)
    Connect-AzAccount -ServicePrincipal -TenantId $(TenantId) -ApplicationId $(AppId) -CertificateThumbprint $(CertThumbprint)
    
    # 获取目标NSG
    $targetNsg = Get-AzNetworkSecurityGroup -Name "你的NSG名称" -ResourceGroupName "你的资源组名称"
    
    # 移除旧的Azure DevOps出站规则(避免重复)
    $targetNsg.SecurityRules = $targetNsg.SecurityRules | Where-Object { $_.Name -ne "Allow-AzureDevOps-Outbound" }
    
    # 添加新的出站规则,允许VM访问Azure DevOps的IP范围(443端口是必要的)
    $targetNsg | Add-AzNetworkSecurityRuleConfig -Name "Allow-AzureDevOps-Outbound" `
        -Protocol * `
        -Direction Outbound `
        -Priority 100 `
        -SourceAddressPrefix * `
        -SourcePortRange * `
        -DestinationAddressPrefix $adoIpPrefixes `
        -DestinationPortRange 443 `
        -Access Allow
    
    # 保存NSG配置
    Set-AzNetworkSecurityGroup -NetworkSecurityGroup $targetNsg
    

方法2:动态获取发布代理的出站IP(如果场景需要)

如果你的发布流程需要让VM允许发布代理的IP访问(比如入站规则),可以在发布任务中获取当前代理的公网IP,再更新NSG:

# 获取当前发布代理的公网IP
$agentPublicIp = (Invoke-RestMethod -Uri "https://api.ipify.org").Trim()

# 后续逻辑类似方法1,更新NSG的入站规则即可

方法3:用Azure Policy实现自动同步

如果你的环境需要长期维护NSG规则与Azure DevOps IP范围的同步,可以创建Azure Policy,定期自动拉取最新IP并更新NSG,这样就不用每次发布都手动处理了。

另外你提到的AWS相关的脚本方案,是针对AWS安全组的,适配Azure环境的话,上面的方法会更直接有效。

内容的提问来源于stack exchange,提问作者m00nbeam360.0

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 07:26:07