Data Key Caching
有些场景下,需要大量使用KMS,例如要加密成千上万行记录,如果每行记录都要调用KMS API会非常耗时,而且产生大量调用花费过高;
在这种场景下,就出现了Data Key Caching
:
- 以前每次调用API时都会生成新的data key,现在在SDK里面可以重用之前生成的data key。
- 但这样带来了安全风险,因为所有鸡蛋都在一个篮子里,很多行数据都是使用一个data key。
工作流程如下:
- 应用程序首次需要加密数据时,向 KMS 请求生成数据密钥
- KMS 返回明文和密文形式的数据密钥
- 应用程序将这对密钥存储在本地缓存中
- 后续加密操作直接使用缓存中的明文密钥,无需再调用 KMS
- 缓存中的密钥根据预设条件(时间、使用次数等)自动失效和更新
例如下面,每调用100次才生成1个新的data key,这样就将请求次数降低了100倍。

使用数据密钥缓存时,可配置多种安全参数来平衡性能和安全性:
- 最大密钥生存期限:设置密钥在缓存中存留的最大时间(如 60 秒)
- 最大使用次数:限制单个缓存密钥可用于加密的最大数据项数量
- 最大字节数:限制使用单个缓存密钥可加密的最大数据量
总结
Data key caching
适用于高并发、对延迟要求低的场景。在使用的时候需要权衡安全和性能之间的平衡,不适合要求极高安全性的场景(如每次操作必须使用不同密钥)