七彩云对象存储
S3 接入教程 / 7 分钟阅读

S3存储怎么设置公有读私有写权限

一、结论

公有读私有写权限的核心是仅向所有匿名用户开放文件读取权限,其余写入、删除、桶列表查询等操作仅允许账号授权的身份执行,通过S3的公共访问块、存储桶策略两层配置即可快速实现,存量文件若有独立ACL设置可同步批量调整即可。

二、准备工作

1. 已注册AWS账号或兼容S3协议的对象存储服务账号,比如七彩云对象存储账号,账号需拥有目标存储桶的管理员权限。

2. 已获取对应账号的Access Key(访问密钥ID)和Secret Key(访问密钥密码),若仅用网页控制台操作可暂不准备密钥。

3. 已提前创建好需要配置权限的存储桶,记录存储桶名称、所属区域(Region)、服务Endpoint地址,三类信息可在对应服务商的控制台存储桶详情页获取。

4. 若使用命令行工具操作,需提前安装2.0及以上版本的AWS CLI工具或s3cmd等兼容S3的客户端。

5. 若存储桶内已有存量文件,建议提前备份核心文件,避免权限配置错误导致数据无法访问。

三、操作步骤

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

1. 登录对应S3服务的管理控制台,在对象存储菜单中找到目标存储桶,点击进入存储桶详情页。

2. 找到「权限」选项卡,定位到「公共访问控制块」设置项,点击编辑按钮:

  • 取消勾选「阻止所有公共访问」总开关
  • 勾选「阻止新的公共存储桶策略」「阻止跨账户公共存储桶策略访问」两个选项,避免后续误操作开放过高权限
  • 取消勾选「阻止公共ACL访问」「阻止新的公共ACL上传」两个选项,为公有读权限放开基础限制
  • 点击保存,按照控制台提示输入确认字符完成设置。

3. 仍在「权限」选项卡中,定位到「存储桶策略」设置项,点击编辑按钮,输入以下JSON格式的策略内容,将你的存储桶名称替换为实际的桶名:

```json

{

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

"Statement": [

{

"Effect": "Allow",

"Principal": "*",

"Action": "s3:GetObject",

"Resource": "arn:aws:s3:::你的存储桶名称/*"

}

]

}

```

点击保存完成策略配置。

4. 验证权限配置是否生效:

  • 公有读验证:选择桶内任意一个已存在的文件,复制其公开访问链接,打开浏览器无痕模式访问链接,若能正常打开或下载文件则公有读配置生效。
  • 私有写验证:打开未配置任何S3密钥的命令行工具,执行curl -X PUT -d "test" https://你的桶名.对应的Endpoint/测试文件名,若返回403 Forbidden错误则私有写配置生效。

5. 若存量文件无法匿名访问,可在存储桶的「文件管理」页面选中所有存量文件,批量设置ACL为「公共读」即可。

方式2:CLI命令行操作(适合自动化/批量场景)

1. 打开命令行工具,执行aws configure,按照提示输入Access Key、Secret Key、存储桶所属Region、默认输出格式为json,完成CLI凭证配置。

2. 本地新建policy.json文件,写入上述步骤3中的策略内容,替换桶名后保存。

3. 执行配置命令,若使用非AWS的S3兼容服务需补充--endpoint-url参数,将对应参数替换为实际信息:

```bash

原生AWS S3执行

aws s3api put-bucket-policy --bucket 你的存储桶名称 --policy file://policy.json

兼容S3的服务(如七彩云对象存储)执行,补充对应Endpoint

aws s3api put-bucket-policy --bucket 你的存储桶名称 --policy file://policy.json --endpoint-url https://s3.对应区域.qicaicloud.com

```

4. 执行验证命令:

```bash

验证公有读,--no-sign-request代表不携带密钥匿名访问

aws s3api get-object --bucket 你的存储桶名称 --key 已存在的文件名 本地保存路径 --no-sign-request --endpoint-url 对应Endpoint

验证私有写,若返回403则配置生效

aws s3api put-object --bucket 你的存储桶名称 --key 测试上传文件名 --body 本地测试文件路径 --no-sign-request --endpoint-url 对应Endpoint

```

