You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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目录,其他内容都无法访问”的效果。

操作步骤

  1. 用root账号登录AWS控制台,找到这个S3桶,删除原来的错误策略。
  2. 粘贴上面的修正策略,替换掉你的AWS账号ID、你的管理员用户名和桶名XX。
  3. 保存策略后,用普通用户或匿名访问测试:
    • 访问assets目录下的图片URL,应该能正常打开
    • 访问其他目录的对象URL,会返回AccessDenied
    • 用管理员账号操作桶(比如修改策略、上传文件),应该正常生效

内容的提问来源于stack exchange,提问作者Segev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 05:25:05