提问者:小点点

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


我正在Azure DevOps管道中为新的Azure存储帐户创建CI/CD资源调配管道,并尝试使用管道中的Azure Powershell任务运行的AzCopy将一些文件上载到Blob存储。

脚本在我的本地计算机上成功运行,但在Azure DevOps管道中运行时,我收到以下错误(ErrorDateTime只是一个模糊的ISO 8601格式的日期时间):

  • 系统。经营自动化RemoteException:[ErrorDateTime][ERROR]分析目标位置时出错”https://newStorageAccount.blob.core.windows.net/config/import“:验证目标失败:出现一个或多个错误。远程服务器返回错误:(403)禁止。
  • [错误][ErrorDateTime][error]分析目标位置时出错”https://newStorageAccount.blob.core.windows.net/config/import“:验证目标失败:出现一个或多个错误。远程服务器返回错误:(403)禁止。

  • [调试]已处理:##vso[task.logissue type=error][ErrorDateTime][error]分析目标位置时出错”https://newStorageAccount.blob.core.windows.net/config/import“:验证目标失败:出现一个或多个错误。远程服务器返回错误:(403)禁止。

  • 错误记录:
  • 此请求未被授权执行此操作
  • 存储帐户已设置为仅允许特定的VNet和IP地址访问

我试过的。。。

>

如果在存储帐户防火墙规则上启用“允许从所有网络访问”,则脚本将运行并成功上载文件。

看起来好像在他们自己的VNet中运行的Azure管道代理没有访问我的存储帐户的权限,但我认为通过在防火墙设置中设置“允许受信任的Microsoft服务访问此存储帐户”可以满足这一要求

我在Azure PowerShell任务中使用以下行。我对这些值很满意,因为当启用“所有网络”或我的IP地址并在本地运行时,一切都可以工作。

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

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

谢谢

SJB


共3个答案

匿名用户

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

  • https://github.com/MicrosoftDocs/azure-docs/issues/19456

我的临时解决办法是:

  • 将DefaultAction设置为Allow,从而允许“所有网络访问”
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

匿名用户

人们似乎在这个github问题上得到了好坏参半的结果,但是AzureFileCopy@4在将“存储Blob数据贡献者”角色添加到ARM连接的服务主体后,该任务可以工作(至少对我们来说)。以下是将回购部署为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,下一步是清除CDNendpoint的缓存,但这与blob存储错误无关)

匿名用户

是否考虑过使用Azure运营模式任务"Azure文件副本"而不是PowerShell脚本?见:https://docs.microsoft.com/en-us/azure/devops/pipelines/tasks/deploy/azure-file-copy?view=azure-devops

相关问题