阿里云提供了多种静态数据的加密方式,如下表所示。

产品 加密方式
OSS OSS 客户端加密 OSS 服务器端加密
RDS SSL 加密 TDE 加密
ECS 云盘 您可以使用ECS云盘加密功能加密云盘上的数据。

OSS 数据加密

OSS 支持客户端加密和服务器端加密。

OSS 客户端加密

客户端加密是指将数据发送到OSS之前在用户本地进行加密,对于数据加密密钥的使用,目前支持如下两种方式:

  • 使用KMS托管用户主密钥
  • 使用用户自主管理密钥

使用KMS托管用户主密钥

当使用KMS托管用户主密钥用于客户端数据加密时,无需向OSS加密客户端提供任何加密密钥。只需要在上传对象时指定KMS用户主密钥ID(也就是CMK ID)。其具体工作原理如下:

  1. 上传对象。

    通过使用CMK ID,客户端首先向KMS发送一个请求,申请1个用于加密对象的数据密钥(Data Key)。作为响应,KMS会返回一个随机生成的数据明文密钥(Data Key)以及一个数据密文密钥(Encrypted Data Key)。

  2. 本地加密数据。

    本地客户端接收到KMS返回的数据明文密钥以及数据密文密钥后,将使用数据明文密钥进行本地加密,并且将加密后的对象以及数据密文密钥上传至OSS;

  3. 下载对象。

    客户端首先会从OSS服务端下载加密的对象以及作为对象元数据存储的数据密文密钥。

  4. 解密数据。

    客户端将数据密文密钥以及CMK ID发送至KMS服务器。作为响应,KMS将使用指定的CMK解密,并且将数据明文密钥返回给本地加密客户端。

说明
  • 本地加密客户端为每一个上传的对象获取一个唯一的数据加密密钥。
  • 为了保证数据的安全性,建议CMK定期轮换或者更新。
  • 客户需要维护CMK ID与对象之间的映射关系。

使用用户自主管理密钥

使用用户自主管理密钥,需要用户自主生成并保管加密密钥。当用户本地客户端加密时,由用户自主上传加密密钥(对称加密密钥或者非对称加密密钥)至本地加密客户端。其具体加密过程如下:

  1. 上传对象。

    用户首先向本地加密客户端提供1个用户主密钥(对称密钥或者非对称密钥)。客户端只使用此主密钥加密其随机生成的数据密钥。该过程如下:

    1. OSS本地加密客户端在本地生成一个一次性的对称密钥,即数据密钥(Data Key)。它将用于加密单个对象(针对每个对象,客户端都会随生成1个数据密钥)。
    2. 客户端使用数据密钥加密对象。
    3. 客户端使用用户提供的主密钥来加密数据密钥。
    4. 客户端将加密的数据密钥(Encrypted Data Key)作为对象元数据的一部分上传至OSS。
  2. 下载对象。

    下载对象时,客户端首先从OSS下载加密的对象以及元数据。通过使用元数据中的材料,客户端将授权确定使用哪个主密钥来解密加密的数据密钥。客户端使用解密后的数据密钥来解密对象。

说明
  • OSS本地加密客户端不会将用户主密钥以及未加密的数据发送至OSS。所以,请务必妥善保管加密密钥,如果密钥丢失,将无法解密数据。
  • 数据密钥由本地加密客户端随机生成。
OSS 服务器端加密

OSS支持在服务器端对上传的数据进行加密编码(Server-Side Encryption):用户上传数据时,OSS对收到的用户数据进行加密编码,然后再将得到的加密数据持久化保存下来;用户下载数据时,OSS自动对保存的加密数据进行解密并把原始数据返回给用户,并在返回的HTTP请求Header中,声明该数据进行了服务器端加密。

OSS服务端加密主要应用场景

OSS通过服务端加密机制,提供静态数据保护。适合于对于文件存储有高安全性或者合规性要求的应用场景。例如,深度学习样本文件的存储、在线协作类文档数据的存储。针对不同的应用场景,OSS有如下几种服务端加密方式:

  • 使用KMS托管密钥进行加解密

    用户上传文件时,可以使用指定的CMK ID或者默认KMS托管的CMK进行加解密操作。这种场景适合于大量的数据加解密。用户数据无需通过网络发送到KMS服务端进行加解密,这是一种低成本的加解密方式。

  • 使用OSS完全托管加密

    基于OSS完全托管的加密方式,是Object的一种属性。用户创建Object时,只需在put object 请求中携带x-oss-server-side-encryption的HTTP Header,并指定其值为AES256,即可以实现该Object的服务器端加密存储。该方式适合于批量数据的加解密。

服务端加密选项

