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

如何在已配置公共读取权限的S3存储桶中创建私有文件夹?

如何在公开的S3存储桶中新增私有文件夹

你的S3桶目前通过桶策略允许所有公众读取桶内所有对象,现在要新增一个私有文件夹,核心思路是利用桶策略的优先级规则(Deny权限会覆盖Allow权限),添加一条拒绝访问特定前缀(也就是你的私有文件夹)的规则。

具体操作步骤:

  1. 打开S3控制台,找到目标存储桶,进入「权限 > 存储桶策略」页面。
  2. 在现有的策略JSON中,添加一条新的Statement语句,用来拒绝任何人读取私有文件夹下的所有对象。

修改后的完整桶策略示例(替换private-folder为你的实际文件夹名称):

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "AllowPublicRead",
      "Effect": "Allow",
      "Principal": { "AWS": "*" },
      "Action": "s3:GetObject",
      "Resource": "arn:aws:s3:::my-bucket/*"
    },
    {
      "Sid": "DenyPublicReadOnPrivateFolder",
      "Effect": "Deny",
      "Principal": "*",
      "Action": "s3:GetObject",
      "Resource": "arn:aws:s3:::my-bucket/private-folder/*"
    }
  ]
}

关键细节说明:

  • 路径前缀的必要性:S3没有真正的“文件夹”,所谓的文件夹本质是对象的前缀。一定要在路径末尾加上/*,这样才能覆盖该文件夹下的所有对象,而不是仅仅针对“文件夹”这个虚拟占位对象。
  • Deny规则的优先级:S3权限评估中,Deny规则的优先级永远高于Allow规则。这条新的拒绝规则会直接覆盖之前的全局允许策略,确保私有文件夹下的内容无法被匿名用户或未授权访问者读取。
  • 给特定用户开放访问(可选):如果需要让某个IAM用户/角色访问这个私有文件夹,可以在拒绝规则中添加Condition,排除这些合法身份:
    {
      "Sid": "DenyPublicReadOnPrivateFolder",
      "Effect": "Deny",
      "Principal": "*",
      "Action": "s3:GetObject",
      "Resource": "arn:aws:s3:::my-bucket/private-folder/*",
      "Condition": {
        "NotPrincipal": {
          "AWS": [
            "arn:aws:iam::123456789012:user/YourAllowedUser",
            "arn:aws:iam::123456789012:role/YourAllowedRole"
          ]
        }
      }
    }
    
    替换其中的ARN为你实际的用户/角色ARN即可。

验证配置是否生效:

修改完策略后,你可以尝试用浏览器隐身模式(匿名身份)访问私有文件夹下的某个对象链接,应该会返回AccessDenied错误;用有权限的IAM用户访问则能正常读取内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 03:57:33