AWS S3:GUI可操作存储桶,CLI执行ListObjectsV2时权限被拒
问题描述
- AWS GUI登录身份显示为
my_name @ 1234,通过aws sts get-caller-identity --profile my_role验证CLI身份,返回账号1234、ARN为arn:aws:iam::1234:user/my_name,确认GUI与CLI使用同一身份。 - GUI中可正常打开
s3_bucket_signature-1存储桶,查看并下载所有文件;但执行aws s3 cp --recursive s3://s3_bucket_signature-1/* my_dir --profile my_role时,报错:fatal error: An error occurred (AccessDenied) when calling the ListObjectsV2 operation: Access Denied。 - 该身份所属用户组的权限策略如下:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": [ "s3:Get*", "s3:List*", "s3-object-lambda:Get*", "s3-object-lambda:List*" ], "Resource": [ "arn:aws:s3:::s3_bucket_signature-*", "arn:aws:s3:::s3_bucket_signature-*/*" ] }, { "Effect": "Allow", "Action": "s3:ListAllMyBuckets", "Resource": "*" } ] }
问题原因
问题出在CLI命令的路径写法上:
- 使用
s3://s3_bucket_signature-1/*作为源路径时,AWS CLI会先发起ListObjectsV2请求遍历存储桶根目录的所有对象,但末尾的*会导致权限校验逻辑出现偏差,无法匹配策略中允许的资源路径。 - AWS GUI的操作逻辑不同,它直接访问存储桶内的对象路径,能正确匹配策略中的
arn:aws:s3:::s3_bucket_signature-*/*资源,因此可以正常操作。 - 解决方法是去掉路径末尾的
*,使用s3://s3_bucket_signature-1/作为源路径,执行命令:aws s3 cp --recursive s3://s3_bucket_signature-1/ my_dir --profile my_role。此时CLI会直接对存储桶根目录执行ListObjectsV2操作,匹配策略中的arn:aws:s3:::s3_bucket_signature-*资源,即可正常获取权限完成递归拷贝。
内容的提问来源于stack exchange,提问作者algebruh
相关产品推荐
相关产品推荐

