Azure DevOps IP 地址

问题描述 投票:0回答:3

我有一个在 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-devops
3个回答
17
投票

您需要将所有范围列入白名单,例如 Azure 西欧。这些是很多不同的 IP 范围,因为 Azure DevOps 托管代理没有服务标签。

由于这实际上会向西欧运行的每个虚拟机打开您的防火墙,因此这通常并不是真正需要的,因为它距离向整个世界开放您的应用程序还差一点。

因此,人们通常会做以下事情:

  1. 构建作业中的第一个任务,使用 ipfy.org 等工具获取正在执行的构建代理的公共 IP 地址
  2. 使用 AZ CLI 将此 IP 作为单个 IP 允许规则添加到您的应用程序
  3. 进行部署等
  4. 再次删除IP规则

2
投票

我知道这是一个老问题,但自从我来到这里后,我想分享我根据建议的解决方案使用的代码。

我使用 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,无需再次删除它们。


1
投票

如果您指的是 MS 托管代理: 您应该使用 AzureCloud 服务标签

托管代理的 IP 地址范围列在 AzureCloud 下的每周文件中,例如美国西部区域的 AzureCloud.westus。

文档: https://learn.microsoft.com/en-us/azure/devops/pipelines/agents/hosted?view=azure-devops&tabs=yaml#networking

© www.soinside.com 2019 - 2024. All rights reserved.