AWS IAM策略异常:指定S3文件夹外仍可访问问题排查
针对你遇到的问题——配置了仅允许访问Data-mocks/data.io/*的IAM策略,但关联角色的用户仍能访问Data-mocks/companyid文件夹,核心原因大概率是权限评估逻辑中的允许权限叠加,或者存在其他未被排查的访问授权路径,具体拆解如下:
可能的原因
存在额外的允许权限策略
AWS权限评估遵循「允许优先」原则(除非有明确的Deny策略覆盖)。如果该用户/角色除了你配置的策略外,还附加了其他IAM策略(比如直接绑定到用户的策略、用户组策略),或者S3存储桶配置了允许该主体访问的桶策略,都会授予超出预期的访问权限。例如用户所属的用户组有arn:aws:s3:::Data-mocks/*的访问权限,或者桶策略中给该角色开了全桶读写权限,都会绕过你配置的路径限制。用户未通过目标角色访问
你配置的是角色的权限策略,但如果用户直接使用自身IAM用户身份访问S3,而非通过sts:AssumeRole切换到该角色,那么角色的权限限制完全不会生效。需确认用户操作时是否确实切换到了目标角色。S3 ACL的遗留授权
若S3桶或对象的ACL(访问控制列表)设置了允许该用户/角色的访问权限,也会绕过IAM策略的限制。比如桶的ACL给了该用户"读"权限,用户就能直接访问桶内所有对象。ListBucket权限的额外授权
你的策略仅授权了s3:GetObject和s3:PutObject,但用户能看到companyid文件夹,说明存在其他策略授予了s3:ListBucket权限。虽然列出文件夹本身不代表能访问其中对象,但如果同时有其他允许访问该路径对象的权限,就会出现你看到的现象。
验证与解决步骤
用IAM Policy Simulator排查权限
使用AWS IAM控制台的Policy Simulator,模拟该角色对Data-mocks/companyid/*路径的s3:GetObject操作,查看哪些策略触发了允许授权,定位额外权限来源。清理冗余授权
- 检查用户自身的IAM策略、所属用户组的策略,移除不必要的S3访问权限;
- 检查S3存储桶的桶策略,确保没有给该用户/角色开放过度的访问权限;
- 检查S3桶和对象的ACL,删除不符合需求的授权条目。
添加明确的Deny策略(可选)
如果需要严格限制访问范围,可在角色策略中添加Deny语句,覆盖其他允许权限:{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": ["s3:GetObject", "s3:PutObject"], "Resource": "arn:aws:s3:::Data-mocks/data.io/*" }, { "Effect": "Deny", "Action": ["s3:GetObject", "s3:PutObject"], "Resource": "arn:aws:s3:::Data-mocks/*", "Condition": { "StringNotLike": { "s3:prefix": "data.io/*" } } } ] }
内容的提问来源于stack exchange,提问作者Shivam Jha

