如何配置AWS S3权限,仅允许特定_user前缀的读写访问
解决方案
要实现仅允许指定前缀下的S3对象读写权限,你需要调整IAM策略的逻辑——由于IAM中Deny优先级高于Allow,直接先拒绝所有再允许部分的写法会导致允许规则被覆盖,正确的做法是仅拒绝不在指定前缀范围内的读写操作,同时利用默认的全权限允许合法路径的访问。
修正后的IAM策略
{ "Version": "2012-10-17", "Id": "RestrictReadWriteToSpecificPrefixes", "Statement": [ { "Sid": "DenyReadWriteExceptAllowedPrefixes", "Effect": "Deny", "Principal": "*", "Action": [ "s3:GetObject", "s3:PutObject" ], "Resource": "arn:aws:s3:::mybucket/*", "Condition": { "StringNotLike": { "s3:ResourceKey": [ "1_user/*", "2_user/*", "10_user/*" ] } } } ] }
关键说明
- 路径匹配修正:原策略中
Allow规则的Resource写为arn:aws:s3:::mybucket/*_user,仅匹配名称以_user结尾的单个对象,而非1_user/前缀下的所有对象。修正后通过1_user/*这类格式,精准匹配前缀下的所有子对象。 - 条件逻辑调整:通过
StringNotLike条件判断,仅当请求的对象键(s3:ResourceKey)不在允许的前缀列表中时,才触发Deny操作。由于你默认拥有全权限,合法前缀下的读写操作不会被这个Deny规则影响。 - 资源范围控制:
Resource指定为arn:aws:s3:::mybucket/*,仅针对存储桶内的对象,不会影响存储桶级别的操作(如创建桶等,若不需要可按需调整)。
内容的提问来源于stack exchange,提问作者user1532587
相关产品推荐
相关产品推荐

