AzCopy从S3迁移至ADLS Gen2遇PUT权限错误求助
问题:AzCopy从S3迁移到ADLS Gen2时出现CannotVerifyCopySource 403错误
使用AzCopy将Amazon S3数据迁移至Azure Data Lake Storage Gen2时,触发CannotVerifyCopySource 403 Forbidden错误,提示缺少PUT权限,但已完成以下配置:
- 为ADLS生成全权限SAS令牌
- 配置了AWS IAM策略(权限看似充足)
- 已在命令行设置
AWS_ACCESS_KEY_ID和AWS_SECRET_ACCESS_KEY环境变量
已配置内容
环境变量
set AWS_ACCESS_KEY_ID=123 set AWS_SECRET_ACCESS_KEY=ABC
AWS IAM策略
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:ListBucket", "s3:GetBucketLocation" ], "Resource": "arn:aws:s3:::s3_bucket" }, { "Effect": "Allow", "Action": [ "s3:GetObject" ], "Resource": "arn:aws:s3:::s3_bucket/dir/profiles/*" } ] }
执行的AzCopy命令
C:\Users\[user]>azcopy copy "https://s3.eu-west-1.amazonaws.com/s3_bucket/dir/dir/dir/dir/" "https://[stg_container_name].blob.core.windows.net/raw-test?[SASTOKEN]" --recursive=true
关键错误日志
INFO: Authentication failed, it is either not correct, or expired, or does not have the correct permission PUT https://[stg_container_name].blob.core.windows.net/raw-test/2024/profiledata_GB_2024_06.csv.gz RESPONSE 403: 403 Forbidden ERROR CODE: CannotVerifyCopySource <?xml version="1.0" encoding="utf-8"?><Error><Code>CannotVerifyCopySource</Code><Message>Forbidden RequestId:5ae5e3b8-401e-0063-7b44-63ea97000000 Time:2025-01-10T09:46:44.2555118Z</Message></Error> 2025/01/10 10:22:33 ERR: [P#0-T#2] COPYFAILED: https://s3.eu-west-1.amazonaws.com/s3_bucket/dir/dir/dir/2024/profiledata_GB_2024_31.csv.gz : 403 : 403 Forbidden. When Staging block from URL.
排查与解决步骤
1. 修正S3 IAM策略的资源路径匹配
你的IAM策略中GetObject的资源路径是arn:aws:s3:::s3_bucket/dir/profiles/*,但实际迁移的S3对象路径是s3_bucket/dir/dir/dir/dir/2024/...,路径完全不匹配。需要调整策略资源路径覆盖目标对象:
{ "Effect": "Allow", "Action": [ "s3:GetObject" ], "Resource": "arn:aws:s3:::s3_bucket/dir/dir/dir/dir/*" }
若允许,也可使用更宽泛的路径:arn:aws:s3:::s3_bucket/dir/*
2. 确保AWS认证无冲突
AzCopy优先使用环境变量,但如果本地存在~/.aws/credentials配置文件,可能导致认证冲突。处理方式:
- 临时重命名或清理
~/.aws/credentials文件 - 执行命令前重新设置环境变量并确保生效:
set AWS_ACCESS_KEY_ID=你的实际密钥ID set AWS_SECRET_ACCESS_KEY=你的实际密钥 azcopy copy ...
3. 验证SAS令牌权限与有效期
确认SAS令牌包含Write、Create、Add权限,且未过期。可通过Azure Portal重新生成SAS,选择:
- 容器权限:Read, Write, Delete, List
- Blob权限:Read, Write, Delete, Add, Create
4. 强制AzCopy使用本地中转拷贝
AzCopy默认尝试Azure服务器端直接拷贝(从S3拉取到ADLS),若S3对象非公开或权限受限会触发错误。添加--from-to S3Blob参数强制先下载到本地再上传:
azcopy copy "https://s3.eu-west-1.amazonaws.com/s3_bucket/dir/dir/dir/dir/" "https://[stg_container_name].blob.core.windows.net/raw-test?[SASTOKEN]" --recursive=true --from-to S3Blob
5. 检查S3桶/对象的ACL设置
确认S3桶或目标对象的ACL未限制对应IAM用户的访问,比如是否设置为私有且未授权该IAM用户。
6. 更新AzCopy到最新版本
旧版本AzCopy可能存在S3兼容性问题,前往Azure官方下载页面获取最新版本后重试。
内容的提问来源于stack exchange,提问作者Shoaib Maroof
相关产品推荐
相关产品推荐

