У меня есть AWS лямбда, которая используется для шифрования PII (персональной идентификационной информации) с помощью AWS Encryption SDK перед сохранением в DynamoDB.
При извлечении данных из DynamoDB с использованием другой лямбды для отображения конечным пользователям среднее время каждого звонка в KMS составляет 9,48 с c. Это усредняется для примерно 2 000 запросов с запросами в диапазоне от ~ 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.
Карта трассировки XRay Выборка данных трассировки KMS