Amazon S3权限配置咨询:允许浏览器取图,禁止公共List/Put操作
Amazon S3 权限配置问题解答
1. 如何配置权限,允许浏览器从S3获取图片,但禁止公共的List或Put操作?
核心思路是用桶策略做精准权限控制,避免开全桶公开:
- 首先调整
Block all public access设置:仅取消勾选「Block public access to buckets and objects granted through new public bucket policies」,其余三个选项保持开启,防止意外的公共权限泄露。 - 给桶添加如下策略(替换
your-bucket-name为实际桶名):
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": "*", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::your-bucket-name/*" }, { "Effect": "Deny", "Principal": "*", "Action": [ "s3:ListBucket", "s3:PutObject" ], "Resource": [ "arn:aws:s3:::your-bucket-name", "arn:aws:s3:::your-bucket-name/*" ] } ] }
- 注意不要给桶或对象设置「公共读」的ACL,用桶策略统一控制更安全。这个策略允许所有用户通过浏览器获取图片(
GetObject是对象级操作),但直接拒绝公共用户的桶列表查看和对象上传操作。
2. 仅允许通过编程访问执行List/Put操作
编程访问依赖IAM身份(用户/角色)的密钥或角色关联,步骤如下:
- 方案1:IAM用户(适合本地脚本/第三方工具)
创建一个IAM用户,仅开启「编程访问」(关闭控制台访问权限),然后给该用户附加如下权限策略:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:ListBucket", "s3:PutObject" ], "Resource": [ "arn:aws:s3:::your-bucket-name", "arn:aws:s3:::your-bucket-name/*" ] } ] }
- 方案2:IAM角色(适合云服务,如EC2/Lambda)
创建IAM角色并附加上述权限策略,然后将角色关联到对应的云服务实例(比如给EC2实例分配角色),服务端代码可以直接通过AWS SDK自动获取临时凭证,无需硬编码密钥。 - 结合第一个问题的桶策略,公共用户无法执行List/Put,只有授权的IAM身份能通过编程方式完成这些操作。
3. 默认取消勾选Block all public access是否仅将公共权限限制为下载?
完全不是。Block all public access是由4个独立选项组成的集合:
- Block public access to buckets and objects granted through any access control lists (ACLs)
- Block public access to buckets and objects granted through new public bucket policies
- Block public access to buckets and objects granted through any public bucket policies
- Block public and cross-account access if bucket has public policies
取消总开关意味着这4个选项全部关闭,此时你的桶可以被配置为完全公开(包括List、Put甚至删除操作),只要对应的ACL或桶策略允许。不能默认认为取消总开关就只允许下载,必须通过桶策略或IAM权限精准定义允许的操作,同时建议根据需求单独调整这4个选项,而不是直接关闭总开关。
内容的提问来源于stack exchange,提问作者user19875980
相关产品推荐
相关产品推荐

