S3 Object Lock 是什么
Object Lock 给对象加一层 WORM(一次写入、多次读取)保护:在保留期内,任何账号都无法删除或覆盖该对象版本。它有两种模式——合规模式(COMPLIANCE)连根账号也无法提前解除,治理模式(GOVERNANCE)允许持有特殊权限的人绕过。用于勒索防护与合规归档时,通常还要配合版本控制与生命周期规则。
基本信息
| 适用平台 | AWS S3 及部分兼容实现(MinIO 支持,其他兼容存储能力不一) |
|---|---|
| 启用前提 | 只能在创建桶时开启;普通桶无法事后追加,须新建桶并迁移 |
| 依赖关系 | Object Lock 建立在版本控制之上,开启后版本控制自动启用 |
| 两种模式 | COMPLIANCE 不可提前解除;GOVERNANCE 需 s3:BypassGovernanceRetention 权限才能绕过 |
| 另一套机制 | 法定保留(Legal Hold)与保留期互相独立,解除流程要分别设计 |
典型使用场景
- 勒索防护:备份副本在保留期内不可删除或加密覆盖,攻击者无法清空历史
- 合规归档:财务、日志等记录按监管年限锁定,形成可审计的留存证明
- 防误删兜底:运维脚本出错时对象仍受保护,需等保留期结束才可清理
- 备份仓储分层:热数据放普通桶,需长期留存的副本单独放入带锁桶
- 内部审计取证:保留期内的版本与删除操作都可追溯
创建带锁桶
创建带锁桶
# Object Lock 只能在创建桶时启用,需同时指定区域
aws s3api create-bucket --bucket my-worm-bucket \
--object-lock-enabled-for-bucket --region ap-northeast-1 \
--create-bucket-configuration LocationConstraint=ap-northeast-1
# 查看桶的锁配置
aws s3api get-object-lock-configuration --bucket my-worm-bucket桶默认保留配置 lock.json
桶默认保留配置 lock.json
# 默认保留配置:写入对象自动受合规模式保护 30 天
{
"ObjectLockEnabled": "Enabled",
"Rule": {
"DefaultRetention": {
"Mode": "COMPLIANCE",
"Days": 30
}
}
}应用配置与单对象保留
应用配置与单对象保留
# 把默认保留规则应用到桶
aws s3api put-object-lock-configuration --bucket my-worm-bucket \
--object-lock-configuration file://lock.json
# 上传时直接指定该对象的保留期(覆盖默认配置)
aws s3api put-object --bucket my-worm-bucket --key db/full-20261013.bak \
--body ./full.bak --object-lock-mode COMPLIANCE \
--object-lock-retain-until-date 2027-10-13T00:00:00Z两种模式对照
| 模式 | 能否提前解除 | 适用判断 |
|---|---|---|
| COMPLIANCE | 不能,保留期内连根账号也不行 | 监管留证、勒索防护等不能妥协的场景 |
| GOVERNANCE | 持有特殊权限者可绕过 | 内部防误删,仍需保留应急清理通道 |
| Legal Hold | 与保留期独立,解除需专门权限 | 诉讼或调查期间的临时冻结 |
合规模式不可逆:保留期设得过长会锁死存储成本,过短则防护不足。上线前按合规要求算清年限,并预留成本预算。
带锁桶里对象的删除只会生成删除标记(因版本控制开启),真正清理要等保留期结束后按版本显式删除;生命周期规则可自动处理到期版本。