首页 > 解决方案 > 如何提高 AWS 加密 SDK 在解密时的性能(响应时间)

问题描述

我有一个 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 中存储。

KMS Trace 数据的XRay Trace Map 采样

标签: amazon-web-servicesencryptionaws-lambda

解决方案


推荐阅读