当您使用SSE-KMS对海量对象进行加密时,每个对象的加密过程都需要OBS调用KMS服务来派生数据加密密钥,这可能会导致大量的请求发送到KMS,从而产生时延和大量的KMS访问流量。
为了减少对KMS的请求量,您可以配置桶或对象使用桶密钥进行SSE-KMS加密。在这种情况下,KMS会生成一个有效期较短的桶密钥,然后OBS会将桶密钥保存在OBS自己的缓存中,系统直接使用缓存中的桶密钥来派生数据加密密钥用以加解密对象,无需向KMS发送请求。通过桶密钥在OBS内部限时使用的方法可以减少与KMS的交互次数,降低了加解密操作对KMS的流量需求,从而节约成本,提高性能。加解密过程中,KMS管理主密钥和桶密钥,OBS缓存桶密钥、保存和管理数据加密密钥。
图1 桶密钥和数据加密密钥派生过程
约束限制
- 跨区域复制暂不支持配置桶密钥。
- 为了保护数据安全,每个请求者至少会向KMS发送请求获取一次唯一存储桶级密钥,以确保KMS云服务校验请求者是否拥有密钥的访问权限。每个IAM用户,或者IAM用户的权限变更时,OBS会将其视为不同的请求者。
- 未开启桶密钥的对象,如果想要开启桶密钥功能,需要重新上传或复制同名对象,并在上传或复制请求中打开对象级桶密钥开关。
费用说明
如果您使用SSE-KMS加密方式,会涉及密钥管理服务KMS的计费,了解更多请参考KMS计费项。
桶级和对象级桶密钥
OBS支持配置桶级和对象级桶密钥,对象可以继承桶的加密配置,也可以自行配置,具体关系详见图2。注意,表中的桶级和对象级桶密钥的开关是指OBS请求头域x-obs-server-side-encryption-bucket-key-enabled的值是true(开启)还是false(关闭)。
图2 桶级、对象级桶密钥开关的作用结果
为桶配置存储桶密钥
OBS支持通过管理控制台、API方式配置存储桶密钥,不支持通过SDK、OBS Browser+、obsutil方式配置存储桶密钥。
使用OBS控制台
本节仅介绍针对已有桶,如何开启存储桶密钥。创建桶时如何开启存储桶密钥,请参见创建桶。
- 在OBS管理控制台左侧导航栏选择“桶列表”。
- 在桶列表中,单击待操作的桶,进入“对象”页面。
- 在左侧导航栏,单击“概览”,进入“概览”页。
- 在概览页的“基础配置”区域下,单击“服务端加密”卡片,系统弹出“服务端加密”对话框。
- 单击按钮开启服务端加密。
- 加密模式选择“SSE-KMS”。
- 【可选,仅部分区域支持,例如华北-乌兰察布一】选择“加密算法”,在“AES256”、“SM4”中任选一种作为对象加密的算法。
- 选择“加密密钥类型”。此处选择“自定义密钥”或“共享密钥”。
当加密密钥类型选择“自定义密钥”或“共享密钥”时,支持配置“存储桶密钥”。
- 自定义密钥:通过单击“查看KMS密钥”进入密码安全中心页面创建自定义密钥,然后通过KMS密钥的下拉框选中您创建的KMS密钥。
- 共享密钥:输入共享密钥ID,您上传的对象将使用其他用户共享的密钥进行加密。获取共享密钥ID,具体请参见查看密钥。
- 打开存储桶密钥开关。
使用SSE-KMS的OBS存储桶密钥可减少对KMS的调用,减少请求KMS的流量费用,从而降低加密成本。
- 单击“确定”。
使用API
表1 支持配置桶密钥的API接口(桶级)
|
资源粒度 |
接口 |
相关参数 |
|
桶级 |
创建桶 |
请求头域和响应头域:
x-obs-server-side-encryption-bucket-key-enabled:桶密钥功能开关 |
|
获取桶元数据 |
响应头域:
x-obs-server-side-encryption-bucket-key-enabled:桶密钥功能开关 |
|
设置桶的加密配置 |
桶密钥配置位于请求body体中,配置BucketKeyEnabled和BucketKeyRotationPeriod参数,详见设置桶的加密配置。 |
|
获取桶的加密策略 |
桶密钥配置位于响应body体中,返回BucketKeyEnabled和BucketKeyRotationPeriod参数,详见设置桶的加密配置。 |
为对象配置存储桶密钥
OBS支持通过管理控制台、API方式配置存储桶密钥,不支持通过SDK、OBS Browser+、obsutil方式配置存储桶密钥。
使用OBS控制台
本节仅介绍为新上传的对象开启存储桶密钥。
- 在OBS管理控制台左侧导航栏选择“桶列表”。
- 在桶列表中,单击待操作的桶,进入“对象”页面。
- 单击“上传对象”,系统弹出“上传对象”对话框。
- 添加待上传的文件。
- 开启服务端加密开关。
- 加密模式选择“SSE-KMS”。如果桶已开启服务端加密且配置了存储桶密钥,可以选择“继承桶的加密配置”。
- 【可选,仅部分区域支持,例如华北-乌兰察布一】选择“加密算法”,在“AES256”、“SM4”中任选一种作为对象加密的算法。
- 选择“加密密钥类型”。此处选择“自定义密钥”或“共享密钥”。
当加密密钥类型选择“自定义密钥”或“共享密钥”时,支持配置“存储桶密钥”。
- 自定义密钥:通过单击“查看KMS密钥”进入密码安全中心页面创建自定义密钥,然后通过KMS密钥的下拉框选中您创建的KMS密钥。
- 共享密钥:输入共享密钥ID,您上传的对象将使用其他用户共享的密钥进行加密。获取共享密钥ID,具体请参见查看密钥。
- 打开存储桶密钥开关。
使用SSE-KMS的OBS存储桶密钥可减少对KMS的调用,减少请求KMS的流量费用,从而降低加密成本。
- 单击“确定”。
对象上传成功后,可在对象详情中查看对象的加密状态。
使用API
表2 支持配置桶密钥的API接口(对象级)
|
资源粒度 |
接口 |
相关参数 |
|
对象级 |
PUT上传对象 |
请求头域和响应头域:
x-obs-server-side-encryption-bucket-key-enabled:桶密钥功能开关 |
|
POST上传对象 |
|
初始化上传段任务 |
|
复制对象 |
|
上传段 |
响应头域:
x-obs-server-side-encryption-bucket-key-enabled:桶密钥功能开关 |
|
合并段 |
|
追加写对象 |
|
拷贝段 |
|
下载对象(包括范围下载) |