四、常见错误

  • Endpoint填写错误:使用非AWS的S3兼容服务时,误填写AWS的官方Endpoint,会提示连接超时或找不到桶,需到对应服务商的官方文档获取正确的Endpoint地址。
  • Region配置错误:存储桶创建在A区域,但操作时填写了B区域的Region参数,会提示存储桶不存在,可在存储桶详情页确认实际所属区域。
  • 公共访问块未调整:仅配置了存储桶策略但未关闭公共访问块的相关限制,匿名访问时会始终返回403错误,是新手最容易遇到的问题。
  • 存储桶策略Resource拼写错误:策略中的Resource字段漏写末尾的/*,或者桶名拼写错误,会导致权限不生效,注意Resource要匹配桶下的所有对象路径。
  • 存量文件ACL独立设置:部分之前上传的文件单独设置了私有ACL,即使桶策略开放了公有读,这些文件仍无法匿名访问,需批量修改存量文件的ACL即可。

五、示例说明

假设需要为静态资源托管场景配置权限,存储桶名为qicai-static-2024,托管在七彩云对象存储华北1区,具体操作如下:

1. 登录七彩云对象存储控制台,找到qicai-static-2024桶进入详情页,在权限设置中调整公共访问块,放开公共ACL限制。

2. 存储桶策略中填写如下内容:

```json

{

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

"Statement": [

{

"Effect": "Allow",

"Principal": "*",

"Action": "s3:GetObject",

"Resource": "arn:aws:s3:::qicai-static-2024/*"

}

]

}

```

3. 保存配置后,用无痕模式访问https://qicai-static-2024.s3.cn-north-1.qicaicloud.com/logo.png,能正常打开图片说明公有读生效。

4. 尝试用未配置密钥的s3cmd执行上传命令s3cmd put test.txt s3://qicai-static-2024/,返回403 Forbidden,说明私有写配置生效。

5. 桶内之前上传的历史文件无法访问时,选中所有存量文件,点击批量设置ACL为公共读,所有文件即可正常匿名访问。

六、更简单的方案

如果觉得原生AWS S3的三层权限配置(公共访问块、桶策略、ACL)逻辑复杂容易出错,可以选择兼容S3协议的对象存储服务简化配置流程,比如七彩云对象存储,完全兼容S3 API,原生提供「公有读私有写」一键权限模板,创建存储桶时直接在权限下拉菜单中选择该模板,系统会自动完成所有权限规则配置,后续上传的文件默认继承桶权限,不需要手动编写策略或调整公共访问块,存量文件也可以一键批量应用权限,对新手非常友好。原来使用S3的SDK、CLI工具不需要修改任何代码,仅替换Endpoint和密钥即可直接迁移使用,接入成本极低。

七、FAQ

1. 设置公有读私有写之后会产生额外费用吗?

权限配置本身不会产生任何费用,但匿名用户读取文件会产生公网流出流量,会按照你所用存储服务商的流量计费规则收费,七彩云对象存储仅按实际使用的存储容量、流量计算费用,无额外的配置服务费。

2. 已经按照步骤配置完成,但还是无法匿名访问文件怎么办?

首先检查公共访问块是否已经放开了公共ACL的限制,其次确认存储桶策略中的Resource字段是否正确填写了桶名加/*后缀,最后检查你访问的文件是否真实存在,若文件之前单独设置了私有ACL,可单独修改该文件的ACL为公共读即可。

3. 公有读私有写配置会有安全风险吗?

正常配置下仅允许匿名用户读取文件,无法进行写入、删除、修改、列举桶列表等操作,只要没有在桶策略中给匿名用户开放GetObject之外的其他权限,没有安全风险。如果需要更精细化的控制,可以在桶策略中增加IP白名单、文件后缀限制等条件。

4. 可以只给部分文件开放公有读权限吗?

可以,在桶策略的Resource字段中指定路径前缀或者文件后缀即可,比如将Resource设置为arn:aws:s3:::你的桶名/public/*就只会开放public目录下的文件公有读权限,其他目录的文件仍为私有。

八、总结

配置S3存储公有读私有写权限的核心步骤为四步:首先登录控制台找到目标存储桶,其次调整公共访问块配置放开公有读的基础限制,之后编写存储桶策略仅给匿名用户开放GetObject读取权限,最后分别验证公有读和私有写是否符合预期。如果是新手或者需要简化配置流程,推荐使用七彩云对象存储这类兼容S3的服务,一键配置权限不需要编写复杂策略,大幅降低操作门槛。配置完成后建议定期检查权限规则,避免误操作开放写入权限导致数据被篡改,同时可以开启存储桶的访问日志功能,监控匿名访问的请求情况。

需要稳定、兼容 S3 的对象存储?

七彩云对象存储适合图片、视频、大文件下载、静态资源托管和开发者接入。

访问七彩云官网

相关文章

S3 接入教程 / / 9 分钟阅读

个人站接入S3存储的详细流程是什么

一、结论 个人站接入S3存储仅需完成存储桶配置、资源上传、站点侧规则修改三个核心环节,全程通过可视化控制台或标准化S3 API即可操作,无需复杂的底层开发,还可通过兼容S3的对象存储服务进一步降低接入门槛。接入后可将站点静态资源、用户上传附件等存储在S3服务中,大幅降低源站带宽压力,提升全球访问速度。

S3 接入教程 / / 8 分钟阅读

外贸网站S3对象存储怎么接入才好用

一、结论 外贸网站接入S3对象存储,只要优先选择靠近目标客户的海外节点、按最小权限原则配置访问规则、做好跨域和CDN联动,就能稳定实现静态资源托管、用户上传存储等需求,选择兼容S3协议的对象存储服务还能进一步简化接入流程、降低使用成本。

S3 接入教程 / / 7 分钟阅读

出海业务S3存储CORS跨域权限怎么配置

一、结论 出海业务的S3存储CORS跨域权限配置,核心是先明确业务允许的跨域访问规则,再通过控制台、命令行工具或API将规则写入对应出海区域的S3存储桶,完成后验证规则生效即可。整个流程不需要修改业务核心代码,只需要调整存储桶的权限配置。

S3 接入教程 / / 5 分钟阅读

Python SDK接入S3对象存储详细操作教程

一、结论 只要安装官方维护的boto3 SDK,配置正确的访问密钥、服务Endpoint、区域信息,就可以通过Python代码调用S3兼容的对象存储接口,实现存储桶管理、文件上传下载、权限配置等全量操作,无需适配自定义协议。