Status = 403 Code =“AuthorizationFailure” Message =“此请求无权执行此操作”

HLT*_*HLT 12 azure terraform azure-blob-storage azure-devops azure-pipelines

我正在尝试运行一个部署存储容器的 terraform 部署。初始部署有效(由于尚未到位 IP 过滤),但随后失败。运行 terraform plan 时,我得到以下信息:

Error: retrieving Container "xxxx" (Account "xxxx" / Resource Group "xxx"): containers.Client#GetProperties: Failure responding to request: StatusCode=403 -- Original Error: autorest/azure: Service returned an error. Status=403 Code="AuthorizationFailure" Message="This request is not authorized to perform this operation.\nRequestId:62a85c92-901e-0021-12de-816608000000\nTime:2022-06-17T00:11:56.2063816Z"
Run Code Online (Sandbox Code Playgroud)

根据一些研究和调试,当存储容器没有将托管管道代理的 IP 列入白名单时,就会发生这种情况。

我修改了管道,以便检索代理的 IP 并将其添加为防火墙规则。然后,我添加了不同时间的睡眠(最多 5 分钟),尝试为规则生效留出时间,但它从未起作用。

这是我的管道的片段:

          - task: AzureCLI@2
            inputs:
              azureSubscription: '$(azureSubscription)'
              scriptType: 'bash'
              scriptLocation: 'inlineScript'
              inlineScript: |
                 agentIP=$(curl -s https://api.ipify.org/)
                 az storage account network-rule add -g xxx --account-name xxx --ip-address $agentIP
                 sleep 300
Run Code Online (Sandbox Code Playgroud)

在睡眠期间我已经确认代理IP已添加到白名单中。白名单也是在与 terraform 计划相同的阶段完成的。

有人能建议我哪里可能出错吗?

编辑

我更进一步,在管道中添加了一个步骤,将 DevOps 组织区域(114 个范围)中的所有 IP 地址列入白名单,但它仍然失败。

我的 Azure DevOps 管道代理获取的 IP 甚至不属于返回范围的一部分az network list-service-tags --location australiaeast --query "values[?name == 'AzureCloud.australiaeast'].properties.addressPrefixes[]"

Ruk*_*ini 6

要解决错误“Status=403 Code=AuthorizationFailure Message=此请求无权执行此操作”,请尝试修改 Azure 门户中的设置,如下所示:

转到 Azure 门户 -> 存储帐户 -> 您从 terraform 创建的存储帐户 -> 网络

在此输入图像描述

  • 启用“允许受信任的 Microsoft 服务访问此存储帐户”允许您访问存储帐户。
  • 确保拥有所需的权限,例如Contributor角色User Access Administrator/Storage Blob Data Owner角色。

如果问题仍然存在,请使用Ansuman Bal的类似SO 线程中的示例代码。

  • 您好,RukminiMr-MT,我已启用“允许受信任的 Microsoft 服务访问此存储帐户”,但据我所知,Azure DevOps 不是受信任的 Microsoft 服务。至于链接的线程,这是在本地运行 terraform,而不是通过 Azure DevOps。 (3认同)