我有一个在 Web App 上运行的应用程序,需要与 Azure DevOps Microsoft 托管代理进行通信。我已经设置了一些 IP 限制来拒绝一切,现在正在将代理的 IP 列入白名单。当我阅读此页面时,它指的是每周 json,其中包含有关我需要的所有内容的对象(每个区域的 CIDR)。我已经解析了 json,将它们添加到我的允许列表中,但是代理的公共 IP 地址不在 json 中提到的范围内。我检查的方式是在代理上运行 bash 任务到
curl icanhazip.com
。有谁知道列表是否完整或者我应该看看其他地方?
即以我为例:
我使用此数据(因为我的 ADO 组织位于西欧):
{
"name": "AzureDevOps.WestEurope",
"id": "AzureDevOps.WestEurope",
"properties": {
"changeNumber": 1,
"region": "westeurope",
"regionId": 18,
"platform": "Azure",
"systemService": "AzureDevOps",
"addressPrefixes": [
"40.74.28.0/23"
],
"networkFeatures": null
}
}
但代理从 IP 发起连接:20.238.71.171,该 IP 不在该 json 文件提供的任何 CIDR 中(使用 ADO 检查了所有其他区域)。
有什么想法/帮助吗?
您需要将所有范围列入白名单,例如 Azure 西欧。这些是很多不同的 IP 范围,因为 Azure DevOps 托管代理没有服务标签。
由于这实际上会向西欧运行的每个虚拟机打开您的防火墙,因此这通常并不是真正需要的,因为它距离向整个世界开放您的应用程序还差一点。
因此,人们通常会做以下事情:
我知道这是一个老问题,但自从我来到这里后,我想分享我根据建议的解决方案使用的代码。
我使用 Azure Cli az keyvault network-rule 模块来添加和删除公共代理 IP。
代码示例:
- task: AzureCLI@2
displayName: "Adding Virtual Agent Public Allowed IP Firewall list of KV."
inputs:
scriptType: "pscore"
scriptLocation: "inlineScript"
azureSubscription: $( azureSubscription )
inlineScript: |
$agentHostPublicIp = (Invoke-WebRequest ifconfig.me/ip).Content.Trim()
Write-Output "Public IP of agent to add: $agentHostPublicIp"
az keyvault network-rule add --name $(vg_vault_name) --ip-address $agentHostPublicIp --no-wait --resource-group $(vg_resource_group_name)
- task: AzureKeyVault@2
displayName: "Download from Azure Key Vault '$(vg_vault_name)' secrets."
inputs:
azureSubscription:$( azureSubscription )
KeyVaultName: $(vg_vault_name)
SecretsFilter: "*" # string. Required. Secrets filter. Default: *.
RunAsPreJob: false
- task: AzureCLI@2
displayName: "Removing Virtual Agent Public Allowed IP Firewall list of KV."
condition: always() # Run this task, even if the previous one failed
inputs:
scriptType: "pscore"
scriptLocation: "inlineScript"
azureSubscription: $( azureSubscription )
inlineScript: |
$agentHostPublicIp = (Invoke-WebRequest ifconfig.me/ip).Content.Trim()
Write-Output "Public IP of agent to remove: $agentHostPublicIp"
az keyvault network-rule remove --name $(vg_vault_name) --ip-address $agentHostPublicIp --no-wait --resource-group $(vg_resource_group_name)
下一步,您可以使用从保险库中提取的任何秘密。
官方文档中的示例 在 Azure Pipelines 中使用 Azure Key Vault 机密
此解决方案假设用户使用的是 Azure 公共代理而不是托管代理。如果用户使用托管代理,则他只需添加一次代理的公共 IP,无需再次删除它们。
如果您指的是 MS 托管代理: 您应该使用 AzureCloud 服务标签
托管代理的 IP 地址范围列在 AzureCloud 下的每周文件中,例如美国西部区域的 AzureCloud.westus。