AWS S3桶权限配置:仅开放指定目录访问的问题求助
解决S3桶权限锁死并实现指定目录开放的方案
你的问题出在全局Deny s3:*并作用于所有主体(Principal: "*")——这个规则会覆盖所有Allow权限,包括管理员甚至root账号的操作,直接把自己锁在外面。正确的做法是利用S3默认私有的特性,只显式开放需要的资源,同时保留管理员的管理权限,不需要全局Deny。
修正后的策略示例
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowAdminFullAccess", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::你的AWS账号ID:user/你的管理员用户名" }, "Action": "s3:*", "Resource": [ "arn:aws:s3:::XX", "arn:aws:s3:::XX/*" ] }, { "Sid": "AllowPublicAssetsAccess", "Effect": "Allow", "Principal": "*", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::XX/assets/*" } ] }
关键说明
- 管理员权限部分:指定你的管理员IAM用户/角色的ARN,确保你能正常修改桶策略、管理桶内容,不会再被锁死。如果有多个管理员,可以添加多个ARN到
Principal.AWS数组里。 - 公共访问部分:只开放
s3:GetObject(读取图片),如果你不需要让任何人上传/删除图片,就去掉原来的s3:PutObject和s3:DeleteObject——开放写权限存在安全风险,谨慎使用。 - 默认拒绝逻辑:S3桶默认是私有状态,所有未被显式允许的访问都会被拒绝,所以不需要额外加Deny规则,就能实现“除了assets目录,其他内容都无法访问”的效果。
操作步骤
- 用root账号登录AWS控制台,找到这个S3桶,删除原来的错误策略。
- 粘贴上面的修正策略,替换掉
你的AWS账号ID、你的管理员用户名和桶名XX。 - 保存策略后,用普通用户或匿名访问测试:
- 访问assets目录下的图片URL,应该能正常打开
- 访问其他目录的对象URL,会返回
AccessDenied - 用管理员账号操作桶(比如修改策略、上传文件),应该正常生效
内容的提问来源于stack exchange,提问作者Segev
相关产品推荐
相关产品推荐

