Владелец клиента шифрования DynamoDB [1] здесь. :)
Как и во многих других случаях, какой вариант лучше для вас, зависит от вашего варианта использования и требований безопасности (или соответствия).
Если шифрование на стороне сервера удовлетворяет этим требованиям, то да, это самый простой ответ и потребует наименьшей сложности с вашей стороны. Вы не можете отключить шифрование на стороне сервера DynamoDB, но вам нужно решить, какой уровень контроля вы хотите над KMS CMK, который DynamoDB использует для защиты вашей таблицы [2].
Есть некоторые возможности, которые на стороне клиента шифрование предлагает то, что на стороне сервера нет. Некоторые сценарии ios, в которых шифрование на стороне клиента может помочь вам, включают:
- У вас есть требование безопасности или соответствия, что все данные должны быть зашифрованы локально, прежде чем они будут отправлены какой-либо службе.
- В вашей таблице есть элементы, которые необходимо зашифровать под разными мастер-ключами. Например, если у вас есть мультитенантная таблица и вы шифруете данные каждого клиента в соответствии с указанным клиентом c CMK.
- У вас разные требования безопасности для разных атрибутов элемента. Например, если у вас есть некоторые атрибуты, которые не являются секретными, а некоторые есть, и было бы полезно иметь возможность иметь некоторые части вашей службы или приложения, способные считывать несекретные атрибуты, но не секретные атрибуты. В этом сценарии вы можете настроить клиент шифрования DynamoDB только для подписи этих атрибутов, а не для их шифрования и подписи, что позволит вам сохранить проверку целостности элементов, оставив эти не секретные атрибуты доступными для чтения компонентам, которые не могут расшифровать секретные атрибуты.
Существует также некоторые расходы на шифрование на стороне клиента.
- Увеличена сложность кода. Если вы работаете в Java или Python, клиент шифрования DynamoDB может решить большую часть сложности для вас, но использовать его все же сложнее, чем не выполнять шифрование на стороне клиента.
- Увеличение KMS расходы (при условии, что вы используете KMS). Это можно уменьшить с помощью «самого последнего поставщика» [3]; ответ клиента шифрования DynamoDB на повторное использование ключа данных.
- Снижение видимости консоли. Что касается DynamoDB, если вы выполняете шифрование на стороне клиента, то ваши элементы - это просто данные, которые имеют необычно высокий процент двоичных атрибутов, поэтому консоль не может показать вам открытый текст ваших зашифрованных атрибутов на стороне клиента.
[1] https://docs.aws.amazon.com/dynamodb-encryption-client/latest/devguide/what-is-ddb-encrypt.html
[2] https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/EncryptionAtRest.html
[3] https://docs.aws.amazon.com/dynamodb-encryption-client/latest/devguide/most-recent-provider.html