簡體   English   中英

Azure DevOps 管道 Azure Blob 存儲上傳文件 403 禁止異常

[英]Azure DevOps Pipeline Azure Blob Storage upload file 403 Forbidden Exception

概括

我正在為 Azure DevOps 管道中的新 Azure 存儲帳戶創建 CI/CD 配置管道,並嘗試使用從管道中的 Azure Powershell 任務運行的 AzCopy 將一些文件上傳到 Blob 存儲。

錯誤

該腳本在我的本地機器上成功運行,但是在 Azure DevOps 管道中運行時,我收到以下錯誤( ErrorDateTime只是一個經過混淆的 ISO 8601 格式的日期時間):

假設

  • 存儲帳戶已設置為僅允許特定 VNet 和 IP 地址訪問。
  • 看起來防火牆或憑據以某種方式配置錯誤,但運行腳本的 ServicePrincipal 已在其他同級管道任務中成功使用,為了理解這些問題,我暫時授予了 ServicePrincipal 訂閱所有者權限,並且存儲帳戶防火牆規則選項卡具有“允許受信任的 Microsoft 服務訪問此存儲帳戶”

我試過的...

  • 我已經成功地從我的本地機器運行了腳本,我的 IP 地址在允許列表中。

  • 如果我在存儲帳戶防火牆規則上啟用“允許從所有網絡訪問”,則腳本將運行並且文件已成功上傳。

  • 似乎在其自己的 VNet 中運行的 Azure 管道代理無權訪問我的存儲帳戶,但我認為通過在防火牆設置中設置“允許受信任的 Microsoft 服務訪問此存儲帳戶”可以滿足該要求

我在 Azure Powershell 任務中使用以下行。 我對這些值很滿意,因為當“所有網絡”或我的 IP 地址啟用並且我在本地運行時,一切正常。

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

任何想法或指導將不勝感激。

謝謝,

SJB

在進一步研究后,我注意到以下提出的問題 - 從存儲帳戶的角度來看,Azure DevOps 不被視為受信任的 Microsoft 服務。

我的臨時解決方法是:

  • DefaultAction設置為Allow ,從而允許“所有網絡訪問”。
  • 在復制操作后將DefaultAction設置為Deny 可確保再次強制執行我的 VNet 規則。
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 問題中得到了不同的結果,但是在將“存儲 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 存儲錯誤無關)

您是否考慮過使用 Azure DevOps 任務“Azure 文件復制”而不是 powershell 腳本? 請參閱: https : //docs.microsoft.com/en-us/azure/devops/pipelines/tasks/deploy/azure-file-copy?view=azure-devops

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM