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

Posted

技术标签:

【中文标题】创建 Azure 存储 Blob 容器时出现错误 403(已启用存储防火墙【英文标题】:Error 403 on Creating Azure Storage Blob Container (Storage Firewall Enabled 【发布时间】:2020-09-12 23:48:30 【问题描述】:

更新:

在 Maurad 发表评论后,我发现一个日志显示“CreateContainer”操作似乎在不同的 IP 下运行 ???????? 知道为什么会发生这种情况吗?


原帖:

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

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

问题是我在运行 create 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

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

【问题讨论】:

如果您在存储帐户上配置了存储分析,则可以检查分析日志以查看创建 Blob 容器的请求来自哪个 IP 地址。 我没有,但我可以做到。我会尝试更新我的发现。谢谢 我没有在我的分析中看到任何有关源 IP 地址的信息。仅限使用指标。 您是否在您的存储帐户中看到$logs 容器(您需要使用 Microsoft 存储资源管理器)?在那里您将看到分析日志。有关更多信息,请参阅此内容:docs.microsoft.com/en-us/rest/api/storageservices/…。 找到了!谢谢!您似乎是对的????,由于某些非常奇怪的原因,“CreateContainer”操作具有与所有其他操作不同的 IP。知道为什么会这样吗? 【参考方案1】:

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

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

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

就是这样,没有使用 Microsoft 托管代理解决此问题的解决方法。

另类

按照 Microsoft 的建议,您必须使用自托管代理来确保不会发生此问题。没有其他已知的替代方案。

长期解决方案

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

希望这会帮助其他有同样问题的人。

?‍♀️

【讨论】:

以上是关于创建 Azure 存储 Blob 容器时出现错误 403(已启用存储防火墙的主要内容,如果未能解决你的问题,请参考以下文章

替换 Azure Blob 存储中的文件时出现错误 500

尝试将生成的 pdf 文件上传到 Azure Blob 存储时出现 404 错误

在从 blob 存储中获取文件并传递给模型进行预测时出现 azure aci webservice 的超时错误

Azure Databricks 在 Blob 存储上打开文件时出现问题

尝试在 Web API 请求上检索 Azure Blob 时出现 403 错误

JS Azure 博客存储 - 运行时出现需要错误?