Как зашифровать данные в AWS RDS с помощью AWS KMS на уровне столбцов? - PullRequest
0 голосов
/ 02 октября 2019

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

Я бы также хотел зашифровать некоторые конкретные столбцы в базе данных. Например SSN. Я хотел бы хранить их в зашифрованном виде и расшифровать их для отображения в моем приложении. Более того, я хотел бы иметь индивидуальный ключ для каждого пользователя.

Основная проблема, которую я заметил, - это поворот ключа. Поскольку я думаю повернуть ключ для одного пользователя, я хотел бы сделать это в своем приложении:

  • получить текущий ключ шифрования от KMS
  • расшифровать все данные из RDSзашифрованный с помощью текущего ключа
  • сгенерировать новый ключ шифрования
  • снова зашифровать все и сохранить данные в RDS
  • сохранить новый ключ в KMS

Основная проблема здесь состоит в том, чтобы держать все в «транзакции» - «фиксировать», если все в порядке, и «откатывать» все, если что-то пошло не так.

Интересно, вращаются ли такие ключи дляШифрование на уровне столбцов может быть выполнено внутри инфраструктуры AWS автоматически. У вас есть идеи по этому поводу? Может быть, вы знаете какой-нибудь другой, лучший подход для такой ситуации?

Ответы [ 3 ]

1 голос
/ 02 октября 2019

Какую проблему вы решаете, имея индивидуальные ключи на пользователя? Парадигма KMS заключается в использовании политики для предоставления доступа к главному ключу клиента (CMK). Как указал Марк выше, количество клавиш ограничено.

Посмотрите на это прохождение

Внизу есть раздел о вращении клавиш. стратегии, которые могут помочь:

"Рекомендуемый подход к ручному повороту ключа заключается в использовании псевдонимов ключей в AWS KMS. Это позволяет пользователям всегда выбирать один и тот же псевдоним ключа при настройке баз данных, в то время как администратор ключей поворачивает базовый CMKСохраняя старый CMK, вы позволяете любым приложениям, которые в настоящее время используют этот ключ, по-прежнему дешифровать любые данные, которые были зашифрованы им, при условии, что политика ключей CMK все еще дает разрешение роли AWSServiceRoleForRDS в качестве ключевого пользователя. новые данные должны быть зашифрованы с помощью нового CMK. "

0 голосов
/ 04 октября 2019

Я бы также хотел зашифровать некоторые конкретные столбцы в базе данных.

Тогда я предполагаю, что вы будете использовать форму переноса ключей ( ключи данных )

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

Целью ротации ключей является ограничение количества данных, зашифрованных одним ключом, чтобы не перекодировать весь зашифрованный контент.

Предложение:

  • как уже связано - зашифруйте ваши данные, используя случайный (для строки?) Ключ данных.
  • зашифровывает ключ данных с помощью пользовательского ключа.
  • шифрование ключа пользователя с помощью ключа KMS

Поворот ключа (KMS) должен быть прозрачным для вас без каких-либо действий.

Если вы хотите вручную повернуть пользовательские ключи, вы можете, ИМХО, это не так критично - пользовательские ключи используются для шифрования ключей данных - относительно короткие данные с высокой энтропией.

ИМХО, действие по ротации должно быть создание нового ключа и сохранение старого в целях расшифровки, а не для повторного шифрования всех записей базы данных

0 голосов
/ 02 октября 2019

Используете ли вы что-то вроде AWS Cognito, чтобы дать каждому пользователю временные разрешения IAM при входе в систему? В противном случае я не вижу смысла давать каждому пользователю отдельный ключ KMS, так как вы предоставляете единому объекту (вашему серверу) доступ ко всем ключам. Также обратите внимание, что в учетной записи AWS существует ограничение в 10 000 ключей KMS. Это совсем немного, но если у вас есть веб-сайт, где кто-то может зарегистрироваться, вы можете столкнуться с этим пределом, если назначаете каждому пользователю ключ.

Как для автоматической обработки ротации ключей, так как вам нужно написатьпользовательский код для шифрования отдельных значений столбцов в вашей базе данных, вам также нужно будет написать код для выполнения всех этапов процесса ротации ключей. Вы можете создать это как функцию AWS Lambda и настроить ее на автоматический запуск, но это не то, что Amazon дает вам из коробки без какого-либо специального кода.

...