总结
我正在为Azure DevOps管道中的新Azure存储帐户创建CI/CD配置管道,并尝试使用从管道中的Azure Powershell任务运行的AzCopy将一些文件上传到Blob存储中。
错误
该脚本在我的本地机器上成功运行,但在Azure DevOps管道中运行时,我收到以下错误(ErrorDateTime 只是一个模糊的ISO 8601格式的日期时间):
- System.Management.Automation.RemoteException:[ErrorDateTime][ERROR]分析目标位置“https://newStorageAccount.blob.core.windows.net/config/import“时出错:无法验证目标:出现一个或多个错误。远程服务器返回错误:(403)第四季
[error][ErrorDateTime][ERROR]解析目标位置“https://newStorageAccount.blob.core.windows.net/config/import“时出错:无法验证目标:出现一个或多个错误。远程服务器返回错误:(403)第四季
[debug]已处理:##vso[task.logissue type=error][ErrorDateTime][ERROR]解析目标位置“https://newStorageAccount.blob.core.windows.net/config/import“时出错:无法验证目标:出现一个或多个错误。远程服务器返回错误:(403)第四季
- 错误记录:
- 此请求未被授权执行此操作。
假设
- 存储帐户已设置为仅允许特定的VNet和IP地址访问。
- 看起来防火墙或凭据配置错误,但运行脚本的ServicePrincipal已在其他同级管道任务中成功使用,为了理解这些问题,我暂时授予了ServicePrincipal订阅所有者权限,并且存储帐户防火墙规则选项卡具有“允许受信任的Microsoft服务访问此存储帐户”
我所尝试的 - 我已经成功地运行脚本从我的本地机器与我的IP地址正在允许的列表中。
- 如果我在存储帐户防火墙规则上启用“允许从所有网络访问”,则脚本将运行,文件将成功上载。
- 看起来好像在自己的VNet中运行的Azure Pipeline代理无法访问我的存储帐户,但我认为通过在防火墙设置中设置“允许受信任的Microsoft服务访问此存储帐户”可以满足此要求
我在Azure Powershell任务中使用以下行。我对这些值很满意,因为当“所有网络”或我的IP地址被启用并且我在本地运行时,一切都正常。
.\AzCopy.exe /Source:$SourcePath /Dest:$blobUrlDir /DestKey:$key /Pattern:$FilenamePattern /Y
任何想法或指导将不胜感激。
谢谢
SJB
4条答案
按热度按时间1szpjjfi1#
人们似乎在this github issue中得到了混合的结果,但是在将“Storage Blob Data Contributor”角色添加到ARM连接的服务主体(到存储帐户本身)之后,AzureFileCopy@4任务工作(至少对我们来说)。下面是在blob容器中将repo部署为静态网站的管道中唯一必要的步骤:
(Of当然,如果你像我们一样使用Azure CDN,下一步是清除CDN端点的缓存,但这与blob存储错误无关)
xqk2d5yq2#
在做了进一步的研究之后,我注意到了以下提出的问题-从存储帐户的Angular 来看,Azure DevOps不被视为受信任的Microsoft服务。
我的临时解决方法是:
谢谢
SJB
9lowa7mx3#
在我的示例中,在管道中选择的Azure订阅中的服务主体需要具有存储Blob数据贡献者角色,用于我想要复制文件的所需存储帐户。
要执行此操作,请执行以下步骤:
1.打开DevOps管道,找到Azure订阅字段,点击旁边的【管理】按钮
1.然后单击“管理服务主体”并注意显示名称(可选择将其更改为唯一名称-因为项目中服务连接的所有服务主体都具有相同的默认名称,这可能会使下一步混淆)
1.在Azure Portal中打开存储资源(帐户或容器),然后在左侧刀片中选择“访问控制(IAM)”,然后单击“添加角色分配”,并将“存储Blob数据贡献者”角色添加到您在上一步中记录的服务主体中
如果“添加角色分配”被禁用或变灰,则需要请求管理员授予该访问权限。
这个解决方案是从这个GitHub评论中获得并改进的。
c90pui9n4#
您是否考虑过使用Azure DevOps任务“Azure文件复制”而不是powershell脚本?参见:https://learn.microsoft.com/en-us/azure/devops/pipelines/tasks/deploy/azure-file-copy?view=azure-devops