Tengo un AWS Lambda que se utiliza para cifrar PII (información de identificación personal) mediante el SDK de cifrado de AWS antes de almacenarlo en DynamoDB.
Al recuperar los datos de DynamoDB usando un Lambda diferente para mostrar a los usuarios finales, el tiempo promedio para cada llamada a KMS es de 9,48 segundos. Esto se promedia en aproximadamente 2k solicitudes con solicitudes que van desde ~14,5 segundos a ~5,1 segundos. Las llamadas a KMS se realizan de forma asíncrona.
El tiempo total desde la primera llamada KMS hasta la última es de ~20 segundos
Hemos considerado usar el almacenamiento en caché de claves de datos y leímos esta publicación de blog de AWS sobre cuándo usarlo.
Es posible que la entrada de nuestros datos no sea lo suficientemente frecuente como para aprovechar al máximo el almacenamiento en caché, y estoy tratando de encontrar otras formas de mejorar el rendimiento.
Código de descifrado 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(); }Cifrar fragmento:
async function encryptWithKeyring(keyring: KmsKeyringNode, value: any, context: any) { const { result } = await encrypt(keyring, value, { encryptionContext: context }); return result.toString('base64'); }La conversión a base64 fue para facilitar el almacenamiento en DynamoDB.