更新时间:2025-08-26 GMT+08:00
SSE-C加密(用户提供密钥)
SSE-C是使用客户密钥来进行服务器端加密的方式,适用于需要用户自行保存和管理密钥的场景。
费用说明
使用SSE-C加密不会产生额外费用,但配置对象使用SSE-C加密会产生请求费用。
注意事项
- 使用SSE-C时,必须严格使用HTTPS协议发送请求,以保证您的密钥安全性,OBS会拒绝非HTTPS的SSE-C相关请求。
- OBS不会存储您的密钥,如果您丢失了密钥,可能会失去使用该密钥加密的对象。
- 加密后对象的ETag值不是对象明文的MD5值,而是对象密文的MD5值。
- 您需要自行跟踪密钥与对象的对应关系。例如对象开启了多版本控制,可能每个对象版本都有自己对应的加密密钥,您需要跟踪好密钥与对象版本的对应关系。
- 建议您在客户端对密钥进行必要的保护措施,例如密钥轮换,以保护您的数据安全。
约束限制
- SSE-C支持AES256一种加密算法。
- 仅支持为对象配置SSE-C加密方式。
- 如果您上传对象的方式为多段上传,需要在初始化上传段任务、上传段、拷贝段的过程中携带密钥信息,且同一个任务内的多段操作,携带的密钥必须保持一致。合并段无需携带密钥,合并后的对象是一个使用SSE-C方式加密的对象。
SSE-C原理介绍
加密对象时,如图1所示,加密流程如下:
- 用户调用API接口时,将密钥发送给OBS。
- OBS使用密钥加密对象,并在使用后将密钥从内存中删除。
- OBS存储对象密文。
解密对象时,如图2所示,解密流程如下:
- 下载对象时,用户调用API接口将密钥发送给OBS。
- OBS使用密钥解密对象,得到对象明文,并在使用后将密钥从内存中删除。
相关权限配置
- 设置桶的加密方式为SSE-C,您必须是桶拥有者或拥有设置桶加密方式的权限。建议使用IAM或桶策略进行授权,如果使用IAM则需授予obs:bucket:PutEncryptionConfiguration、obs:bucket:GetEncryptionConfiguration权限,如果使用桶策略则需授予PutEncryptionConfiguration、GetEncryptionConfiguration权限。相关授权方式介绍可参见OBS权限控制概述,配置方式详见使用IAM自定义策略、自定义创建桶策略。
- 上传对象时使用SSE-C方式加密对象,需要拥有对象上传权限。使用IAM则需授予obs:object:PutObject,使用桶策略则需授予PutObject。
- 下载使用SSE-C方式加密的对象,需要拥有对象下载权限。使用IAM则需授予obs:object:GetObject,使用桶策略则需授予GetObject。
- 您可以通过设置桶策略,对桶的访问请求执行服务端加密限制。例如,要求使用PUT上传方式向名为ExampleBucket的桶中上传对象时,对象必须选择SSE-C加密方式,可使用以下桶策略达成,该桶策略拒绝不包含头域x-obs-server-side-encryption-customer-algorithm:"AES256"的上传操作:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
{ "Statement": [ { "Sid": "DenyUnEncryptedObjectUploads", "Effect": "Deny", "Principal": "*", "Action": "PutObject", "Resource": "ExampleBucket/*", "Condition": { "StringNotEquals": { "x-obs-server-side-encryption-customer-algorithm": "AES256" } } } ] }
为对象配置SSE-C加密
OBS支持通过API、SDK方式对上传对象SSE-C进行加密,不支持通过控制台、OBS Browser+、obsutil方式配置。
相关操作
您可以使用复制同名对象的方式,将桶中已有的未加密对象更改为加密状态,或者修改对象的加密方式。了解详情请参见修改已有对象的加密状态。