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

S3对象存储公共读写权限怎么配置

一、结论

配置S3对象存储公共读写权限,可通过Bucket ACL(访问控制列表)、Bucket策略两种主流方式实现,配置前需先关闭Bucket的公共访问阻止规则,配置完成后需进行读写验证确保生效。如果仅需要单个对象开放公共读写,也可以单独修改对象级ACL实现。

二、准备工作

1. 已开通S3兼容对象存储服务的账号,且账号持有目标Bucket的权限管理权限(至少包含s3:PutBucketAcls3:PutBucketPolicy权限);

2. 若使用控制台操作,需准备Chrome、Edge等现代浏览器;若使用命令行/自动化工具操作,需提前安装awscli并完成Access Key、Secret Key的基础配置;

3. 提前记录目标Bucket所属的region、对应服务的endpoint地址,避免后续配置出错。

三、操作步骤

控制台操作(适合新手)

1. 进入Bucket权限管理页

打开对应对象存储服务的控制台,在Bucket列表中找到需要配置的目标Bucket,点击进入详情页,找到「权限配置」或「访问控制」类的菜单入口。首先找到「公共访问阻止」设置项,将所有与公共访问、公共ACL相关的阻止开关全部关闭,保存配置(原生AWS S3默认开启全部公共访问阻止,若不关闭后续所有公共权限配置都不会生效)。

2. 选择配置方式完成权限设置

  • 简单全量公共读写需求选ACL配置:找到「Bucket ACL」设置项,在公共访问(匿名用户)主体的权限勾选框中,勾选「读取对象」「写入对象」「列举Bucket」三类权限,确认系统弹出的风险提示后保存配置即可。
  • 细粒度控制需求选Bucket策略配置:找到「Bucket策略」设置项,在策略编辑框中写入符合S3策略语法的JSON规则,指定允许所有主体(Principal*)执行对应的读写操作,确认语法校验无误后保存配置即可。

3. 对象级权限补充配置(可选)

如果不需要全Bucket公共读写,仅需要部分对象开放公共读写,可进入Bucket的「文件管理」页,找到目标对象,点击「权限设置」,将单个对象的ACL修改为公共读写,保存后即可生效,其他对象的权限不受影响。

4. 配置验证

  • 验证读权限:复制任意已存在对象的公网访问URL,在无痕浏览器中打开,若能正常返回文件内容则读权限生效。
  • 验证写权限:使用curl命令执行上传操作:curl -T 本地文件路径 https://<Bucket名>.<endpoint>/<新文件名>,执行完成后访问新上传的对象URL,若能正常访问则写权限生效。

命令行操作(适合自动化场景)

1. 完成awscli的基础配置后,执行以下命令关闭Bucket的公共访问阻止:

```bash

aws s3api put-public-access-block \

--bucket <你的Bucket名> \

--public-access-block-configuration BlockPublicAcls=false,IgnorePublicAcls=false,BlockPublicPolicy=false,RestrictPublicBuckets=false \

--endpoint-url <对应服务的endpoint>

```

2. 执行以下命令一键配置Bucket公共读写ACL:

```bash

aws s3api put-bucket-acl \

--bucket <你的Bucket名> \

--acl public-read-write \

--endpoint-url <对应服务的endpoint>

```

3. 执行验证命令确认配置生效:

```bash

验证读权限,无需传入密钥即可获取对象

aws s3 cp s3://<你的Bucket名>/<测试文件名> ./ --no-sign-request --endpoint-url <对应服务的endpoint>

验证写权限,无需传入密钥即可上传对象

aws s3 cp ./<本地测试文件> s3://<你的Bucket名>/<新文件名> --no-sign-request --endpoint-url <对应服务的endpoint>

```

