Azure VM的NSG出站规则适配VSTS部署组及IP动态配置问询
嘿,针对你的两个问题,我整理了实用的解决方案,帮你搞定NSG和Azure DevOps(原VSTS)的适配问题:
首先要明确:VSTS部署组的代理是主动发起出站连接到Azure DevOps服务端的,所以你不需要在NSG里配置入站规则允许VSTS的IP访问VM,反而要确保VM能出站访问Azure DevOps服务端的IP范围。
而Azure DevOps Services(原VSTS)的服务IP范围确实会定期更新,和托管构建代理的IP变更逻辑一致,通常每周会发布新的IP列表,你需要同步这些范围来保证VM能正常和服务端通信。
你提到之前的REST API失效了,这里有几个可靠的替代方法,适配你通过发布定义创建VM并配置NSG的场景:
方法1:拉取官方Azure DevOps IP范围JSON更新NSG
Azure官方会维护一个包含所有Azure服务IP范围的JSON文件,其中就包含Azure DevOps的IP段。你可以在发布流程中添加PowerShell任务,自动拉取并更新NSG规则:
添加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来自动获取最新文件。接着使用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

