更新时间:2025-09-02 GMT+08:00
分享

SSE-OBS加密(OBS托管密钥)

使用SSE-OBS方式加解密时不需要与KMS交互,访问时延更低,性能较SSE-KMS更好,适用于仅需要基础的加密能力的场景,以及批量加密的场景。

费用说明

使用SSE-OBS加密不会产生额外费用,但配置桶或对象使用SSE-OBS加密会产生请求费用。

注意事项

加密后对象的ETag值不是对象明文的MD5值,而是对象密文的MD5值。

约束限制

SSE-OBS支持AES256一种加密算法。

SSE-OBS原理介绍

图1 SSE-OBS加密流程

加密对象时,如图1所示,SSE-OBS采用信封加密机制,加密流程如下:

  1. OBS通过系统根密钥派生出数据密钥明文,然后通过加密得到数据密钥密文。
  2. OBS使用数据密钥明文加密数据,并在使用后将明文尽快从内存中删除。
  3. OBS将数据密钥密文作为元数据与对象密文一起存储。
图2 SSE-OBS解密流程

解密对象时,如图2所示,解密流程如下:

  1. 下载对象时,系统发起解密数据密钥密文的请求。
  2. OBS解密数据密钥密文,返回明文。
  3. OBS使用数据密钥明文解密对象密文,得到对象明文,并尽快从内存中数据密钥明文。

相关权限配置

  • 设置桶的加密方式为SSE-OBS,您必须是桶拥有者或拥有设置桶加密方式的权限。建议使用IAM或桶策略进行授权,如果使用IAM则需授予obs:bucket:PutEncryptionConfigurationobs:bucket:GetEncryptionConfiguration权限,如果使用桶策略则需授予PutEncryptionConfigurationGetEncryptionConfiguration权限。相关授权方式介绍可参见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方式配置。

相关文档

您可以使用复制同名对象的方式,将桶中已有的未加密对象更改为加密状态,或者修改对象的加密方式。了解详情请参见修改已有对象的加密状态

相关文档