三种加密模式
服务端加密指的是数据写入存储时由服务侧完成加密、读取时自动解密,业务拿到的仍是明文对象。区别在于密钥由谁掌握:服务托管密钥省事、KMS 托管密钥可审计可撤销、客户端自带密钥则连服务端都不保存密钥。选择哪种模式,实质上是选择谁承担密钥管理责任与合规举证责任。
基本信息
| 加密模式 | 服务端托管密钥、密钥管理服务托管、客户自备密钥 |
|---|---|
| 传输保护 | 使用 TLS 加密传输链路,与静态加密分开配置 |
| 默认加密 | 可在桶级设置,新写入对象自动应用 |
| 权限要求 | 使用托管密钥加解密通常需要额外的密钥权限 |
典型使用场景
- 合规要求静态加密:所有对象落盘必须加密,审计可查
- 密钥可控:要求密钥可随时禁用,禁用后数据立即不可解密
- 跨账号共享:让对方读对象但不交出密钥管理权
- 敏感数据分层:高密级数据用独立密钥,与普通数据隔离
- 迁移加密:把明文存量数据批量重写为加密对象
配置与验证
配置与验证
# 桶级默认加密:新写入对象自动加密
aws s3api put-bucket-encryption --bucket demo-bucket \
--server-side-encryption-configuration '{"Rules":[{"ApplyServerSideEncryptionByDefault":{"SSEAlgorithm":"AES256"}}]}'
# 上传时显式指定加密模式
aws s3api put-object --bucket demo-bucket --key data.bin --body data.bin \
--server-side-encryption AES256
# 读取时确认实际生效的加密方式
aws s3api head-object --bucket demo-bucket --key data.bin三种模式对比
| 模式 | 密钥归属 | 特点 |
|---|---|---|
| 服务端托管 | 服务侧管理 | 配置最简单,审计与撤销能力有限 |
| 密钥管理服务 | 由密钥服务托管 | 可审计、可禁用、可按账号授权 |
| 客户自备 | 客户自行保管 | 服务端不存密钥,密钥丢失即无法解密 |
加固建议
- 在桶级设置默认加密,避免个别客户端漏传加密头写入明文
- 用策略条件显式拒绝未使用指定加密方式的写入请求
- 为加密密钥配置独立权限,读写密钥与读写对象分开授权
- 密钥轮换纳入例行运维,并验证轮换后历史对象仍可正常解密
- 记录加密配置变更,合规检查时需要能提供变更痕迹
静态加密与传输加密是两件事:前者防落盘泄露,后者防链路窃听,缺任何一个都不算完整的数据保护。
使用客户自备密钥时,密钥丢失没有任何找回途径,对象等同永久不可读;这类方案必须有独立的密钥备份与恢复演练。