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

如何配置IAM策略使AWS CLI仅列出用户被授权访问的S3存储桶

核心原因

s3:ListAllMyBuckets 动作本身不支持资源级权限限制,也无法通过IAM条件过滤返回的存储桶列表,只要你在策略中允许了这个动作,执行aws s3 ls(本质是调用ListAllMyBuckets API)就会返回当前AWS账号下所有存储桶的名称,这是AWS S3的原生设计。


可行的调整方案

方案1:移除ListAllMyBuckets权限(官方推荐最小权限方案)

直接删掉策略中允许s3:ListAllMyBuckets的语句,调整后的策略如下:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket",
                "s3:GetBucketLocation"
            ],
            "Resource": "arn:aws:s3:::A"
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:PutObject",
                "s3:PutObjectAcl",
                "s3:GetObject",
                "s3:GetObjectAcl",
                "s3:DeleteObject"
            ],
            "Resource": "arn:aws:s3:::A/*"
        }
    ]
}

调整后效果:

  • 执行aws s3 ls会直接返回AccessDenied错误,用户无法看到任何存储桶列表,自然也看不到B、C桶
  • 完全不影响用户直接访问授权的A桶,执行aws s3 ls s3://A仍然可以正常返回桶内内容
  • 适合用户已经知晓授权桶名称的场景,是生产环境的主流配置

方案2:保留列表能力的替代实现

如果一定要让用户执行列表操作时仅能看到A桶,只能通过间接方式实现:

  • 为用户提供封装后的CLI脚本,脚本内部直接调用aws s3 ls s3://A,屏蔽全局列表的入口
  • 如果是控制台访问,可以为用户生成直接跳转至A桶的专属链接,同时通过IAM权限禁止用户访问S3控制台的全局存储桶列表页

补充说明

目前没有任何IAM配置可以修改ListAllMyBuckets API的返回结果,所有声称可以过滤列表的方案本质都是拦截或替换了API调用入口,而非修改S3原生的API返回逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 01:45:03