更新时间: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 SSE-C加密流程

加密对象时,如图1所示,加密流程如下:

  1. 用户调用API接口时,将密钥发送给OBS。
  2. OBS使用密钥加密对象,并在使用后将密钥从内存中删除。
  3. OBS存储对象密文。
图2 SSE-C解密流程

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

  1. 下载对象时,用户调用API接口将密钥发送给OBS。
  2. OBS使用密钥解密对象,得到对象明文,并在使用后将密钥从内存中删除。

相关权限配置

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

相关操作

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