Azure DevOps管道Azure Blob存储上载文件403禁止的异常

时间:2019-07-06 18:13:03

标签: azure azure-devops azure-powershell

摘要

我正在为Azure DevOps管道中的新Azure存储帐户创建CI / CD设置管道,并尝试使用从管道中的Azure Powershell任务运行的AzCopy将某些文件上传到Blob存储中。

错误

脚本从我的本地计算机成功运行,但是在Azure DevOps管道中运行时,出现以下错误( ErrorDateTime 只是混淆的ISO 8601格式的日期时间):

假设

  • 已将存储帐户设置为仅允许特定的VNet和IP地址访问。
  • 防火墙或凭据似乎配置有误,但运行该脚本的ServicePrincipal已成功用于其他同级管道任务中,并且为了理解这些问题,我已临时赋予ServicePrincipal订阅所有者权限和存储帐户防火墙规则标签上具有“允许受信任的Microsoft Services访问此存储帐户”

我尝试过的...

  • 我已经从本地计算机成功运行了脚本,并且IP地址在允许的列表中。

  • 如果我在存储帐户防火墙规则上启用了“允许来自所有网络的访问”,则脚本将运行并且文件已成功上传。

  • 似乎在其自己的VNet中运行的Azure Pipeline代理无法访问我的存储帐户,但我认为可以通过设置“允许受信任的Microsoft Services访问此存储帐户来满足要求” “在防火墙设置中

我在Azure Powershell任务中使用以下行。我对这些值感到满意,因为当“所有网络”或我的IP地址启用并在本地运行时,一切正常。

.\AzCopy.exe /Source:$SourcePath /Dest:$blobUrlDir /DestKey:$key /Pattern:$FilenamePattern /Y

任何想法或指导将不胜感激。

谢谢

SJB

3 个答案:

答案 0 :(得分:2)

人们似乎在this github issue中得到了不同的结果,但是在将“ Storage Blob数据贡献者”角色添加到ARM连接的服务主体后,AzureFileCopy@4任务起作用(至少对我们而言)。以下是将回购协议作为静态网站部署到Blob容器中的管道中唯一必要的步骤:

- task: AzureFileCopy@4
  displayName: 'Copy files to blob storage: $(storageName)'
  inputs:
    SourcePath: '$(build.sourcesDirectory)'
    Destination: AzureBlob
    storage: $(storageName)
    ContainerName: $web
    azureSubscription: 'ARM Connection goes here' # needs a role assignment before it'll work

(当然,如果您像我们一样使用Azure CDN,下一步就是清除CDN终结点的缓存,但这与Blob存储错误无关)

答案 1 :(得分:1)

做进一步的研究后,我注意到了以下提出的问题-从存储帐户的角度来看,Azure DevOps被认为不是受信任的Microsoft服务。

我的临时解决方法是:

  • DefaultAction 设置为允许,从而允许“所有网络访问”。
  • 在复制操作确保我的VNet规则再次得到执行之后,将 DefaultAction 设置为 Den
Try
{
    Update-AzureRmStorageAccountNetworkRuleSet -ResourceGroupName "$ResourceGroupName" -Name "$StorageAccountName" -DefaultAction Allow
    .\AzCopy.exe /Source:$SourcePath /Dest:$blobUrlDir /DestKey:$key /Pattern:$FilenamePattern /Y
}
Catch
{
    #Handle errors...
}
Finally
{
    Update-AzureRmStorageAccountNetworkRuleSet -ResourceGroupName "$ResourceGroupName" -Name "$StorageAccountName" -DefaultAction Deny
}

谢谢

SJB

答案 2 :(得分:0)

您是否考虑过使用Azure DevOps任务“ Azure File Copy”代替Powershell脚本? 参见:https://docs.microsoft.com/en-us/azure/devops/pipelines/tasks/deploy/azure-file-copy?view=azure-devops