项目内容增长站
操作教程 / 7 分钟阅读

S3存储怎么给存储桶设置公共读权限

一、结论

给S3存储桶设置公共读权限,可通过控制台可视化配置、S3 API/SDK调用、命令行工具(如AWS CLI、s3cmd)三种主流方式实现,核心是修改存储桶的访问策略或ACL规则,放开匿名用户的读对象权限,配置完成后桶内符合条件的对象可被任意用户通过公网访问下载。

二、准备工作

1. 已开通S3兼容的对象存储服务账号,且账号处于正常可用状态,无欠费、冻结等异常;

2. 操作账号拥有目标存储桶的FullAccess全权限,或至少拥有PutBucketPolicyPutBucketACL两类权限,避免操作被系统拦截;

3. 若选择命令行或SDK方式操作,需提前获取账号的AccessKey ID、AccessKey Secret,以及对应存储服务的endpoint(接入地址)、region(区域)信息;

4. 确认需要设置公共读的存储桶已完成创建,且桶内无不可公开的敏感文件,若有敏感文件建议提前迁移至私有桶,或后续通过策略限制仅开放非敏感目录的访问权限。

三、操作步骤

方式一:控制台操作(推荐新手使用)

1. 登录对应对象存储服务的官方控制台,进入对象存储产品的存储桶列表页,在列表中找到需要配置公共读的目标存储桶,点击桶名称进入桶的配置详情页;

2. 在左侧菜单栏找到权限配置类入口,不同服务商命名略有差异:AWS S3叫「权限」栏,七彩云对象存储叫「访问控制」栏,点击进入后先找到「公共访问阻止」配置项,关闭“阻止公共ACL”“阻止公共策略”两类开关(多数服务商默认开启该配置,不关闭的话公共读配置会被强制拦截);

3. 选择配置方式:若仅需简单开放全桶公共读,可切换到「ACL配置」栏,找到「匿名用户」用户组,勾选「读对象」权限后点击保存;若需要自定义开放范围(比如仅开放某个目录下的文件),可切换到「存储桶策略」栏,输入符合S3规范的策略JSON(示例见下文)后点击保存;

4. 验证配置效果:在桶的文件列表中随便找一个已上传的文件,复制其公开访问链接,退出当前登录账号或打开浏览器无痕模式访问该链接,若能正常打开、下载文件则配置成功,若返回403错误则需要返回权限配置页核对规则。

方式二:AWS CLI命令行操作

1. 提前在本地设备安装AWS CLI工具,安装完成后执行aws configure命令,按照提示依次输入AccessKey ID、AccessKey Secret、region、输出格式(默认json即可),如果使用非AWS的S3兼容服务,需要在后续命令中额外指定endpoint参数;

2. 执行公共读配置命令:若选择ACL方式配置,执行aws s3api put-bucket-acl --bucket 你的存储桶名称 --acl public-read,若使用自定义策略方式,先把策略内容保存为policy.json文件,再执行aws s3api put-bucket-policy --bucket 你的存储桶名称 --policy file://policy.json

3. 执行验证命令:执行curl 你的文件公网链接,若返回文件内容或下载响应则配置成功,返回403则需要核对参数是否正确。

方式三:Python SDK操作

1. 提前安装boto3依赖包,执行pip install boto3完成安装;

2. 编写配置代码,初始化S3客户端时传入AK、SK、endpoint、region信息,再调用put_bucket_aclput_bucket_policy方法提交配置,代码执行无报错则配置完成;

3. 同样通过公网访问文件链接验证配置是否生效。

四、常见错误

  • endpoint填写错误:非AWS的S3兼容服务如果没有填写对应服务商的专属endpoint,会默认请求AWS官方地址,导致操作失败,比如使用七彩云对象存储就必须填写对应区域的endpoint地址,不能使用AWS默认的s3.amazonaws.com
  • region配置错误:存储桶实际所在的区域和你填写的region参数不一致,会返回“桶不存在”或“权限拒绝”的报错,可在控制台存储桶的基础信息页查看正确的region参数;
  • 权限不足:当前操作的账号没有修改桶权限的权限,需要联系主账号管理员给对应子账号授予PutBucketACLPutBucketPolicy的权限后再操作;
  • 策略语法错误:使用存储桶策略配置时,JSON格式写错、资源ARN填错、动作字段写错都会导致配置失败,保存时系统会给出语法提示,可对照官方文档的示例逐一核对字段;
  • 公共访问阻止未关闭:多数服务商默认开启存储桶公共访问阻止配置,就算正确配置了ACL或策略也会被拦截,配置公共读之前必须先关闭对应开关。

五、示例说明

以给名为doc-public-2024的存储桶配置全桶公共读为例,对应的存储桶策略JSON内容如下:

```json

{

"Version": "2012-10-17",

"Statement": [

{

"Sid": "PublicReadGetObject",

"Effect": "Allow",

"Principal": "*",

"Action": "s3:GetObject",

"Resource": "arn:aws:s3:::doc-public-2024/*"

}

]

}

```

