
把业务数据放到对象存储,安全部门一定会问四个问题:数据存着会不会被拖走?传输路上会不会被截?误操作删了能不能恢复?出问题能不能查到谁干的?
这篇按这四个问题拆一下对象存储的安全技术体系。
一、第一道防线:加密的三个层次
数据在三个位置会暴露,对应三种加密方式:
| 加密方式 | 保护什么 | 典型场景 |
|---|---|---|
| 服务端加密 | 静态存储的数据 | 硬盘被拆走、运维人员越权读取 |
| 客户端加密 | 密钥不经过服务端 | 极高敏感数据,不信任任何中间环节 |
| 传输加密 | 网络链路 | 公共网络传输、跨地域同步 |
服务端加密是最常用的方式:数据写入存储系统时由服务端加密,读取时解密。对应用透明,业务代码不用改。适合有合规要求、但不涉及极端敏感数据的场景。
客户端加密是应用在上传前就在本地加密,服务端只存密文,拿不到明文。代价是密钥管理要自己做,复杂度高。适合密钥不能托管给第三方的场景。
传输加密用 HTTPS/TLS 保证链路安全,同时可以限制最低 TLS 版本,避免降级攻击。
二、第二道防线:权限模型的分层
访问控制不是一个开关,而是一套从粗到细的体系:
租户级 → Bucket 级 → 目录/前缀级 → 对象级
对应的技术手段:
ACL(访问控制列表):最基础的一层,定义"谁能对这个资源做什么"。粒度粗,适合简单场景。
Bucket Policy:针对整个 Bucket 的授权策略,可以写复杂的条件——比如"只允许特定 IP 段在特定时间段读取"、"只允许某个 RAM 角色写入"。这是生产环境的主力手段。
Access Point(接入点):把同一个 Bucket 通过不同的接入点暴露给不同业务,每个接入点独立配置策略。适合大规模共享数据集——不用给每个业务都开全套权限。
阻止公共访问:一个总开关。对象存储出安全事故,很多是因为某个 Bucket 被误设成公共读,然后被爬虫扫到。这个开关能在全局层面拦住这类配置错误,比逐个 Bucket 检查可靠。
三、第三道防线:防误删的三种机制
数据丢失的主因不是硬盘坏,而是人删错了。对应的三道机制:
1. 版本控制(Versioning)。 每次覆盖写都保留历史版本。文件被覆盖了可以找回旧版,被删除了也能恢复(删除只是加一个删除标记,历史版本还在)。
2. WORM(Write Once Read Many)。 写入后不可修改、不可删除,在保留期内强制锁定。这是合规场景的硬要求——比如财务凭证、审计日志,法规要求必须保证不可篡改。
3. 云备份。 对整体数据做快照备份,应对"整个 Bucket 被误删"这类灾难性操作。版本控制管单对象,备份管全局。
三者的定位不同:版本控制防误覆盖和单对象误删,WORM 防恶意篡改,备份防系统性灾难。
四、第四道防线:审计与可追溯
出了安全事件,第一个问题永远是"谁在什么时候做了什么"。这需要日志能力:
日志转存:把访问日志按固定规则落成文件保存。特点是可以长期留存,用于事后追溯。
实时日志查询:把存储日志接入日志服务,可以在控制台直接查——比如查某个 IP 在过去一小时的所有请求,或者查某个 AK 的异常访问模式。适合事件响应时快速定位。
全链路校验:数据在传输和存储的每个环节做校验和比对,发现损坏自动用冗余副本修复。这一层是数据完整性的保障,和审计是两回事。
五、可靠性指标怎么看
官方给出的指标通常是这样两个:
- 服务可用性 99.995%:一年内不可用时间累计约 26 分钟
- 数据可靠性 12 个 9:理论上存储一亿个对象,每年丢失的概率极低
要理解这两个指标的区别:可用性是"服务能不能访问",可靠性是"数据会不会丢"。可用性靠冗余和故障切换保证,可靠性靠多副本/纠删码保证。两者不能互相替代——一个系统可以服务一直在线但数据悄悄损坏。
六、实际配置建议
按业务敏感度分档配置:
普通业务数据:服务端加密 + Bucket Policy 收紧 + 开启版本控制 + 日志转存。
涉及个人信息的业务:在上一档基础上加敏感数据识别与保护、开启阻止公共访问总开关、配置跨区域复制。
合规留档数据:开启版本控制 + WORM 锁定 + 云备份,三者叠加,日志长期留存。
极高敏感数据:客户端加密 + 最小权限原则 + Access Point 隔离业务 + 全量审计。
七、写在最后
对象存储的安全不是"开个加密就完事",而是加密、权限、防误删、可审计四条线协同。理解每道防线防的是什么故障类型,你才能在配置时不漏项——也不会为了一个低频风险付出过高的复杂度。
存储产品的安全能力说明与当前活动信息可以看官方页面——查看阿里云存储数据安全能力与 OSS 相关内容。具体权益与价格以页面实际展示为准。
你们团队的对象存储安全策略是怎么配的?有没有遇到过公共读权限被误开的坑?评论区聊聊。