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

S3 Bucket对象URL非私有问题及权限配置需求咨询

解决S3 Bucket私有文件夹仍可匿名访问的问题

嘿,我来帮你搞定这个问题!你当前的Bucket Policy之所以没达到预期效果,核心问题出在NotResource的使用上——这个语句相当于允许所有用户(包括匿名用户)访问除了my-bucket/backup/*之外的所有对象,这就覆盖了你想设为私有的其他文件夹,所以未登录状态下能直接下载这些对象的URL也就不奇怪了。

正确的Bucket Policy配置

要实现「仅media和static文件夹开放公共读权限,其余所有文件夹均设为私有」的需求,你需要调整Policy,明确只允许这两个路径的GetObject权限。直接用下面这个配置替换你现有的Policy即可:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "AllowPublicReadMedia",
      "Effect": "Allow",
      "Principal": "*",
      "Action": "s3:GetObject",
      "Resource": "arn:aws:s3:::my-bucket/media/*"
    },
    {
      "Sid": "AllowPublicReadStatic",
      "Effect": "Allow",
      "Principal": "*",
      "Action": "s3:GetObject",
      "Resource": "arn:aws:s3:::my-bucket/static/*"
    }
  ]
}

配置说明

  • 我们拆分成两个独立的Statement,分别对应media和static文件夹,权限逻辑更清晰,后续维护也方便。
  • Principal: "*"表示允许所有匿名用户和登录用户访问指定路径的对象,满足你开放公共读的需求。
  • Resource字段精准指定了开放的范围:my-bucket/media/*和my-bucket/static/*,其中*匹配文件夹下的所有子对象(包括文件和子文件夹)。
  • 由于S3的默认权限是私有(没有明确允许的操作都会被自动拒绝),所以不需要额外添加拒绝语句,其他文件夹的对象会自动保持私有状态,匿名用户无法通过URL直接访问。

额外注意事项

为了确保权限生效,你还需要检查两个点:

  • 查看Bucket的「阻止公共访问」设置(在S3控制台的「权限」标签下):如果开启了「阻止所有公共访问」,你的Bucket Policy会被覆盖失效,需要根据需求调整这个开关(比如关闭「阻止所有公共访问」,或者保留但允许Bucket Policy控制公共访问)。
  • 确认media和static文件夹下的对象没有单独设置公开的ACL:如果对象本身设置了公共读的ACL,可能会和Bucket Policy冲突,建议统一用Bucket Policy管理权限,避免混乱。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:12:36