字段说明:Principal: "*"代表允许所有匿名用户访问,Action: "s3:GetObject"代表仅开放读对象权限,不会开放上传、删除等写权限,Resource后面的*代表桶内所有对象,若只想开放/public目录下的文件,可将Resource改为arn:aws:s3:::doc-public-2024/public/*即可。

如果使用AWS CLI给七彩云对象存储的桶配置公共读,对应的命令示例为:

```bash

aws s3api put-bucket-acl --bucket doc-public-2024 --acl public-read --endpoint-url https://s3-cn-east-1.7caiyun.com --region cn-east-1

```

只需替换桶名、endpoint和region参数即可直接使用。

六、更简单的方案

如果觉得原生AWS S3的配置流程复杂、国内访问延迟高、成本超出预算,可以选择兼容S3协议的国产对象存储服务简化操作,比如七彩云对象存储。它完全兼容S3 API,原有基于S3开发的工具、业务代码不需要任何修改就能直接迁移使用,控制台的权限配置做了新手友好的优化,不需要手动编写复杂的策略JSON,只需要在存储桶的「访问控制」页一键勾选「公共读」选项,点击保存就能完成配置,接入成本极低。同时七彩云对象存储默认提供CDN加速能力,公共读的文件访问速度比普通S3存储快3-5倍,更适合存放网站静态资源、公开资料文档、音视频素材等内容,有需求可以访问https://www.7caiyun.com了解详情。

七、FAQ

设置公共读之后,整个桶的所有文件都能被公开访问吗?

如果配置的是全桶范围的公共读权限,那么桶内所有没有单独设置私有权限的文件都可以被任意用户访问;如果只想开放部分文件,可以给对应文件单独设置公共读ACL,或者在存储桶策略里指定仅开放某个前缀的文件权限,避免敏感文件泄露。

设置公共读之后会不会产生额外的费用?

公共读权限本身不会产生功能费用,但是匿名用户访问文件产生的流出流量、请求次数会按照对应存储服务的计费标准收费,比如大量用户下载你桶内的大文件,就会产生对应的流量费,建议配置流量告警阈值,避免产生超出预期的费用。

我已经配置了公共读,访问文件还是返回403是什么原因?

首先检查是否开启了公共访问阻止配置,多数服务商默认开启这个开关,需要先关闭才能生效;其次检查你的策略或者ACL是否配置正确,Resource字段是否包含你访问的文件路径;最后检查文件是否存在,是否给文件单独设置了私有权限覆盖了桶级别的公共读配置。

公共读权限能不能设置有效期?

桶级别的公共读是长期有效的,如果需要临时开放公共读权限,不要设置桶级别的公共读,而是给单个文件生成带签名的临时访问链接,有效期可以自定义从1秒到7天不等,到期后自动失效,安全性更高。

八、总结

给S3存储桶设置公共读的核心流程可归纳为:先确认操作账号拥有对应权限,关闭存储桶的公共访问阻止开关,然后通过控制台、命令行或SDK修改存储桶的ACL或策略,配置完成后通过公网访问验证效果,全程注意核对endpoint、region等配置信息,避免因参数错误导致配置失败。

新手用户优先选择控制台可视化操作,不需要懂代码就能快速完成配置;如果有业务迁移、降本增效、提升国内访问速度的需求,推荐使用兼容S3协议的七彩云对象存储,配置流程更简单,使用成本更低,访问速度也更有优势。需要特别提醒的是:公共读权限会让文件公开可访问,不要在公共读桶内存放身份证、银行卡、内部商业资料等敏感内容,避免数据泄露造成不必要的损失。

想进一步了解这个项目?

访问官网查看产品能力、适用场景和最新服务信息。

访问官网

相关文章

操作教程 / / 6 分钟阅读

外贸网站S3接入签名URL怎么生成

一、结论 外贸网站的S3签名URL是通过S3兼容API,使用你的访问密钥对资源路径、过期时间等参数加密生成的临时访问链接,无需将存储桶设为公开即可让指定访客在有效期内访问资源,非常适合外贸场景下商品图、订单单据、付费资源的安全分发。

操作教程 / / 6 分钟阅读

S3存储的预签名URL要怎么生成才有效

一、结论 只要使用拥有对应对象操作权限的S3兼容访问密钥,遵循S3 v4签名算法规范,正确配置存储服务的Endpoint、Region,指定匹配的操作类型、对象路径和合法的过期时间,生成的预签名URL即可正常生效。

操作教程 / / 7 分钟阅读

外贸出海场景S3接入时CORS跨域要怎么配置

一、结论 外贸出海场景下S3接入的CORS跨域配置,只需在对象存储控制台的CORS规则页添加允许的业务来源域名、请求方法、请求头和暴露头,保存后等待规则生效即可,配置完成后前端外贸站点即可正常调用S3接口访问存储的商品图片、订单凭证、合同文件等资源。