我有一个 AWS Lambda,用于使用 AWS 加密 SDK 加密 PII(个人识别信息),然后将其存储在 DynamoDB 中。
使用不同的 Lambda 从 DynamoDB 检索数据以显示给最终用户时,每次调用 KMS 的平均时间为 9.48 秒。这是大约 2k 个请求的平均值,请求范围从 ~14.5 秒到 ~5.1 秒。对 KMS 的调用是异步进行的。
从第一次 KMS 调用到最后一次调用的总时间约为 20 秒
我们已经考虑过使用数据密钥缓存,并阅读了这篇关于何时使用它的 AWS 博客文章。
我们的数据输入可能不够频繁,无法充分利用缓存,我正在尝试寻找其他方法来提高性能。
解密代码 Sippet:
async function decryptWithKeyring(keyring: KmsKeyringNode, ciphertext: string, context: {}) {
const b: Buffer = Buffer.from(ciphertext, 'base64');
const { plaintext, messageHeader } = await decrypt(keyring, b);
const { encryptionContext } = messageHeader;
Object.entries(context).forEach(([key, value]) => {
if (encryptionContext[key] !== value) {
throw new Error('Encryption Context does not match expected values');
}
});
return plaintext.toString();
}
加密片段:
async function encryptWithKeyring(keyring: KmsKeyringNode, value: any, context: any) {
const { result } = await encrypt(keyring, value, { encryptionContext: context });
return result.toString('base64');
}
转换为 base64 是为了便于在 DynamoDB 中存储。