华为云数据加密服务DEW实战:KMS密钥管理与信封加密

举报
yd_235631729 发表于 2026/11/03 16:48:38 2026/11/03
【摘要】 本文详解华为云数据加密服务DEW中KMS的使用:创建自定义主密钥CMK,讲清信封加密原理并用KooCLI体验数据密钥生成,演示OBS的SSE-KMS服务端加密与EVS云硬盘加密,介绍自动密钥轮换机制,最后总结密钥管理最佳实践。

一、背景:数据加密,难的是“管钥匙”

等保、密评以及各类行业合规要求,几乎都会提到“敏感数据加密存储”。加密算法本身并不难,AES-256 有现成的库可以调用;真正难的是密钥管理:密钥放在哪里?谁可以使用?怎么定期更换?密钥泄露或误删怎么办?如果把密钥写在配置文件或代码里,加密就形同虚设。

华为云 数据加密服务 DEW(Data Encryption Workshop,新版文档中也称“密码安全中心”) 中的 密钥管理服务 KMS(Key Management Service) 提供了托管式的密钥管理:密钥由经过安全认证的硬件安全模块(HSM)保护,所有密钥操作都有访问控制并可在云审计服务中追溯,并且与对象存储 OBS、云硬盘 EVS 等云服务深度集成。本文从创建用户主密钥开始,讲清信封加密原理,再演示 OBS 与 EVS 的 KMS 加密、密钥轮换,最后总结最佳实践。

二、核心概念

概念 说明
用户主密钥(CMK) KMS 中最高级别的密钥,用于加密数据密钥,密钥材料不出 KMS
默认密钥 云服务首次使用 KMS 加密时自动创建,别名以 /default 结尾,如 obs/default、evs/default
自定义密钥 用户自行创建的 CMK,可控制启用、禁用、轮换、授权和删除
数据加密密钥(DEK) 直接用来加密业务数据的密钥,由 CMK 派生并加密保护
信封加密 用 DEK 加密数据、用 CMK 加密 DEK 的分层加密方式

默认密钥与自定义密钥的区别:默认密钥省心,但不支持轮换等精细化管理;自定义密钥可以按业务、环境划分,单独授权、开启轮换,更适合生产环境。每个区域可创建的自定义密钥数量有配额限制(官方文档中为 100 个,以控制台实际显示为准)。

三、创建自定义密钥(CMK)

使用前请确认当前 IAM 用户具备 KMS 相关权限(例如 KMS CMKFullAccess)。

  1. 登录数据加密服务(DEW)控制台,在左上角选择区域或项目。注意:密钥只能在创建它的区域使用。
  2. 在左侧导航中进入“密钥管理”,单击右上角“创建密钥”。
  3. 填写参数:
    • 密钥名称:建议按“业务-环境-用途”命名,例如 order-prod-obs;
    • 密钥算法:对称加密场景选择 AES_256(部分区域支持国密 SM4);
    • 密钥用途:ENCRYPT_DECRYPT,创建后不可修改;
    • 托管类型:平台托管(由 KMS 生成密钥材料),或外部导入(BYOK);
    • 企业项目、标签按需填写。
  4. 单击“确定”,密钥创建后默认处于“启用”状态,在列表中可以查看密钥 ID,后续云服务和 API 都通过它引用该密钥。

四、信封加密:为什么不直接用主密钥加密数据

KMS 直接加解密的数据大小有限,而且每次都把整份数据通过网络发给 KMS,性能和成本都不可接受。华为云服务普遍采用信封加密:

加密流程:

  1. 调用 KMS 的“创建数据密钥”接口,指定 CMK,得到明文 DEK 和密文 DEK(密文 DEK 由 CMK 加密生成);
  2. 在本地用明文 DEK 加密业务数据,生成密文数据;
  3. 将密文 DEK 与密文数据一起存储,立即从内存中丢弃明文 DEK。

解密流程:

  1. 读取密文 DEK 和密文数据;
  2. 调用 KMS 的“解密数据密钥”接口,由同一个 CMK 解出明文 DEK;
  3. 在本地用明文 DEK 解密数据。

这样,大数据量的加解密都在本地完成,KMS 只负责保护“钥匙的钥匙”。需要特别注意:如果 CMK 被删除,所有用它保护的 DEK 都将无法解密,数据也就永久无法恢复。

使用华为云命令行工具 KooCLI(hcloud)可以快速体验(凭证通过 hcloud configure init 配置,切勿把 AK/SK 写进脚本):

# 1. 用指定 CMK 生成一个 256 位数据密钥,返回明文与密文
hcloud KMS CreateDatakey --cli-region="cn-north-4" \
  --key_id="<your-cmk-id>" --datakey_length=256

# 2. 需要解密时,用同一 CMK 解密密文数据密钥
hcloud KMS DecryptDatakey --cli-region="cn-north-4" \
  --key_id="<your-cmk-id>" --cipher_text="<cipher-datakey>" \
  --datakey_cipher_length=32

