阿里云提供了多种静态数据的加密方式,如下表所示。
产品 | 加密方式 | |
---|---|---|
OSS | OSS 客户端加密 | OSS 服务器端加密 |
RDS | SSL 加密 | TDE 加密 |
ECS 云盘 | 您可以使用ECS云盘加密功能加密云盘上的数据。 |
OSS 数据加密
OSS 支持客户端加密和服务器端加密。
客户端加密是指将数据发送到OSS之前在用户本地进行加密,对于数据加密密钥的使用,目前支持如下两种方式:
- 使用KMS托管用户主密钥
- 使用用户自主管理密钥
使用KMS托管用户主密钥

- 上传对象。
通过使用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。所以,请务必妥善保管加密密钥,如果密钥丢失,将无法解密数据。
- 数据密钥由本地加密客户端随机生成。
OSS支持在服务器端对上传的数据进行加密编码(Server-Side Encryption):上传数据时,OSS对收到的用户数据进行加密编码,然后再将得到的加密数据持久化保存下来;下载数据时,OSS自动对保存的加密数据进行解密并把原始数据返回给用户,并在返回的HTTP请求Header中,声明该数据进行了服务器端加密。
OSS服务端加密主要应用场景
OSS通过服务端加密机制,提供静态数据保护。适合于对于文件存储有高安全性或者合规性要求的应用场景。例如,深度学习样本文件的存储、在线协作类文档数据的存储。针对不同的应用场景,OSS有如下两种服务端加密方式:
- 使用KMS托管密钥进行加解密(SSE-KMS)
上传文件时,可以使用指定的CMK ID或者默认KMS托管的CMK进行加解密操作。这种场景适合于大量的数据加解密。数据无需通过网络发送到KMS服务端进行加解密,这是一种低成本的加解密方式。注意 使用KMS密钥功能时会产生少量的KMS密钥API调用费用,费用详情请参考
KMS计费标准。 - 使用OSS完全托管加密(SSE-OSS)
基于OSS完全托管的加密方式,是Object的一种属性。您可以在上传object或修改object的meta信息时,在请求中携带
X-OSS-server-side-encrpytion
并指定其值为AES256,阿里云oss服务端加密使用AES256加密每个对象。OSS会为每个对象使用不同的密钥进行加密,作为额外的保护,它将使用定期轮转的主密钥对加密密钥本身进行加密。该方式适合于批量数据的加解密。
服务端加密选项
服务端加密-OSS完全托管
OSS的服务器端加密是Object的一个属性。用户创建一个Object的时候,只需要在Put Object的请求中携带x-oss-server-side-encryption
的HTTP Header,并指定其值为AES256
,即可以实现该Object的服务器端加密存储。
服务端加密-KMS托管主密钥
RDS 数据加密
RDS 支持 SSL 和 TDE 加密。
RDS提供MySQL和SQL Server的安全套接层协议(Secure Sockets Layer,简称SSL)。您可以使用RDS提供的服务器端的根证书来验证目标地址和端口的数据库服务是不是RDS提供的,从而可有效避免中间人攻击。除此之外,RDS还提供了服务器端SSL证书的启用和更新能力,以便用户按需更替SSL证书以保障安全性和有效性。
需要注意的是,虽然RDS提供了应用到数据库之间的连接加密功能,但是SSL需要应用开启服务器端验证才能正常运转。另外SSL也会带来额外的CPU开销,RDS实例的吞吐量和响应时间都会受到一定程度的影响,具体影响与您的连接次数和数据传输频度有关。
具体操作请参见设置SSL加密。
RDS提供MySQL和SQL Server的透明数据加密(Transparent Data Encryption,简称TDE)功能。MySQL版的TDE由阿里云自研,SQL Server版的TDE是基于SQL Server企业版的功能改造而来。
当RDS实例开启TDE功能后,您可以指定参与加密的数据库或者表。这些数据库或者表中的数据在写入到任何设备(磁盘、SSD、PCIe卡)或者服务(表格存储OSS、归档存储OAS)前都会进行加密,因此实例对应的数据文件和备份都是以密文形式存在的。
TDE加密采用国际流行的AES算法,秘钥长度为128比特。秘钥由KMS服务加密保存,RDS只在启动实例和迁移实例时动态读取一次秘钥。您可以自行通过KMS控制台对秘钥进行更替。
ECS 云盘加密
更多云盘加密的信息,请参见ECS云盘加密。