首页/系统与基础设施/存储速查/S3 服务端加密与密钥管理
分布式与对象存储70 条

S3 服务端加密与密钥管理

S3 服务端加密分服务托管密钥、密钥管理服务托管与客户自备密钥三种模式,差别在于密钥归谁管理、能否审计与撤销;桶级默认加密配合策略强制要求加密,是避免出现明文盲点的常规做法。

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌​​‌​‌‌‌‌​‌‌‌​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​‌‌‌​​‌​​‌‌​​​​‌​‌‌​​‌‌‌​‌‌​​‌​‌​​‌​‌‌‌‌​‌‌‌​​‌‌​​‌‌​​‌‌​​‌​‌‌​‌​‌‌‌​​‌‌​‌‌​​‌​‌​‌‌‌​​‌​​‌‌‌​‌‌​​‌‌​​‌​‌​‌‌‌​​‌​​​‌​‌‌​‌​‌‌‌​​‌‌​‌‌​‌​​‌​‌‌​​‌​​​‌‌​​‌​‌​​‌​‌‌​‌​‌‌​​‌​‌​‌‌​‌‌‌​​‌‌​​​‌‌​‌‌‌​​‌​​‌‌‌‌​​‌​‌‌‌​​​​​‌‌‌​‌​​​‌‌​‌​​‌​‌‌​‌‌‌‌​‌‌​‌‌‌​​​‌​‌‌‌​​‌‌​‌​​​​‌‌‌​‌​​​‌‌​‌‌​‌​‌‌​‌‌​​

三种加密模式

服务端加密指的是数据写入存储时由服务侧完成加密、读取时自动解密,业务拿到的仍是明文对象。区别在于密钥由谁掌握:服务托管密钥省事、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

三种模式对比

模式密钥归属特点
服务端托管服务侧管理配置最简单,审计与撤销能力有限
密钥管理服务由密钥服务托管可审计、可禁用、可按账号授权
客户自备客户自行保管服务端不存密钥,密钥丢失即无法解密

加固建议

  • 在桶级设置默认加密,避免个别客户端漏传加密头写入明文
  • 用策略条件显式拒绝未使用指定加密方式的写入请求
  • 为加密密钥配置独立权限,读写密钥与读写对象分开授权
  • 密钥轮换纳入例行运维,并验证轮换后历史对象仍可正常解密
  • 记录加密配置变更,合规检查时需要能提供变更痕迹
静态加密与传输加密是两件事:前者防落盘泄露,后者防链路窃听,缺任何一个都不算完整的数据保护。
使用客户自备密钥时,密钥丢失没有任何找回途径,对象等同永久不可读;这类方案必须有独立的密钥备份与恢复演练。

易错点

  • 只配了传输加密就以为数据已受保护,静态存储仍是明文
  • 桶级默认加密未开启,个别旧客户端上传的对象成为明文盲点
  • 密钥被误禁用或删除,导致大量对象在保留期内无法读取
  • 跨账号共享只授对象读取权限,未授密钥解密权限,对方读取全部失败

数据来源与参考

  • Amazon S3 官方文档:服务端加密(SSE-S3 / SSE-KMS / SSE-C)
  • Amazon S3 官方文档:默认存储桶加密与密钥权限

整理校对:其其网ICT文档中心 · 本页地址:docs.qiqicto.com/storage/s3-server-side-encryption.html

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌​​‌​‌‌‌‌​‌‌‌​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​‌‌‌​​‌​​‌‌​​​​‌​‌‌​​‌‌‌​‌‌​​‌​‌​​‌​‌‌‌‌​‌‌‌​​‌‌​​‌‌​​‌‌​​‌​‌‌​‌​‌‌‌​​‌‌​‌‌​​‌​‌​‌‌‌​​‌​​‌‌‌​‌‌​​‌‌​​‌​‌​‌‌‌​​‌​​​‌​‌‌​‌​‌‌‌​​‌‌​‌‌​‌​​‌​‌‌​​‌​​​‌‌​​‌​‌​​‌​‌‌​‌​‌‌​​‌​‌​‌‌​‌‌‌​​‌‌​​​‌‌​‌‌‌​​‌​​‌‌‌‌​​‌​‌‌‌​​​​​‌‌‌​‌​​​‌‌​‌​​‌​‌‌​‌‌‌‌​‌‌​‌‌‌​​​‌​‌‌‌​​‌‌​‌​​​​‌‌‌​‌​​​‌‌​‌‌​‌​‌‌​‌‌​​