如果您使用的密钥类型不支持基于密钥版本的自动轮转,您可以基于使用场景,直接轮转使用的用户主密钥(CMK),通过人工的方式实现密钥轮转。由于这种方式建立在CMK之上,对于支持和不支持自动轮转的CMK而言,都可以作为特殊场景下的替代技术方案。
应用自定义加密场景
云上或者云下的应用可以调用KMS API实现自定义的数据加密,例如:
- 在将身份证号、信用卡号、家庭地址等敏感信息写入数据库之前进行加密。
- 在上传数据到OSS之前,进行客户端加密。
- 对包含敏感信息的应用配置文件、SSL私钥证书等服务配置文件进行加密。
您可以通过KMS提供的密钥别名功能,实现对应用中加密密钥的轮转。KMS的解密API不需要您提供密钥的ID或者别名。
这一抽象的轮转场景包括以下步骤:
- 初始设置
- 管理员创建CMK,假定ID为CMK-A。
- 管理员为上述CMK-A绑定别名alias/MyAppKey。
- 应用加密模块调用Encrypt接口时,在KeyId参数传入别名alias/MyAppKey:KMS发现alias/MyAppKey绑定了ID为CMK-A的主密钥,因此使用CMK-A执行加密。
- 应用解密模块调用Decrypt接口时,不传入KeyId参数,KMS使用实际用于加密数据的CMK执行解密。
- 人工轮转密钥
- 管理员创建新的CMK,假定ID为CMK-B。
- 管理员调用UpdateAlias,将别名alias/MyAppKey绑定到CMK-B。
- 应用加密模块调用Encrypt接口时,在KeyId参数传入别名alias/MyAppKey:KMS发现alias/MyAppKey绑定了ID为CMK-B的主密钥,因此使用CMK-B执行加密。
- 应用解密模块调用Decrypt接口时,不传入KeyId参数,KMS使用实际用于加密数据的CMK执行解密。
云产品服务端加密场景
云产品通过集成KMS API,可以对其管理的数据进行服务端加密。云产品服务端加密的场景,从密钥轮转角度可能出现以下情形:
- KMS侧配置自动轮转策略对云产品服务端加密产生效果
这种情形通常是因为云产品配置指定CMK加密之后,会持续性调用KMS的GenerateDataKey产生新的数据密钥,因此KMS产生新的主版本后,云产品会使用到新的主版本来加密新产生的数据密钥。这类云产品包括OSS等。对于这类情况,如果您希望具备自动轮转密钥的能力,则不能使用服务密钥,也不能使用自带密钥(您导入到KMS的外部密钥),因为它们并不支持密钥自动轮转。
- KMS侧配置自动轮转策略对云产品服务端加密不产生效果
这种情形通常是因为云产品配置指定CMK加密之后,只会对特定资源调用一次KMS的加密API,因此KMS即便轮转CMK产生新的密钥版本,云产品也无法使用。例如ECS对云盘的加密,只会一次性调用KMS的GenerateDataKey产生数据密钥用于卷加密,后续不会再对整个磁盘的卷加密密钥(Volume Encryption Key)进行更新。
如果您在第一种情形中使用了自带密钥或者希望对数据密钥也进行变更轮转,或者应用场景属于第二种情形,则可以通过变更配置、拷贝数据等方式达成密钥轮转的目的。这类解决方案依赖于云产品的特定功能,详情请参见相关云产品文档。