对象存储服务端加密(SSE)是在数据写入磁盘前由服务端自动完成的加密机制,专为保护静态数据设计,支持SSE-COS/OSS/OBS、SSE-KMS、SSE-C三种方式,分别对应服务托管密钥、KMS托管密钥和用户自提供密钥,适用于不同安全与合规需求场景。

对象存储服务端加密(SSE)是在数据写入磁盘前由服务端自动完成的加密机制,专为保护静态数据设计。它不改变用户访问方式——上传和下载操作照常进行,解密由系统在读取时透明完成,用户无需管理密钥或修改业务逻辑。
三种主流 SSE 实现方式及适用场景
目前主流云厂商(如腾讯云 COS、阿里云 OSS、华为云 OBS、Azure Storage)均支持以下三类服务端加密,核心差异在于密钥归属与管理责任:
- SSE-COS / SSE-OSS / SSE-OBS:密钥由对象存储服务完全托管。每个对象使用独立数据密钥(DEK),DEK 再用服务主密钥(MEK)加密。默认算法为 AES256,部分平台支持 SM4。适合对合规性要求中等、追求开箱即用和批量加密效率的场景。
- SSE-KMS:密钥由密钥管理服务(KMS)托管,底层依赖硬件安全模块(HSM)生成和保护主密钥(CMK)。加解密过程需调用 KMS API,支持密钥轮转、禁用、审计日志,满足金融、政务等强合规需求。注意:需提前开通 KMS 并配置对应 IAM 权限(如 kms:dek:encrypt、kms:dek:decrypt)。
- SSE-C:密钥完全由用户生成并保管,上传时通过请求头提供密钥和其 MD5 值。OBS 或 COS 仅使用该密钥加密对象,不保存密钥副本。适用于密钥必须离云、自主控制粒度极高的场景,但密钥丢失即数据永久不可恢复。
桶级默认加密与对象级按需加密
服务端加密支持两种作用范围,可灵活组合:
- 在创建存储桶时勾选“启用服务端加密”,并选择 SSE-COS 或 SSE-KMS,此后所有新上传对象将自动按该方式加密(除非显式覆盖)。
- 已存在的存储桶可在【安全管理 → 服务端加密】中开启并编辑加密配置;若选择 SSE-KMS 自定义密钥,务必确保该 CMK 处于启用状态,删除或禁用会导致已有加密对象无法解密。
- 单个对象上传时,可通过 HTTP 请求头指定加密方式,覆盖桶默认设置。例如:
x-cos-server-side-encryption: AES256(SSE-COS)或x-oss-server-side-encryption: KMS(SSE-KMS)。
关键注意事项与约束
启用 SSE 后需留意以下实际限制,避免误操作导致数据不可用:
- 对象一旦上传完成,其加密方式不可更改。若需更换加密类型,必须重新上传。
- 归档存储类型(Archive)对象暂不支持直接设置 SSE,需先恢复为标准/低频类型后再操作。
- SSE 加密仅作用于对象数据体,不加密对象元数据(如文件名、ETag、自定义 Header)。
- 使用预签名 URL 上传时,SSE-COS 不生效;若需加密,必须通过 SDK 或带加密头的直传请求实现。
- 开启 SSE-KMS 的桶,访问者需具备对应 KMS 密钥的操作权限,否则上传/下载会因鉴权失败而中断。
服务端加密不是功能开关,而是数据生命周期的安全基线。选对方式、配好范围、管住密钥,静态数据就能在磁盘上始终以密文形态存在,即使物理介质被窃取也难以还原原始内容。

















