阿里云国际站的**密钥管理服务(KMS)**是保护敏感数据的核心安全服务。它通过托管、轮转和严格控制密钥的访问权限,帮助您的客户满足合规要求并有效保护静态数据和传输中的数据。
一、KMS 加密原理:信封加密(Envelope Encryption)
由于KMS直接加密大量数据的效率和成本较高,它主要采用“信封加密”机制。
1.数据密钥(Data Key):KMS生成一个数据密钥,用于加密您的敏感数据本身。
2.主密钥(Customer Master Key, CMK):您的CMK(由KMS保护或导入)则用于加密这个数据密钥。
3.存储:您的敏感数据被数据密钥加密后得到密文,同时数据密钥被CMK加密后得到密文密钥。最终,密文数据和密文密钥一同存储。
4.解密:应用需要解密数据时,首先将密文密钥发送给KMS,KMS使用CMK在安全硬件(HSM)中解密得到明文数据密钥,然后应用使用这个明文数据密钥在本地解密数据密文。
核心优势: 敏感数据无需传出客户环境(只传输数据密钥和密文密钥),同时最关键的主密钥(CMK)从未离开KMS的安全边界(HSM)。
二、KMS 加密敏感数据的方法和场景
阿里云KMS与各种云服务深度集成,提供了两种主要的加密模式:
1.服务端集成加密(最推荐)
(1)对象存储 OSS (Object Storage Service) 加密
在创建或管理OSS Bucket时,启用服务器端加密,选择KMS作为密钥源。
| 场景 | 配置方式 |
| 创建 Bucket | 在“创建Bucket”面板,设置“服务端加密方式”为 KMS,选择一个已创建的CMK ID。 |
| 已有 Bucket | 在OSS控制台,进入数据安全 > 服务器端加密,选择 KMS 并配置默认加密密钥。 |
| 效果 | 上传到该 Bucket 的所有数据(Object)都会使用选定的CMK进行信封加密。下载时,有权限的用户自动解密。 |
(2)云服务器 ECS/云盘加密
您可以在创建ECS实例或数据盘时,直接启用加密。
| 场景 | 配置方式 |
| 创建云盘/ECS | 在创建ECS实例或云盘的配置页面,勾选加密,然后选择一个用户主密钥或默认服务主密钥(Default Service CMK)。 |
| 效果 | 整个云盘(包括数据和元数据)在物理存储层被加密。只有拥有密钥权限的ECS实例才能正常启动和读写数据。 |
(3)云数据库 RDS/文件存储 NAS 等其他服务
RDS、NAS、MaxCompute、日志服务(SLS)等主流服务都支持直接集成KMS,通过设置**透明数据加密(TDE)**或类似的配置项,实现数据存储层的加密。
2. 客户端/应用级加密(适用于少量数据或自定义逻辑)
如果需要加密的数据量较少(如API Key、数据库连接字符串、SSL/TLS证书私钥等配置信息),或者需要定制加解密逻辑,可以使用KMS API。
(1)密钥准备
① 创建CMK: 在KMS控制台或通过API创建一个用户主密钥(CMK),设置其别名和权限策略。
② 授权: 配置RAM角色或RAM用户,赋予其对该CMK的kms:Encrypt(加密)和kms:Decrypt(解密)权限。
(2)数据加密 (Encrypt API)
① 您的应用程序调用KMS的 Encrypt API,将小于 4KB 的敏感明文数据和CMK ID一起发送给KMS。
② KMS使用CMK加密数据,返回密文数据。
③ 应用将密文存储在 ECS 本地、配置中心或数据库中。
(3)数据解密 (Decrypt API)
① 应用需要使用敏感数据时,从存储位置读取密文。
② 调用KMS的 Decrypt API,将密文发送给KMS。
③ KMS使用CMK解密密文,将明文返回给应用。
客户端加密的关键: 确保CMK的访问权限受到严格控制,并利用RAM角色与ECS实例绑定,避免在应用代码或配置文件中硬编码访问密钥(AccessKey)。