OSS服务端加密有以下选项,用户可根据需要(密钥管理策略)进行选择:

  • 使用由OSS完全托管的服务端加密功能:数据加密密钥的生成和管理,由OSS负责,并采用高强度、多因素的安全措施进行保护。数据加密的算法采用使用行业标准的强加密算法AES-256(即256位高级加密标准)。
  • 使用由KMS托管密钥的服务端加密功能:除了采用AES-256加密算法外,KMS负责保管用户主密钥CMK(对数据密钥进行加密的密钥),以及生成数据加密的密钥,通过信封加密机制,进一步防止未经授权的数据访问。其中,会涉及少量额外的KMS密钥API调用费用(参考:KMS计费标准)。
    说明 暂时只支持中国大陆区域、香港区域、新加坡区域、日本区域,其余区域会尽快开放。

服务端加密-OSS完全托管

OSS的服务器端加密是Object的一个属性。用户创建一个Object的时候,只需要在Put Object的请求中携带x-oss-server-side-encryption的HTTP Header,并指定其值为AES256,即可以实现该Object的服务器端加密存储。

以下操作支持在请求中携带这些HTTP Header:

  • PutObject:简单上传
  • CopyObject:复制Object
  • InitiateMultipartUpload:分片上传

服务端加密-KMS托管主密钥

当用户创建Object时,在请求中携带x-oss-server-side-encryption的HTTP Header,并指定其值为KMS,即可实现在服务端加密存储该Object(密钥管理使用KMS服务)。OSS通过KMS服务,采用信封加密机制、AES-256加密算法等强安全方法,对用户存储在OSS的对象进行加密保护。

KMS是阿里云提供的一款安全、易用的管理类服务。用户无需花费大量成本来保护密钥的保密性、完整性和可用性,借助密钥管理服务,用户可以安全、便捷的使用密钥,专注于开发加解密功能场景。用户可以通过KMS控制台中查看和管理KMS密钥。

以下操作支持在请求中携带这些HTTP Header

  • PutObject:简单上传
  • CopyObject:复制Object
  • InitiateMultipartUpload:分片上传
说明
  • 您需要先开通KMS服务,请参见KMS开通指南
  • 使用该模式,首次向某地域中的Bucket添加加密对象时,将自动为您在该地域创建一个默认KMS密钥(用作用户主密钥CMK)。此密钥将用于服务端加密(KMS模式)。
  • 您可以在KMS控制台查看该密钥信息,请参见KMS使用文档
  • 关于费用,使用“服务端加密-KMS托管主密钥”创建Object或下载Object时,可能会产生少许额外KMS使用费用,请参见KMS计费标准

RDS 数据加密

RDS 支持 SSL 和 TDE 加密。

SSL 加密

RDS提供MySQL和SQL Server的安全套接层协议(Secure Sockets Layer,简称SSL)。您可以使用RDS提供的服务器端的根证书来验证目标地址和端口的数据库服务是不是RDS提供的,从而可有效避免中间人攻击。除此之外,RDS还提供了服务器端SSL证书的启用和更新能力,以便用户按需更替SSL证书以保障安全性和有效性。

需要注意的是,虽然RDS提供了应用到数据库之间的连接加密功能,但是SSL需要应用开启服务器端验证才能正常运转。另外SSL也会带来额外的CPU开销,RDS实例的吞吐量和响应时间都会受到一定程度的影响,具体影响与您的连接次数和数据传输频度有关。

具体操作请参见设置SSL加密

TDE 加密

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 云盘加密功能能对云盘加密,为您提供了一种简单的安全的加密手段,能够对您新创建的云盘进行加密处理。您无需构建、维护和保护自己的密钥管理基础设施,您也无需更改任何已有的应用程序和运维流程,无需做额外的加解密操作,云盘加密功能对于您的业务是无感的。

加密解密的过程对于云盘的性能几乎没有衰减。关于性能测试方式,请参见 块存储性能

在创建加密云盘并将其挂载到 ECS 实例后,将对以下类型的数据进行加密:

  • 云盘中的数据
  • 云盘和实例间传输的数据(实例操作系统内数据不再加密)
  • 加密云盘创建的所有快照(加密快照)

ECS 云盘加密功能会为您处理密钥管理。每个新创建云盘都使用一个唯一的 256 位密钥(来自于用户主密钥)加密。此云盘的所有快照以及从这些快照创建的后续云盘也关联该密钥。这些密钥受阿里云密钥管理基础设施的保护(由密钥管理服务提供),这将实施强逻辑和物理安全控制以防止未经授权的访问。您的数据和关联的密钥使用行业标准的 AES-256 算法进行加密。

阿里云整体密钥管理基础设施符合(NIST) 800-57 中的建议,并使用了符合 (FIPS) 140-2 标准的密码算法。

每个阿里云 ECS 账号在每个地域都具有一个唯一的用户主密钥(CMK),该密钥与数据分开,存储在一个受严格的物理和逻辑安全控制保护的系统上。每个加密盘及其后续的快照都使用云盘粒度唯一的加密密钥(从该用户该地域的用户主密钥创建而来),会被该地域的用户主密钥(CMK)加密。云盘的加密密钥仅在您的 ECS 实例所在的宿主机的内存中使用,永远不会以明文形式存储在任何永久介质(如云盘)上。

更多云盘加密的信息,请参见ECS云盘加密