创建仅访问S3特定子文件夹的IAM角色遇权限拒绝求助
S3特定子文件夹IAM权限配置问题排查与修复
问题根源分析
你的IAM策略存在以下几个核心错误:
- 资源ARN与操作类型不匹配:
PutObject属于对象级操作,需要授权对象资源arn:aws:s3:::insert_bucket_name/*,而非仅桶资源arn:aws:s3:::insert_bucket_name——桶资源仅适用于ListBucket这类桶级操作。 - Action大小写错误:策略中的
S3:Put*应为小写s3:Put*,AWS IAM Action严格区分大小写,大写会被识别为无效操作。 s3:prefix条件误用:s3:prefix仅在ListBucket等桶级操作中生效,PutObject操作需要通过匹配对象Key来限制,该条件对对象操作无效。- Deny语句逻辑冗余且风险高:当前Deny语句会拦截所有不符合prefix的操作,但结合Allow语句的错误配置,连合法的目标路径操作也会被误拦截。
修复后的IAM策略
{ "Version": "2012-10-17", "Statement": [ // 允许桶级List操作,仅能查看目标前缀下的对象 { "Effect": "Allow", "Action": "s3:ListBucket", "Resource": "arn:aws:s3:::insert_bucket_name", "Condition": { "StringLike": { "s3:prefix": "levelOne=A/levelTwo=B/levelThree=C/*" } } }, // 允许目标前缀下的所有对象读写操作 { "Effect": "Allow", "Action": [ "s3:Get*", "s3:Put*" ], "Resource": "arn:aws:s3:::insert_bucket_name/levelOne=A/levelTwo=B/levelThree=C/*" } ] }
验证步骤
- 将策略中的
insert_bucket_name替换为实际存储桶名称 - 将更新后的策略重新关联到目标IAM角色
- 再次执行测试命令:
aws s3api put-object --bucket insert_bucket_name --key levelOne=A/levelTwo=B/levelThree=C/123456789.jsonl --profile mybucketrole
内容的提问来源于stack exchange,提问作者Pranav Rudra
相关产品推荐
相关产品推荐

