AWS控制台可传文件至S3存储桶,CLI上传报AccessDenied如何解决?
解决AWS CLI执行s3 sync时的AccessDenied问题
你遇到的问题根源在于:aws s3 sync命令需要读取目标S3桶内的现有对象列表(对应ListObjectsV2操作,即s3:ListBucket权限),以此对比本地文件和桶内文件的差异实现增量同步;而AWS控制台手动上传文件仅需s3:PutObject权限,不需要列出桶内容的权限,所以控制台能成功但CLI sync失败。
可以按以下步骤解决:
检查并补充IAM权限:确保你CLI使用的IAM身份(用户/角色)拥有以下权限:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:PutObject", "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::<s3-bucket>", "arn:aws:s3:::<s3-bucket>/test-directory/*" ] } ] }注意替换
<s3-bucket>为你的实际桶名,s3:ListBucket的资源是桶本身,s3:PutObject的资源是桶内的目标路径。确认CLI使用的身份与控制台一致:有时候CLI默认配置的身份和你控制台登录的不是同一个。执行以下命令查看当前CLI的身份:
aws sts get-caller-identity对比返回的
UserId和Arn与你控制台登录的IAM身份是否匹配。如果不一致,需要切换CLI的配置文件(用aws configure --profile <profile-name>)或者更新默认配置的密钥。临时替代方案(无需增量同步):如果不需要sync的增量更新功能,直接用递归上传命令,该命令仅需
s3:PutObject权限:aws s3 cp --recursive d1/ s3://<s3-bucket>/test-directory
内容的提问来源于stack exchange,提问作者Ritesh
相关产品推荐
相关产品推荐