本地加密部分可以使用任意成熟的密码库,例如 Python 的 cryptography:

import os
from cryptography.hazmat.primitives.ciphers.aead import AESGCM

def encrypt_file(plain_dek: bytes, src: str, dst: str):
    nonce = os.urandom(12)
    data = open(src, "rb").read()
    ct = AESGCM(plain_dek).encrypt(nonce, data, None)
    with open(dst, "wb") as f:
        f.write(nonce + ct)   # 密文 DEK 另行与文件一起保存

具体参数名称以 KooCLI 和 DEW API 参考文档为准,生产环境建议直接使用华为云 SDK 并配合 IAM 委托或临时凭证。

五、使用 KMS 密钥加密 OBS 对象

OBS 支持 SSE-KMS、SSE-OBS、SSE-C 三种服务端加密方式,其中 SSE-KMS 由 KMS 提供和管理密钥,适合合规要求较高的场景。为已有桶开启桶级加密:

  1. 进入 OBS 控制台“桶列表”,单击目标桶,进入“概览”页;
  2. 在“基础配置”区域单击“服务端加密”,打开开关;
  3. 加密模式选择“SSE-KMS”,加密密钥类型选择“自定义密钥”,并在下拉框中选中第三节创建的密钥;
  4. 单击“确定”。

几点注意:

  • 桶加密只对开启之后上传的对象生效,不会改变已有对象的加密状态;
  • 自定义密钥必须与桶位于同一区域;
  • 访问 SSE-KMS 加密对象的 IAM 用户除了 OBS 权限,还需要 kms:dek:create、kms:dek:decrypt 等 KMS 权限,否则会上传或下载失败;
  • SSE-KMS 相关请求必须使用 HTTPS,且匿名用户无法访问加密对象;
  • 正在使用的密钥不能删除,否则加密对象将无法下载。

六、使用 KMS 密钥加密 EVS 云硬盘

EVS 加密使用 XTS-AES-256 算法,密钥由 KMS 提供:

  1. 首次使用时需要授权 EVS 访问 KMS,系统会创建名为 EVSAccessKMS 的委托,并生成默认密钥 evs/default;
  2. 创建云硬盘时,在“更多”中勾选“加密”,选择默认密钥或自己创建的自定义密钥;
  3. 将加密盘挂载到 ECS 后,加解密对操作系统和应用透明,使用方式与普通云硬盘一致。

需要注意:加密属性在云硬盘创建后不能修改,已有的非加密盘无法直接“开启加密”;系统盘加密则依赖于加密镜像。如需把存量数据迁移到加密盘,可以新建加密盘后在系统内拷贝数据。

七、密钥轮换

KMS 支持两种轮换方式:

  • 手动轮换:创建新的密钥 B,在云服务侧(如 OBS 桶加密配置)把密钥 A 替换为 B;
  • 自动轮换:在密钥详情页的“轮换策略”页签打开“密钥轮换”,设置轮换周期(30~365 天,默认 365 天)。

自动轮换只更换 CMK 的密钥材料,密钥 ID、别名、权限都不变,历史数据仍能用旧材料正常解密,因此对业务无感知。但它不会重新加密已有数据,也不会轮换已经生成的 DEK。另外,自动轮换仅支持处于“启用”状态、平台托管的对称自定义密钥,默认密钥不支持轮换;每次新增的密钥材料可能产生费用,官方推荐 90、180、270 或 365 天等周期。

八、最佳实践

  1. 按业务和环境拆分密钥:不同系统、生产与测试使用不同 CMK,缩小单个密钥的影响面。
  2. 最小权限授权:区分“密钥管理员”和“密钥使用者”,应用只授予加解密数据密钥所需的权限。
  3. 谨慎删除,善用禁用:删除是计划删除,可设置 7~1096 天的等待期,期间可以取消;不确定是否还在用的密钥先“禁用”观察。
  4. 开启自动轮换:对长期使用的对称密钥开启轮换,满足合规中“定期更换密钥”的要求。
  5. 审计密钥使用:结合云审计服务 CTS 记录密钥的创建、禁用、删除等操作,对计划删除类高危操作配置通知。
  6. 关注调用量与流控:KMS 接口有流控限制,每月有一定的免费 API 调用额度,超出部分按量计费;高并发场景可在安全可控的范围内短期复用数据密钥,避免每条数据都调用一次 KMS。

九、总结

数据加密服务 DEW 的密钥管理 KMS 解决了加密中最难的“管钥匙”问题:CMK 由 HSM 保护、不出 KMS;信封加密让大数据量的加解密在本地高效完成;OBS、EVS 等云服务只需在控制台选中密钥即可实现透明加密;自动轮换与云审计配合,满足合规对密钥生命周期的要求。落地时牢记三点:按业务拆分密钥并最小授权、绝不轻易删除在用密钥、尽早开启轮换和审计,就能以很低的改造成本为云上数据加上一把可靠的锁。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。