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

如何配置AWS S3权限,让主体仅能列出指定前缀下的对象?

解决方案:限制S3 ListBucket仅返回指定前缀的对象

完全可以实现这个需求,核心是在授予s3:ListBucket权限时,通过**条件约束(Condition)**来限定仅允许列出private-data/*前缀下的对象,配合对象级的s3:GetObject权限,就能在保留现有文件结构的前提下实现精准访问控制。

具体的IAM策略示例如下:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "s3:ListBucket",
            "Resource": "arn:aws:s3:::test-bucket",
            "Condition": {
                "StringEquals": {
                    "s3:prefix": [
                        "",
                        "private-data/",
                        "private-data/*"
                    ]
                }
            }
        },
        {
            "Effect": "Allow",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::test-bucket/private-data/*"
        }
    ]
}

策略细节说明:

  • s3:ListBucket 权限约束:
    • 由于s3:ListBucket是桶级操作,资源需指定为桶的ARN(arn:aws:s3:::test-bucket)。
    • 通过Condition中的StringEquals限定s3:prefix的可选值:允许空前缀(此时客户端只能看到private-data这个目录条目)、private-data/(进入该目录)、private-data/*(列出该目录下所有对象)。这就确保客户端执行ListObjectsV2时,只能获取private-data路径下的内容,无法查看桶内其他前缀的对象。
  • s3:GetObject 权限约束:
    • 直接将资源限定为test-bucket/private-data/*,确保客户端仅能获取该前缀下的对象。

额外提示:

  • 若客户端使用AWS CLI或SDK调用ListObjectsV2,需指定--prefix private-data/参数,否则默认列出根目录时只会显示private-data目录条目,进入该前缀后才能看到其下的子对象(这符合常规的目录访问逻辑)。
  • 该方案无需修改任何现有S3文件结构,仅通过IAM策略的条件规则实现权限限制。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 07:07:06