You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AzCopy从S3复制到Azure Blob时CannotVerifyCopySource错误的原因与解决

问题描述

使用AzCopy将CSV文件从AWS S3存储桶复制到Azure Blob存储时,命令执行失败,返回403 Forbidden错误,错误码为CannotVerifyCopySource。相关调试输出如下:

025/05/06 07:36:24 ==> REQUEST/RESPONSE (Try=1/210.157ms, OpTime=210.157ms) -- RESPONSE STATUS CODE ERROR
   PUT https://stsundar5.blob.core.windows.net/sundar5/Gold%20PTS_Sundar%20%235%20(South)_Hourly_2025050606_UTC.csv?[SAS_TOKEN_REDACTED]
   Content-Length: [0]
   User-Agent: [AzCopy/10.17.0 Azure-Storage/0.15 (go1.19.2; Windows_NT)]
   X-Ms-Blob-Cache-Control: []
   X-Ms-Blob-Content-Disposition: []
   X-Ms-Blob-Content-Encoding: []
   X-Ms-Blob-Content-Language: []
   X-Ms-Blob-Content-Type: [text/csv]
   X-Ms-Blob-Type: [BlockBlob]
   X-Ms-Client-Request-Id: [REDACTED]
   X-Ms-Copy-Source: [https://sundar5.s3.dualstack.us-east-2.amazonaws.com/Sundar%20%235%20(South)/Gold%20PTS_Sundar%20%235%20(South)_Hourly_2025050606_UTC.csv?[AWS_PRESIGNED_URL_REDACTED]]
   X-Ms-Version: [2020-10-02]
   --------------------------------------------------------------------------------
   RESPONSE Status: 403 Forbidden
       Content-Length: [200]
       Content-Type: [application/xml]
       Date: [Tue, 06 May 2025 07:36:24 GMT]
       Server: [Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0]
       X-Ms-Client-Request-Id: [REDACTED]
       X-Ms-Error-Code: [CannotVerifyCopySource]
       X-Ms-Request-Id: [REDACTED]
       X-Ms-Version: [2020-10-02]
    Response Details: 

<Code>CannotVerifyCopySource</Code><Message>Forbidden</Message>

2025/05/06 07:36:24 ERR: [P#0-T#0] COPYFAILED: https://sundar5.s3.us-east-2.amazonaws.com/Sundar%20%235%20(South)/Gold%20PTS_Sundar%20%235%20(South)_Hourly_2025050606_UTC.csv : 403 : 403 Forbidden. When Put Blob from URL. X-Ms-Request-Id: [REDACTED]

   Dst: https://stsundar5.blob.core.windows.net/sundar5/Gold%20PTS_Sundar%20%235%20(South)_Hourly_2025050606_UTC.csv?[SAS_TOKEN_REDACTED]

已验证以下内容:

  • AWS预签名URL有效且可在浏览器中访问;
  • Azure Blob容器的SAS令牌拥有racwli权限;
  • 源文件存在于S3存储桶中,且URL指向正确对象。

使用的简化命令:

azcopy copy "https://sundar5.s3.us-east-2.amazonaws.com/...csv?[AWS_PRESIGNED_URL_REDACTED]" "https://stsundar5.blob.core.windows.net/sundar5?[AZURE_SAS_TOKEN_REDACTED]" --recursive=false

原因分析

  1. S3预签名URL权限不足:浏览器访问仅需GET权限,但Azure存储服务发起复制时,会先向S3发送HEAD请求验证源文件的存在和元数据,若预签名URL未包含HEAD权限,会触发403错误。
  2. S3存储桶CORS配置限制:S3的CORS策略可能拒绝了Azure存储服务的HEAD/GET请求,导致Azure无法验证源文件。
  3. 预签名URL的签名范围不匹配:生成预签名URL时,若仅指定了GET方法、未允许HEAD请求,或签名参数(如HTTP方法、有效期)与Azure发起的请求不匹配,会导致验证失败。
  4. 特殊字符的URL解析问题:源文件路径中的特殊字符(如#、括号)虽浏览器可处理,但Azure复制服务解析预签名URL时可能出现编码不兼容情况。

解决方案

1. 重新生成包含HEAD权限的S3预签名URL

生成预签名URL时,确保同时允许GET和HEAD请求。例如使用AWS CLI生成时,指定--method GET并确保签名包含HEAD权限(部分SDK需显式设置允许的HTTP方法)。

2. 配置S3存储桶的CORS规则

添加允许Azure存储服务请求的CORS规则,示例配置如下:

<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
    <CORSRule>
        <AllowedOrigin>https://*.blob.core.windows.net</AllowedOrigin>
        <AllowedMethod>GET</AllowedMethod>
        <AllowedMethod>HEAD</AllowedMethod>
        <AllowedHeader>*</AllowedHeader>
        <MaxAgeSeconds>3000</MaxAgeSeconds>
    </CORSRule>
</CORSConfiguration>

3. 检查预签名URL的生成参数

  • 确认预签名URL未限制HTTP方法为仅GET,需包含HEAD方法;
  • 确保URL中的特殊字符(如#、括号)已进行标准URL编码,避免解析异常。

4. 使用AzCopy的S3直接授权方式

若拥有AWS访问密钥,可跳过预签名URL,直接让AzCopy处理权限验证,命令示例:

azcopy copy "https://sundar5.s3.us-east-2.amazonaws.com/Sundar%20%235%20(South)/Gold%20PTS_Sundar%20%235%20(South)_Hourly_2025050606_UTC.csv" "https://stsundar5.blob.core.windows.net/sundar5?[AZURE_SAS_TOKEN_REDACTED]" --recursive=false --s3-access-key-id=<你的AWS访问密钥ID> --s3-secret-access-key=<你的AWS秘密访问密钥>

内容的提问来源于stack exchange,提问作者SKARVA Bodavula

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 05:07:09