为何使用StringLike条件的S3桶IAM策略无法下载文件?
第一个S3 IAM策略失效的原因分析
我拥有名为my.example.com的S3桶,桶内包含Folder1文件夹。以下IAM策略无法让我从Folder1下载文件:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "MyPolicy", "Effect": "Allow", "Action": "s3:Get*", "Resource": "arn:aws:s3:::my.example.com", "Condition": { "StringLike": { "s3:prefix": [ "Folder1/*" ] } } } ] }
而以下策略却可以正常允许下载:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "MyPolicy", "Effect": "Allow", "Action": "s3:Get*", "Resource": "arn:aws:s3:::my.example.com/Folder1/*" } ] }
失效原因解析
第一个策略失效核心有两点:
- 资源目标不匹配:
s3:Get*操作(尤其是下载文件用到的s3:GetObject)要求授权的资源是具体对象的ARN(格式为arn:aws:s3:::bucket-name/object-key),而非桶本身的ARN(arn:aws:s3:::bucket-name)。第一个策略把资源设为桶的ARN,不符合GetObject操作的资源要求,因此权限无法匹配生效。 - 条件字段不适用:
s3:prefix条件仅对列出桶内对象的操作(比如s3:ListBucket)生效,用于过滤列出的内容前缀。对于GetObject这类直接获取单个对象的操作,AWS不会检查s3:prefix条件,所以这个条件对下载操作没有任何限制或授权作用。
内容的提问来源于stack exchange,提问作者Ben Rubin
相关产品推荐
相关产品推荐