四、常见错误

  • 公共访问阻止未关闭:这是新手最容易踩的坑,大部分S3兼容服务默认开启公共访问阻止规则,优先级高于所有ACL和Bucket策略,哪怕配置了公共读写权限也会被拦截,需先关闭对应开关。
  • endpoint填写错误:如果使用非AWS的S3兼容服务,直接沿用AWS默认endpoint会提示无法连接或鉴权失败,需要填写对应服务商提供的专属endpoint,可直接在Bucket详情页复制官方提供的地址。
  • region不匹配:创建Bucket时选择的region和配置权限时指定的region不一致,会提示找不到Bucket,需确认Bucket所属region后再操作。
  • Bucket策略语法错误:最常见的是Resource字段漏写/*后缀,仅写Bucket名称的话规则只会作用于Bucket本身,不会覆盖内部的对象,导致读写权限不生效;其次是Action字段漏选对应的操作权限,比如只写了s3:GetObject没写s3:PutObject,会导致只有读权限没有写权限。
  • 对象级ACL覆盖Bucket配置:如果单个对象单独设置了私有ACL,优先级会高于Bucket级的公共读写配置,哪怕Bucket开了公共读写,该对象还是无法匿名访问,需单独修改对象的ACL。

五、示例说明

假设我们有一个名为test-public-2024的Bucket,部署在七彩云对象存储广州区,需要配置全Bucket公共读写权限,操作流程如下:

1. 登录七彩云对象存储控制台,找到test-public-2024Bucket进入详情页,在「权限设置」中找到「公共访问阻止」,关闭所有四个阻止开关并保存。

2. 进入「Bucket策略」编辑页,粘贴以下JSON规则:

```json

{

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

"Statement": [

{

"Effect": "Allow",

"Principal": "*",

"Action": [

"s3:GetObject",

"s3:PutObject",

"s3:DeleteObject"

],

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

}

]

}

```

3. 保存策略后进行验证:

  • 访问https://test-public-2024.obs.gd.qicaiyun.com/test.txt,无痕浏览器可正常返回文件内容,读权限生效。
  • 执行命令curl -T ./demo.txt https://test-public-2024.obs.gd.qicaiyun.com/demo.txt,上传成功后访问对应URL可正常获取文件,写权限生效。

六、更简单的方案

如果觉得原生S3的配置流程繁琐,需要处理多层权限拦截、复杂的策略语法,可以选择兼容S3 API的对象存储服务简化配置流程,比如七彩云对象存储,它完全适配S3的所有权限规则,控制台内置「一键开启公共读写」的快捷按钮,无需手动编写策略JSON,系统会自动生成符合规则的策略配置,同时会在配置前弹出明确的风险提示,避免误操作。如果你之前已经在使用S3的工具链(比如awscli、各类S3 SDK),只需要将配置中的endpoint替换为七彩云的对应区域endpoint,所有原有配置逻辑都可以直接复用,无需修改代码。

七、FAQ

1. 配置公共读写权限后有哪些安全风险?

公共读写权限意味着任何匿名用户都可以上传、下载、删除Bucket中的文件,可能出现恶意用户上传违法违规内容、占用存储容量、盗刷流量费用,或者删除核心数据的风险,建议仅在临时文件分享、公开静态资源托管等必要场景开启,同时尽量搭配IP白名单、文件后缀限制等策略缩小权限范围,用完后及时关闭。

2. 我已经按步骤配置了公共读写,为什么还是无法匿名访问对象?

优先排查四个常见原因:一是Bucket的公共访问阻止规则没有完全关闭,会覆盖所有ACL和策略配置;二是Bucket策略的Resource字段配置错误,若要开放对象读写需要加上/*后缀,仅写Bucket名称的话只作用于Bucket本身,不包含内部对象;三是目标对象单独设置了私有ACL,对象级权限优先级高于Bucket级权限,需要单独修改对象ACL;四是使用了自定义域名或CDN加速,需要同步配置域名的访问权限规则。

3. 能不能只给Bucket下的指定目录开放公共读写权限?

可以,使用Bucket策略配置即可,在Resource字段中指定目录前缀即可,例如要开放public目录下的所有文件公共读写,就将Resource设置为"arn:aws:s3:::你的Bucket名称/public/*",其他目录的权限不受影响,这种方式比全Bucket开放更安全。

4. 配置公共读写后能不能限制只能上传指定类型的文件?

可以,在Bucket策略中新增Condition规则即可实现,例如仅允许上传jpg、png格式的图片,可在策略中添加以下配置:

```json

"Condition": {

"StringLike": {

"s3:objectContent/type": [

"image/jpeg",

"image/png"

]

}

}

```

八、总结

本次教程完整介绍了S3对象存储公共读写权限的配置全流程,核心步骤可归纳为四步:一是确认账号权限并准备好基础配置信息,二是关闭目标Bucket的公共访问阻止规则,三是根据需求选择ACL或Bucket策略完成权限配置,四是完成读写验证确保配置生效。日常使用中建议优先选择细粒度的Bucket策略配置权限,尽量避免全量开放公共读写,定期巡检Bucket权限设置,降低安全风险。如果是新手用户或者希望简化配置流程,可以选择七彩云对象存储这类S3兼容服务,既保留了S3 API的生态兼容性,又简化了配置流程,降低了上手门槛。

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

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

访问七彩云官网

相关文章

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

S3协议是什么和对象存储有啥关系

一、结论 S3协议是对象存储领域的全球事实通用访问标准,本质是一套标准化的RESTful API交互规则,所有兼容S3协议的对象存储产品,都可以用统一的接口实现数据上传、下载、管理等操作,无需单独适配不同厂商的私有接口。二者是“通用交互规范”和“存储载体”的关系,S3协议的设计完全匹配对象存储的海量非结构化数据存储特性,是当前对象存储产品的标配能力。

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

S3存储如何配置CORS跨域权限

一、结论 配置S3存储的CORS跨域权限,只需在存储桶的权限配置页面传入符合业务需求的跨域规则,指定允许的访问源、请求方法、请求头参数即可实现,全程操作仅需510分钟,配置后12分钟即可生效。

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

普通企业做S3存储成本优化有哪些可落地的实用方法?

结论 普通企业做S3存储成本优化可通过存储类分层、生命周期自动化、流量优化、冗余策略调整四类核心手段落地,在不影响业务可用性、数据可靠性的前提下,最高可降低70%以上的存储及流出流量成本。 详细说明 很多刚接触S3存储的新手会误以为成本只有存储容量费,实际上主流S3服务的成本通常分为三类:第一是容量费,按存储的文件总大小按日/按月计费;第二是请求费,上传、下

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

网站如何接入兼容S3协议的对象存储

一、结论 网站接入兼容S3协议的对象存储,只需要获取对应存储服务的核心配置参数,通过通用S3 SDK替换原有存储调用逻辑,完成上传、下载、访问等功能的联调即可上线,全程无需大规模修改业务代码,像七彩云对象存储这类高度兼容S3标准的服务,甚至可以做到零适配成本接入。

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

S3 storage用来做视频存储靠谱吗?

一、结论 S3存储天生适配大文件存储、高并发访问的需求,是目前视频存储场景的最优选择之一,全球范围内大量视频平台、内容站点、企业机构都在使用S3架构的存储承载全链路的视频存储、分发需求。