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

如何通过Bucket Policy或IAM Policy限制AWS S3用户创建文件夹?

限制AWS S3用户创建模拟文件夹的实现方案

可以实现这个需求。AWS S3中没有真正的“文件夹”概念,所谓的文件夹只是通过以斜杠(/)结尾的空对象模拟出来的。因此,只要禁止用户创建这类特殊对象,就能达到禁止创建文件夹的效果。以下是具体配置方案:

方案一:通过IAM Policy(附加到User1用户)

直接在User1的IAM权限中添加策略,明确允许上传、下载对象,同时拒绝创建以/结尾的空对象:

{
    "Version": "2012-10-17",
    "Statement": [
        // 允许下载指定前缀下的对象
        {
            "Effect": "Allow",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::your-bucket-name/target-folder/*"
        },
        // 允许上传指定前缀下的非文件夹对象
        {
            "Effect": "Allow",
            "Action": "s3:PutObject",
            "Resource": "arn:aws:s3:::your-bucket-name/target-folder/*"
        },
        // 拒绝创建以/结尾的空对象(即模拟文件夹)
        {
            "Effect": "Deny",
            "Action": "s3:PutObject",
            "Resource": "arn:aws:s3:::your-bucket-name/target-folder/*/",
            "Condition": {
                "Null": {
                    "s3:x-amz-content-sha256": "true"
                }
            }
        },
        // 可选:允许列出指定文件夹下的内容(如果需要用户查看文件列表)
        {
            "Effect": "Allow",
            "Action": "s3:ListBucket",
            "Resource": "arn:aws:s3:::your-bucket-name",
            "Condition": {
                "StringLike": {
                    "s3:prefix": "target-folder/*"
                }
            }
        }
    ]
}

策略说明

  • s3:GetObject 允许用户下载目标文件夹下的所有对象
  • s3:PutObject 允许上传对象,但后续的Deny语句会拦截创建以/结尾的空对象
  • Deny语句中的Null条件用于判断是否是空对象(上传空对象时s3:x-amz-content-sha256会为空),结合资源路径*/精准拦截模拟文件夹的创建
  • 可选的s3:ListBucket权限用于让用户在控制台或工具中查看文件夹内的文件列表

方案二:通过Bucket Policy(附加到目标存储桶)

如果希望在存储桶层面统一控制权限,可以使用Bucket Policy,指定Principal为User1的ARN:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::your-account-id:user/User1"
            },
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::your-bucket-name/target-folder/*"
        },
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::your-account-id:user/User1"
            },
            "Action": "s3:PutObject",
            "Resource": "arn:aws:s3:::your-bucket-name/target-folder/*"
        },
        {
            "Effect": "Deny",
            "Principal": {
                "AWS": "arn:aws:iam::your-account-id:user/User1"
            },
            "Action": "s3:PutObject",
            "Resource": "arn:aws:s3:::your-bucket-name/target-folder/*/",
            "Condition": {
                "Null": {
                    "s3:x-amz-content-sha256": "true"
                }
            }
        },
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::your-account-id:user/User1"
            },
            "Action": "s3:ListBucket",
            "Resource": "arn:aws:s3:::your-bucket-name",
            "Condition": {
                "StringLike": {
                    "s3:prefix": "target-folder/*"
                }
            }
        }
    ]
}

注意事项

  1. 替换策略中的your-bucket-name为实际存储桶名称,your-account-id为AWS账号ID,target-folder为目标文件夹前缀
  2. IAM Policy和Bucket Policy二选一即可,推荐使用IAM Policy,因为它直接绑定到用户,权限控制更精准
  3. 如果用户之前已有其他S3相关权限,需要确保新策略不会与现有权限冲突(Deny权限优先级高于Allow)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 00:57:13