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

如何配置S3桶策略:已有文件可公开读写 禁止公众创建新文件

问题结论

这个需求完全可以通过S3存储桶策略实现,不需要额外依赖其他AWS服务。

配置思路

1. 专属服务权限配置

给专属服务关联的IAM身份(IAM用户、IAM角色、EC2实例角色等)授予桶级全CRUD权限,允许其创建、读取、修改、删除桶内任意对象。
对应需要放开的S3操作权限包括:

  • 桶级操作:s3:ListBucket
  • 对象级操作:s3:GetObject、s3:PutObject、s3:DeleteObject

2. 公众访问权限配置

核心通过S3的条件键IsExistingObject限制公众仅能操作已存在的对象,从根源上避免公众创建新文件:

  • 仅给公众放开已存在对象的读权限即可满足基础需求,如果需要支持修改已有文件可额外加有限制的写权限
  • 不放开任何无对象存在限制的操作,自然不会授予公众创建新文件的权限
示例存储桶策略
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AllowFullAccessForDedicatedService",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::你的AWS账号ID:role/你的专属服务关联的IAM角色名"
            },
            "Action": [
                "s3:ListBucket",
                "s3:GetObject",
                "s3:PutObject",
                "s3:DeleteObject"
            ],
            "Resource": [
                "arn:aws:s3:::你的存储桶名称",
                "arn:aws:s3:::你的存储桶名称/*"
            ]
        },
        {
            "Sid": "AllowReadExistingObjectForPublic",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::你的存储桶名称/*",
            "Condition": {
                "IsExistingObject": "true"
            }
        }
    ]
}
注意事项
  • 配置策略前需要先调整存储桶的「阻止公共访问」设置,关闭「阻止通过新的公共存储桶策略授予公共访问权限」的选项,否则公共权限不会生效
  • 如果你只希望特定路径下的文件对公众开放,可以在第二条声明的Resource中增加路径前缀限制,比如arn:aws:s3:::你的存储桶名称/public/*,进一步降低风险
  • 如果确实需要公众修改已有文件,可以在第二条声明的Action中增加s3:PutObject,该权限仅对已存在的对象生效,不会允许公众上传新文件

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 09:54:01