创建 Azure 存储 Blob 容器时出现错误 403(已启用存储防火墙)

Error 403 on Creating Azure Storage Blob Container (Storage Firewall Enabled

更新:

在 Maurad 发表评论后,我发现了一个日志,显示 "CreateContainer" 操作似乎是 运行 在不同的 IP 下 知道为什么会这样吗?


原文Post:

我有一个启用了防火墙的 azure 存储帐户,我正在尝试使用 VSTS 构建管道在该帐户中创建一个 blob 容器。

该管道由 Microsoft 托管代理 运行 提供,因此,在创建容器之前将机器的 IP 添加到防火墙并在之后将其删除是我流程的一部分。

问题是当我 运行 创建 blob 命令时出现错误 403。

我尝试在将 ip 添加到防火墙后添加等待时间,但即使我等待 5 分钟,我仍然得到 403。

这是我的脚本 运行:

$MyIP = (Invoke-WebRequest 'https://ifconfig.me/ip' -Method Get).Content

Try {
    Add-AzStorageAccountNetworkRule -ResourceGroupName $ResourceGroupName `
        -Name $StorageAccountName `
        -IPAddressOrRange $MyIP

    $ctx = (Get-AzStorageAccount -ResourceGroupName $ResourceGroupName `
            -Name $StorageAccountName).Context

    New-AzStorageContainer -Name $ContainerName `
        -Context $ctx
}
Finally {
    Remove-AzStorageAccountNetworkRule -ResourceGroupName $ResourceGroupName `
        -Name $StorageAccountName `
        -IPAddressOrRange $MyIP
}

这是我得到的结果(你可以看到代理的ip已正确添加)

Action IPAddressOrRange
------ ----------------
 Allow 127.0.0.1
 Allow 104.40.203.123 # This is the build agent IP

New-AzStorageContainer: C:\Users\Desktop\Test.ps1:15
Line |
  15 |      New-AzStorageContainer -Name $ContainerName `
     |      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     | This request is not authorized to perform this operation. HTTP Status Code: 403 - HTTP Error Message:
     | This request is not authorized to perform this operation.
ErrorCode: AuthorizationFailure
     | ErrorMessage: This request is not authorized to perform this operation.
     | RequestId:9112d81a-e01e-002a-7935-331d33000000
Time:2020-05-26T08:11:04.9195569Z

Action IPAddressOrRange
------ ----------------
 Allow 127.0.0.1

备注:禁用防火墙有效,但我不能在产品中这样做

我从微软那里得到了关于这个问题的答案。

发生的事情是,当我们创建一个 Azure DevOps 组织时,我们需要为它通知一个区域,但这些区域是 Azure 区域的子集。 每当我 运行 使用 Microsoft 托管代理的管道时,该代理就会在某个 Azure 区域启动。

如果代理与存储帐户位于同一区域,则通信将使用私有 IP 进行,这在存储帐户白名单中不受支持,因此您有错误。

就是这样,没有使用 Microsoft Hosted Agents 解决此问题的解决方法。

备选

根据 Microsoft 的建议,您必须使用自托管代理以确保不会发生此问题。没有其他已知的替代品。

长期解决方案

有一个功能请求将 Azure DevOps 作为存储帐户上“受信任的服务”的可能选择之一。这将以适当的方式解决问题,但是没有实施此功能的时间表。

希望这能帮助遇到同样问题的其他人。

‍♀️