复制Azure磁盘快照至Blob存储遇CannotVerifyCopySource错误求助
执行PowerShell脚本将Azure托管快照导出到存储账户Blob容器时,触发CannotVerifyCopySource错误,提示:
Server failed to authenticate the request. Please refer to the information in the www-authenticate header.
已将本地IP加入存储账户防火墙白名单,脚本代码如下:
$resourceGroupName = 'RG_DISKS' $snapshotName = 'DATADISK1' $resourceGroupNameStorageAccount = 'RG_DISKS' $storageAccountName = 'STR_001' $storageContainerName = 'STR_001_DISK1' $destinationVHDFileName = 'DATADISK1_vhd' $storageAccountKey = Get-AzStorageAccountKey -resourceGroupName $resourceGroupNameStorageAccount -AccountName $storageAccountName $sas = Grant-AzSnapshotAccess -ResourceGroupName $resourceGroupName -SnapshotName $snapshotName -DurationInSecond 3600 -Access Read $destinationContext = New-AzStorageContext -StorageAccountName $storageAccountName -StorageAccountKey ($storageAccountKey).Value[0] Start-AzStorageBlobCopy -AbsoluteUri $sas.AccessSAS -DestContainer $storageContainerName -DestContext $destinationContext -DestBlob $destinationVHDFileName
开启存储账户的受信任服务访问权限
快照复制属于Azure内部服务操作,即使添加了本地IP白名单,存储账户防火墙默认会阻止此类内部请求。需要在存储账户的「防火墙和虚拟网络」设置中,勾选允许受信任的Microsoft服务访问此存储账户选项。验证SAS URI的有效性
输出$sas.AccessSAS变量,确认生成的是完整且有效的带SAS权限的快照URI,检查权限是否为Read、有效期是否在当前时间范围内。如果URI不完整或权限不足,会导致认证失败。确认存储账户密钥的正确性
执行Get-AzStorageAccountKey命令查看两个密钥的状态,确保($storageAccountKey).Value[0]是当前活跃的密钥。若密钥已轮换,使用旧密钥会导致上下文认证失败。也可以尝试改用存储账户SAS令牌创建上下文,避免密钥管理问题。检查区域一致性
确保快照和目标存储账户处于同一Azure区域,跨区域复制可能存在额外的网络策略限制,可作为辅助排查项。尝试改用AzCopy工具
若PowerShell命令仍存在问题,可使用AzCopy执行复制操作,示例命令如下:# 先生成存储账户的写入权限SAS令牌 $storageAccountSAS = New-AzStorageAccountSASToken -Service Blob -ResourceType Container,Object -Permission w -Context $destinationContext # 执行复制 azcopy copy "$($sas.AccessSAS)" "https://$storageAccountName.blob.core.windows.net/$storageContainerName/$destinationVHDFileName$storageAccountSAS"
内容的提问来源于stack exchange,提问作者progrAmmar

