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

S3策略配置求助:IAM用户全权限+单文件夹公开只读访问

问题解决:S3存储桶锁定后开放单个文件夹公开只读

问题分析

你当前的两个策略存在以下核心问题:

  1. 第一个策略:
    • Deny语句优先级高于Allow,直接拒绝了所有主体对bucket/*的所有操作,后续的Allow规则(包括IAM用户权限和公开只读)全部被覆盖。
    • 第三个Statement的资源路径错误:arn:aws:s3:::bucket/read-only-folder仅指向虚拟文件夹本身,而非文件夹内的对象,正确路径应为arn:aws:s3:::bucket/read-only-folder/*。
  2. 第二个策略:
    • 未设置任何全局拒绝规则,若存储桶原有ACL或其他权限存在公开配置,会导致非目标文件夹也能被访问。
    • 使用了旧版本的2008-10-17策略规范,权限控制逻辑受限,建议使用2012-10-17版本。
    • 未考虑Public Block Access的影响:如果开启了Block public access to buckets and objects granted through bucket policies,桶策略中的公开权限会被直接阻断,必须关闭该选项才能让公开只读生效。

正确配置步骤

1. 调整Public Block Access设置

进入S3存储桶的「权限」>「Block public access」,确保:

  • 关闭Block public access to buckets and objects granted through bucket policies(否则公开只读策略无法生效)
  • 保留其余选项(如阻止通过ACL公开访问),保障存储桶整体安全性

2. 配置正确的桶策略

以下策略实现:锁定整个存储桶(仅指定IAM用户拥有全权限),同时开放read-only-folder文件夹内所有对象的公开只读权限:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "AllowIAMUserFullAccess",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::000000000:user/bucket-user"
      },
      "Action": "s3:*",
      "Resource": [
        "arn:aws:s3:::bucket",
        "arn:aws:s3:::bucket/*"
      ]
    },
    {
      "Sid": "DenyAllOthersExceptPublicFolder",
      "Effect": "Deny",
      "Principal": "*",
      "Action": "s3:*",
      "Resource": [
        "arn:aws:s3:::bucket",
        "arn:aws:s3:::bucket/*"
      ],
      "Condition": {
        "StringNotLike": {
          "s3:prefix": "read-only-folder/*"
        }
      }
    },
    {
      "Sid": "AllowPublicReadOnSpecificFolder",
      "Effect": "Allow",
      "Principal": "*",
      "Action": "s3:GetObject",
      "Resource": "arn:aws:s3:::bucket/read-only-folder/*"
    }
  ]
}

策略逻辑说明

  • AllowIAMUserFullAccess:优先赋予指定IAM用户存储桶及所有对象的全权限,不受后续Deny规则限制。
  • DenyAllOthersExceptPublicFolder:拒绝所有主体对存储桶及非目标文件夹内对象的所有操作,通过Condition排除目标文件夹路径。
  • AllowPublicReadOnSpecificFolder:允许所有主体读取目标文件夹内的所有对象,确保公开只读生效。

注意事项

  • 替换策略中的bucket为你的存储桶名称,000000000为AWS账号ID,bucket-user为IAM用户名,read-only-folder为目标文件夹名称。
  • 测试时用匿名身份访问目标文件夹内的对象(如浏览器直接访问对象URL),同时尝试访问其他文件夹对象,确认权限是否符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 09:02:56