服务端加密
使用场景
如果您的业务对数据存储的安全性和合规性有较高要求,可使用OBS提供的服务端加密功能,对上传到OBS存储的数据进行加密保护。
功能介绍
服务器端加密是指上传对象时,客户端上传到OBS的文件,由OBS服务端对文件进行加密然后存储密文,在访问对象时,由OBS服务端对文件进行解密,然后向客户端返回解密后的数据。对于客户视角而言,数据的上传和访问与未加密时没有区别,加解密的过程由服务端在后台自动完成,您只需要确保拥有上传和访问加密对象的权限即可。
OBS支持SSE-KMS、SSE-OBS、SSE-C三种加密方式:
对比维度 |
SSE-KMS (KMS 托管密钥的服务器端加密) |
SSE-OBS (OBS 托管密钥的服务器端加密) |
SSE-C (客户提供密钥的服务器端加密) |
---|---|---|---|
功能描述 |
在上传对象或访问对象时,OBS使用KMS主密钥派生的数据加密密钥,对OBS对象进行加解密。 |
在上传对象或访问对象时,OBS使用OBS根密钥派生的数据加密密钥,对OBS对象进行加解密。 |
在上传对象或访问对象时,OBS使用用户提供的密钥,对OBS对象进行加解密。 |
使用场景 |
适用于对合规性、安全性要求较高的场景。 |
加解密时不需要再与KMS交互,性能较SSE-KMS更好,适用于仅需要基础的加密能力,批量加密的场景。 |
适用于需要自己保存和管理密钥的场景。 |
密钥生成和管理 |
KMS服务保存和管理密钥,用户可以通过KMS云服务查看和管理密钥。 |
OBS服务保存和管理密钥。 |
用户自己保存和管理密钥。 |
是否调用KMS服务相关接口 |
是 |
否 |
否 |
数据加密算法 |
AES256、SM4 |
AES256 |
AES256、SM4 |
支持设置加密范围 |
桶级、对象级 |
桶级、对象级 |
对象级 |
详细介绍 |
- 创建桶时,SSE-KMS服务端加密方式支持拉美-墨西哥城一、拉美-墨西哥城二、拉美-圣保罗一、非洲-约翰内斯堡、华北-北京四、华北-乌兰察布一、华东-上海一、华南-广州、西南-贵阳一、亚太-曼谷、亚太-新加坡、亚太-雅加达、土耳其-伊斯坦布尔区域。如果您在使用SSE-KMS时选择SM4加密算法,该算法仅支持华北-乌兰察布一区域。
- 上传对象时,SSE-KMS服务端加密方式支持拉美-墨西哥城一、拉美-圣保罗一、非洲-约翰内斯堡、华北-北京四、华北-乌兰察布一、华东-上海一、华南-广州、华南-广州-友好用户环境、西南-贵阳一、中国-香港、亚太-曼谷、亚太-新加坡、亚太-雅加达、土耳其-伊斯坦布尔区域。如果您在使用SSE-KMS时选择SM4加密算法,该算法仅支持华北-乌兰察布一区域。
- SSE-OBS服务端加密方式中国站已全网上线。
桶级和对象级服务端加密
下表为桶级和对象级服务端加密的介绍和对比:
对比项 |
桶级对象加密 |
对象级服务端加密 |
---|---|---|
使用场景 |
|
|
支持的加密方式 |
SSE-KMS、SSE-OBS |
SSE-KMS、SSE-OBS、SSE-C |
支持设置的时间 |
|
|
两者之间的相互影响 |
|
约束限制
- 一个对象每次上传,只支持一种服务端加密方式。对象的加密状态不可以修改。
- 镜像回源至Bucket中的文件默认不加密。
- 当桶或者桶内对象开启了SSE-KMS服务端加密功能,需要使用IAM为请求者配置kms:cmk:get、kms:cmk:list、kms:cmk:create、kms:dek:create、kms:dek:crypto权限,才能上传下载对象。
- 桶加密开关关闭后,访问加密对象必须使用HTTPS协议。
- 使用中的密钥不可以删除,如果删除将导致加密对象不能下载。
- 对象进行服务端加密后,且未在IAM进行委托的情况下,即使其他账号和用户拥有该对象的读权限,也无法访问该对象。
SSE-KMS加密方式
如图所示,SSE-KMS采用信封加密机制,KMS云服务托管的用户主密钥CMK并没有直接用来加密数据,系统先是从CMK中派生出数据加密密钥,然后使用数据加密密钥来完成OBS数据的加密,加密完成后,OBS存储对象加密后的密文和加密后的数据加密密钥。
同理,如图所示,解密数据时,KMS云服务先解密数据加密密钥,然后用它来解密对象密文,最终获得对象明文返回给客户。借助KMS,每一个对象都有一个单独的随机的数据密钥,您可以专注于数据加解密、电子签名验签等业务功能,无需花费时间和精力来保障密钥的保密性、完整性和可用性。
KMS通过使用硬件安全模块 (HSM) 保护密钥安全的托管,帮助用户轻松创建和控制加密密钥。用户密钥不会明文出现在HSM之外,避免密钥泄露。对密钥的所有操作都会进行访问控制及日志跟踪,提供所有密钥的使用记录,满足监督和合规性要求。
支持的SSE-KMS加密的API接口:
使用SSE-KMS 需要使用IAM为请求者配置kms:cmk:get、kms:cmk:list、kms:cmk:create、kms:dek:create、kms:dek:crypto权限。
资源粒度 |
接口 |
头域 |
---|---|---|
桶级 |
|
|
加密配置位于body体中,详见设置桶的加密配置。 |
||
对象级 |
|
|
您可以通过设置桶策略,对桶的访问请求执行服务端加密限制。例如,要求使用PUT上传方式向名为ExampleBucket的桶中上传对象时,对象必须选择SSE-KMS加密方式,可使用以下桶策略达成,该桶策略拒绝不包含头域x-obs-server-side-encryption:"kms"的上传操作:
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": "kms" } } } ] } |
SSE-OBS加密方式
SSE-OBS方式,OBS服务生成和管理数据加密密钥,并使用数据加密密钥对数据进行信封加密和解密。与SSE-KMS的区别在于SSE-OBS是OBS管理密钥,而非KMS。
支持的SSE-OBS加密的API接口:
资源粒度 |
接口 |
头域 |
---|---|---|
桶级 |
x-obs-server-side-encryption:指定桶加密配置的加密模式 |
|
加密配置位于body体中,详见设置桶的加密配置。 |
||
对象级 |
x-obs-server-side-encryption:指定桶加密配置的加密模式 |
|
您可以通过设置桶策略,来限制指定桶的请求头域,如果您要对桶中的所有对象执行服务端加密限制,则可通过设置桶策略达成。例如,如果要求本租户的上传对象请求不包含服务端加密 (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-C加密方式
SSE-C方式,OBS使用用户提供的密钥和密钥的MD5值进行服务端加密。
支持的SSE-C加密的API接口:
资源粒度 |
接口 |
头域 |
---|---|---|
对象级 |
|
|
如果源段或源对象已进行服务端加密,而目标段和目标对象也需要加密,除了使用以上3个头域外,还需要使用以下3个头域解密源对象:
|
||
开启并配置桶服务端加密
OBS支持通过控制台、API、SDK方式配置桶服务端加密,不支持通过OBS Browser+、obsutil方式配置桶服务端加密。
配置对象级服务端加密
OBS支持通过控制台、API、SDK方式对上传对象进行加密,不支持通过OBS Browser+、obsutil方式对上传对象进行加密。