为何配置IAM策略限制S3特定对象版本访问后,list命令仍返回全部版本?
问题
我的S3桶中有一个对象的三个版本,我试图创建IAM角色以使用户仅能访问该对象的特定版本,当前使用的IAM策略如下:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "s3:ListAllMyBuckets", "Resource": "*" }, { "Effect": "Allow", "Action": [ "s3:ListBucketVersions" ], "Resource": "arn:aws:s3:::my-bucket" }, { "Effect": "Allow", "Action": "s3:GetObjectVersion", "Resource": "arn:aws:s3:::my-bucket/photo.jpg" }, { "Effect": "Deny", "Action": "s3:GetObjectVersion", "Resource": "arn:aws:s3:::my-bucket/photo.jpg", "Condition": { "StringNotEquals": { "s3:VersionId": "X9R5gJiVUszzxtlsBdMi_cfvftr43" } } } ] }
但执行aws s3api list-object-versions --bucket my-bucket --prefix photo.jpg命令时,仍返回该文件的全部三个版本,请问我哪里配置错误?
答案
你的策略只限制了**获取特定对象版本(s3:GetObjectVersion)的权限,但完全放开了列出对象版本(s3:ListBucketVersions)**的权限,没有对该操作做任何版本过滤,所以执行list-object-versions时会返回所有版本信息。
要解决这个问题,需要给s3:ListBucketVersions的权限添加版本限制,有两种常见方式:
方式1:仅允许列出指定版本
修改原策略中s3:ListBucketVersions的Allow语句,添加Condition过滤目标版本ID:
{ "Effect": "Allow", "Action": [ "s3:ListBucketVersions" ], "Resource": "arn:aws:s3:::my-bucket", "Condition": { "StringEquals": { "s3:VersionId": "X9R5gJiVUszzxtlsBdMi_cfvftr43" } } }
方式2:拒绝列出非目标版本
保留原Allow语句,新增一条Deny语句,拒绝列出除目标版本外的其他版本:
{ "Effect": "Deny", "Action": "s3:ListBucketVersions", "Resource": "arn:aws:s3:::my-bucket", "Condition": { "StringNotEquals": { "s3:VersionId": "X9R5gJiVUszzxtlsBdMi_cfvftr43" } } }
修改后,执行list-object-versions命令就只会返回你指定的那个版本信息,同时原有的GetObjectVersion权限限制依然生效,用户只能获取该特定版本的对象内容。
内容的提问来源于stack exchange,提问作者Somethingwhatever
相关产品推荐
相关产品推荐

