关于创建Azure存储Blob容器的错误403(已启用存储防火墙

时间:2020-05-26 08:26:05

标签: azure powershell azure-storage azure-storage-blobs azure-powershell

更新:

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

enter image description here


原始帖子:

我有一个启用防火墙的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

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

1 个答案:

答案 0 :(得分:1)

我对这个问题有微软的答复。

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

如果代理与存储帐户位于同一区域,则将使用专用IP进行通信,而存储帐户白名单不支持该IP,因此会出现错误。 / p>

就是这样,没有解决方法可以使用Microsoft Hosted Agents来解决。

替代

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

长期解决方案

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

希望这会帮助遇到相同问题的其他人。

?‍♀️