SSE-OBS加密(OBS托管密钥)
使用SSE-OBS方式加解密时不需要与KMS交互,访问时延更低,性能较SSE-KMS更好,适用于仅需要基础的加密能力的场景,以及批量加密的场景。
费用说明
使用SSE-OBS加密不会产生额外费用,但配置桶或对象使用SSE-OBS加密会产生请求费用。
注意事项
加密后对象的ETag值不是对象明文的MD5值,而是对象密文的MD5值。
约束限制
SSE-OBS支持AES256一种加密算法。
SSE-OBS原理介绍
加密对象时,如图1所示,SSE-OBS采用信封加密机制,加密流程如下:
- OBS通过系统根密钥派生出数据密钥明文,然后通过加密得到数据密钥密文。
- OBS使用数据密钥明文加密数据,并在使用后将明文尽快从内存中删除。
- OBS将数据密钥密文作为元数据与对象密文一起存储。
解密对象时,如图2所示,解密流程如下:
- 下载对象时,系统发起解密数据密钥密文的请求。
- OBS解密数据密钥密文,返回明文。
- OBS使用数据密钥明文解密对象密文,得到对象明文,并尽快从内存中数据密钥明文。
相关权限配置
- 设置桶的加密方式为SSE-OBS,您必须是桶拥有者或拥有设置桶加密方式的权限。建议使用IAM或桶策略进行授权,如果使用IAM则需授予obs:bucket:PutEncryptionConfiguration、obs:bucket:GetEncryptionConfiguration权限,如果使用桶策略则需授予PutEncryptionConfiguration、GetEncryptionConfiguration权限。相关授权方式介绍可参见OBS权限控制概述,配置方式详见使用IAM自定义策略、自定义创建桶策略。
- 上传对象时使用SSE-OBS方式加密对象,需要拥有对象上传权限。使用IAM则需授予obs:object:PutObject,使用桶策略则需授予PutObject。
- 下载使用SSE-OBS方式加密的对象,需要拥有对象下载权限。使用IAM则需授予obs:object:GetObject,使用桶策略则需授予GetObject。
- 您可以通过设置桶策略,来限制指定桶的请求头域,如果您要对桶中的所有对象执行服务端加密限制,则可通过设置桶策略达成。例如,如果本租户的上传对象请求不包含服务端加密 (SSE-OBS) 的相关头域x-obs-server-side-encryption:"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": "YourBucket/*", "Condition": { "StringNotEquals": { "x-obs-server-side-encryption": "AES256" } } } ] }
为桶配置SSE-OBS加密
OBS支持通过控制台、API、SDK方式配置桶SSE-OBS加密,不支持通过OBS Browser+、obsutil方式配置。
为对象配置SSE-OBS加密
OBS支持通过控制台、API、SDK方式对上传对象SSE-OBS进行加密,不支持通过OBS Browser+、obsutil方式配置。
相关文档
您可以使用复制同名对象的方式,将桶中已有的未加密对象更改为加密状态,或者修改对象的加密方式。了解详情请参见修改已有对象的加密状态。