客户端加密
数据保护是指数据传输(上传数据至OSS、从OSS下载数据)过程中和处于静止状态(数据存储在OSS数据中心磁盘)期间保护数据。传输中的数据可以通过SSL或者客户端加密进行保护。静态数据可以通过以下方式进行保护:
服务器端加密
OSS将数据保存到数据中心的磁盘之前进行加密,并且在下载对象时自动进行解密。客户端加密
可以使用客户端加密SDK,在本地进行数据加密,并将加密后的数据上传到OSS。在这种场景下,用户需要管理加密过程以及加密密钥。说明:目前只有Python SDK支持客户端加密。代码示例请参见Python SDK客户端加密。
采用客户端加密SDK保护数据
客户端加密是指将数据发送到OSS之前在用户本地进行加密,对于数据加密密钥的使用,目前支持如下两种方式:
- 使用KMS托管用户主密钥
- 使用用户自主管理密钥
使用KMS托管用户主密钥
当使用KMS托管用户主密钥用于客户端数据加密时,无需向OSS加密客户端提供任何加密密钥。只需要在上传对象时指定KMS用户主密钥ID(也就是CMK ID)。其具体工作原理如下图所示。
- 上传对象。
通过使用CMK ID,客户端首先向KMS发送一个请求,申请1个用于加密对象的数据密钥(Data Key)。作为响应,KMS会返回一个随机生成的数据明文密钥(Data Key)以及一个数据密文密钥(Encrypted Data Key)。 - 本地加密数据。
本地客户端接收到KMS返回的数据明文密钥以及数据密文密钥后,将使用数据明文密钥进行本地加密,并且将加密后的对象以及数据密文密钥上传至OSS。 - 下载对象。
客户端首先会从OSS服务端下载加密的对象以及作为对象元数据存储的数据密文密钥。 - 解密数据。
客户端将数据密文密钥以及CMK ID发送至KMS服务器。作为响应,KMS将使用指定的CMK解密,并且将数据明文密钥返回给本地加密客户端。
注意:
- 本地加密客户端为每一个上传的对象获取一个唯一的数据加密密钥。
- 为了保证数据的安全性,建议CMK定期轮换或者更新。
- 客户需要维护CMK ID与对象之间的映射关系。
使用用户自主管理密钥
使用用户自主管理密钥,需要用户自主生成并保管加密密钥。当用户本地客户端加密时,由用户自主上传加密密钥(对称加密密钥或者非对称加密密钥)至本地加密客户端。其具体加密过程如下图所示。
上传对象。
用户首先向本地加密客户端提供1个用户主密钥(对称密钥或者非对称密钥)。客户端只使用此主密钥加密其随机生成的数据密钥。该过程如下:- OSS本地加密客户端在本地生成一个一次性的对称密钥,即数据密钥(Data Key)。它将用于加密单个对象(针对每个对象,客户端都会随机生成1个数据密钥)。
- 客户端使用数据密钥加密对象。
- 客户端使用用户提供的主密钥来加密数据密钥。
- 客户端将加密的数据密钥(Encrypted Data Key)作为对象元数据的一部分上传至OSS。
下载对象。
下载对象时,客户端首先从OSS下载加密的对象以及元数据。通过使用元数据中的材料,客户端将授权确定使用哪个主密钥来解密加密的数据密钥。客户端使用解密后的数据密钥来解密对象。
注意:
- OSS本地加密客户端不会将用户主密钥以及未加密的数据发送至OSS。所以,请务必妥善保管加密密钥,如果密钥丢失,将无法解密数据。
- 数据密钥由本地加密客户端随机生成。
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。
评论