Шифрование PII других данных в базе данных RDS с помощью AWS KMS

#amazon-web-services #encryption #amazon-rds #aws-secrets-manager #amazon-kms

Вопрос:

Мои потребности — Чтение/Запись Зашифрованных Данных

У меня есть программное приложение, которое может создавать веб-страницы и электронные письма, и мне нужно зашифровать содержимое, хранящееся в базе данных (PII плюс пользовательский контент, созданный финансовыми/медицинскими учреждениями).

Я хотел бы использовать AWS KMS/AWS Secrets Manager для управления hash , чтобы hash они были защищены, а ключи, которые их открывают hash , автоматически поворачивались и управлялись AWS. Я буду использовать это hash для шифрования/дешифрования данных. Требуется двустороннее шифрование.

Мой Вопрос

Похоже, есть два варианта, и я не уверен, какой из них предпочтительнее и какой правильный способ использовать AWS для этого:

Вариант 1 — Шифрование доступа к БД (Не предпочтительно)

Я мог бы хранить все PII и зашифрованные данные в отдельной базе данных RDS и просто получить доступ к API с помощью шифрования, предоставляемого AWS Secrets Manger и KMS. Это своего рода воняет, потому что зашифрованные данные относятся к таблицам в основной БД. Поэтому размещение этих данных в другом месте является громоздким в обслуживании.

Вариант 2 — Шифрование данных на уровне поля (!Предпочтительно!)

Я бы предпочел хранить зашифрованные данные непосредственно в БД. Например, таблица может содержать 7 незашифрованных столбцов, но content столбец содержит зашифрованные данные. Затем мне нужно придумать способ безопасного шифрования/дешифрования этого. Мне понадобился бы какой hash -то способ шифрования/дешифрования данных. Хранение данных непосредственно в PHP кажется плохой идеей, поэтому могу ли я использовать AWS KMS / Secrets Manager для этого?

План A — Я храню a hash в диспетчере секретов (зашифрованном с помощью KMS), поэтому, когда приложение хочет зашифровать/расшифровать содержимое, оно использует требуемого пользователя IAM для получения хэша из AWS Secrets Manager, шифрует/расшифровывает содержимое, а затем удаляет hash его из памяти.

План Б* — Я использую KMS напрямую (без менеджера секретов) и передаю зашифрованный/расшифрованный контент напрямую в KMS, и он шифрует/расшифровывает на лету, никогда не нужно раскрывать или отправлять ключ, который он использует для выполнения этих действий.


Еще раз спасибо, что нашли время

Комментарии:

1. Каков инвариант того, какие данные не могут касаться чего другого? Очевидным решением было бы переместить всю базу данных в базу данных RDS, где все это зашифровано с помощью KMS прозрачно для вас, но, похоже, вы этого не учли. Ваша основная база данных не может перейти в RDS?

2. Извините, чтобы прояснить, что все наши базы данных уже находятся в RDS в настоящее время. Таким образом, все зашифровано изначально. Проблема в том, что нам нужен зашифрованный контент (технически, я думаю, засоленный), поэтому он не читается человеком в БД. Таким образом, мы можем отслеживать запросы на расшифровку этой информации в CloudTrail. Таким образом, шифрование на уровне полей необходимо для столбцов базы данных во всей базе данных RDS.

3. Я вижу, что контрольный журнал доступа к полям-это то, что важно. Еще две части информации, которые мне нужны, чтобы порекомендовать курс: какой размер больше, чем может быть у отдельного поля? Вам нужно, чтобы доступ к отдельным полям отслеживался отдельно или на уровне столбца (например, пользователь A обращался к записям 1, 4 и 18 столбца » X «или достаточно, чтобы пользователь A обращался к элементам столбца» X » в защищенной таблице)?