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

如何编写AWS IAM策略实现仅允许访问指定S3存储桶、拒绝其他所有存储桶权限

原Deny规则失效原因

你使用的s3:prefix条件键仅在调用s3:ListBucket且请求携带prefix参数时才会被AWS校验,其他S3操作(比如GetObject、PutObject等)都不会传递该参数,因此这个条件对绝大多数S3操作不生效,无法实现全局拒绝非目标桶访问的需求。

修正后的完整策略

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::mybucket"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetObject"
            ],
            "Resource": [
                "arn:aws:s3:::mybucket/*"
            ]
        },
        {
            "Effect": "Deny",
            "Action": "s3:*",
            "NotResource": [
                "arn:aws:s3:::mybucket",
                "arn:aws:s3:::mybucket/*"
            ]
        }
    ]
}

调整说明

  • 替换原来的Condition判断逻辑为NotResource,直接匹配所有不属于目标桶、目标桶内对象的S3资源,覆盖所有S3操作场景,只要操作的S3资源不在白名单范围内就直接拒绝。
  • Deny的Action限定为s3:*而非*,避免误拦截账号下其他非S3服务的正常访问,如果你确实需要拒绝所有非S3服务的权限,可以改回*。

注意事项

  • 该Deny规则优先级高于所有Allow规则,即便你名下其他桶配置了公开访问的桶策略,也会被该Deny规则拦截,符合你的需求。
  • 如果后续需要新增允许访问的S3桶,直接在NotResource数组中添加对应桶的ARN(格式arn:aws:s3:::桶名)和桶内对象ARN(格式arn:aws:s3:::桶名/*)即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 19:39:01