Подробное знакомство с сервисом управления ключами AWS (KMS)

Подробное знакомство с сервисом управления ключами AWS (KMS)

20 октября 2022 г.

Если вы раскрываете свои секреты ветру, вы не должны обвинять ветер в том, что он раскрыл их деревьям.

Я создал эту статью в формате вопросов и ответов, чтобы сэкономить время читателей. Я начал с того, что такое KMS, и различных типов ключей, а также подробно рассказал о Envelope Encryption и его реализации

Что такое KMS?

  1. AWS KMS — это управляемая служба, которая позволяет создавать, управлять и контролировать ключи ШИФРОВАНИЯ и использует HSM для защиты безопасность ключей.
  2. Это многопользовательское оборудование.
  3. У него нет авансовых платежей и модель с оплатой по факту использования.
  4. Он поддерживает симметричные и асимметричные ключи
  5. По умолчанию AWS KMS создает материал ключа для ключа KMS.
  6. Вы не можете извлекать, экспортировать, просматривать или управлять этим ключевым материалом. Также вы не можете удалить этот ключевой материал; необходимо удалить ключ KMS.
  7. AWS KMS также поддерживает многорегиональные ключи, которые позволяют шифровать данные в одном регионе AWS и расшифровывать их в другом регионе AWS.

Ключи AWS KMS

  1. Ключи AWS KMS — это основной ресурс в AWS KMS.
  2. Вы можете использовать ключ KMS для шифрования, расшифровки и повторного шифрования данных. Он также может создавать ключи данных, которые можно использовать за пределами AWS KM.
  3. Ключ AWS KMS — это логическое представление ключа шифрования.
  4. Помимо материала ключа, используемого для шифрования и расшифровки данных, ключ KMS включает метаданные, такие как идентификатор ключа, дату создания, описание и состояние ключа.
  5. Ключи KMS создаются в AWS KMS. Симметричные ключи KMS и закрытые ключи асимметричных ключей KMS никогда не оставляют AWS KMS незашифрованными.
  6. По умолчанию AWS KMS создает материал ключа для ключа KMS. Вы не можете извлекать, экспортировать, просматривать или управлять этим ключевым материалом.
  7. Кроме того, вы не можете удалить этот ключевой материал; необходимо удалить ключ KMS.
  8. Однако вы можете импортировать свой ключевой материал в ключ KMS или создайте ключевой материал для ключа KMS в кластере AWS CloudHSM, связанном с Хранилище пользовательских ключей AWS KMS.
  9. AWS KMS также поддерживает многорегиональные ключи, которые позволяют шифровать данные в одном регионе AWS и расшифровывать их в другом регионе AWS.

Как создать CMK в KMS?

  1. Создание ключа KMS. Здесь мы приступаем к созданию ключей. Псевдоним помогает нам ссылаться на ключи, если у нас есть несколько ключей KMS.
  2. Создание администратора ключей. Мы определяем администраторов ключей с полными правами доступа к ключу.
  3. Создать разрешение на использование ключа. Мы определяем разрешение на использование ключа как тех, кто будет иметь доступ к использованию этого ключа для шифрования и дешифрования.
  4. Проверьте политику ключа. AWS создаст политику ключа. Соответственно, вы просто подтверждаете и нажимаете «Готово»

Как можно зашифровать данные с помощью CMK из KMS?

Шаг 1. Обычный текст в зашифрованный Base64 шифротекст

Шаг 2. Преобразование файла с кодировкой Base64 в файл с двоичной кодировкой

Секрет открытого текста предоставляется в качестве опции для команды KMS Encrypt через: ‘— открытый текстовый файл://secrets.json’

  1. KMS Encrypt шифрует открытый текст
  2. AWS KMS кодирует результат в Base64.
  3. Зашифрованный текст в кодировке Base64 возвращается в формате JSON. Обычно стандартная команда шифрования AWS просто возвращает результаты в формате JSON на терминал, и на этом процесс останавливается.
  4. Закодированный в Base64 зашифрованный текст, содержащийся в CiphertextBlob результатов JSON, декодируется в двоичный код. Двоичные результаты сохраняются в файл

Как расшифровать с помощью KMS?

Шаг 1. Расшифруйте зашифрованный текст и закодируйте его в Base 64

Шаг 2. Наконец, base64 декодируется в открытый текст

На следующей диаграмме показаны шаги:

Контекст шифрования

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

AWS KMS использует контекст шифрования в качестве дополнительных данных с проверкой подлинности (AAD) для поддержки шифрования с проверкой подлинности.

Вы не можете указать контекст шифрования в криптографической операции с асимметричным CMK. Стандартные алгоритмы асимметричного шифрования, которые использует AWS KMS, не поддерживают контекст шифрования.

Когда вы включаете контекст шифрования в запрос шифрования, он криптографически привязывается к зашифрованному тексту, поэтому для расшифровки (или расшифровки и повторного шифрования) данных требуется тот же контекст шифрования.

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

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

Ограничение KMS

С помощью CMK можно зашифровать не более 4 КБ данных. Поскольку данные передаются по сети, могут возникнуть проблемы с задержкой.

Шаги по использованию вашего КЛЮЧЕВОГО МАТЕРИАЛА в KMS

  1. Главный ключ клиента (CMK) содержит ключевой материал, используемый для шифрования и расшифровки данных.
  2. Когда мы создаем CMK, по умолчанию AWS создает ключевой материал для этого CMK. Однако у нас есть возможность создать CMK без ключевого материала, а затем импортировать наш ключевой материал в CMK.
  3. Ниже приведены основные шаги по использованию вашего ключевого материала для создания CMK:

а. Создайте «симметричный CMK» с НЕ ключевым материалом. Чтобы начать импортировать ключевой материал, сначала создайте симметричный CMK, источник которого ВНЕШНИЙ.

<цитата>

ПРИМЕЧАНИЕ. Вы НЕ МОЖЕТЕ использовать симметричный CMK для использования вашего ключевого материала

Это указывает на то, что материал ключа был создан вне AWS KMS, и запрещает AWS KMS создавать материал ключа для CMK. На следующем этапе вы импортируете ключевой материал в этот CMK.

б. Загрузите ключ упаковки и токен импорта. После выполнения шага а загрузите ключ упаковки и токен импорта. Эти элементы защищают импорт вашего ключевого материала в AWS KMS.

в. Зашифруйте материал ключа-оболочки. Используйте ключ-оболочку, который вы загрузили на шаге b, чтобы зашифровать материал ключа, созданный в вашей системе.

Если вы используете OPEN SSL, для создания ключевого материала будут использоваться следующие команды:

  1. OpenSSL ранжировал PlantextKeyMaterial.bin 32
  2. OpenSSL rsautl -encrypt -in PlantextKeyMaterial.bin -oaep -inkey wrappingKey_65803750–222b-413a-ac0d-3bab20a77630_04202211 -keyform DER -pubin -out EncryptedMaterial.bin

д. Импорт материала ключа. Загрузите зашифрованный материал ключа, созданный на шаге c, и токен импорта, загруженный на шаге c.

Что произойдет, если вы случайно удалите импортированный ключевой материал в CMK?

При импорте ключевого материала у вас есть возможность указать время истечения срока действия ключевого материала. Когда срок действия материала ключа истекает, AWS KMS удаляет материал ключа, и главный ключ клиента (CMK) становится непригодным для использования. Вы также можете удалить ключевой материал по требованию. Независимо от того, ждете ли вы истечения срока действия ключевого материала или удаляете его вручную, эффект будет одинаковым. AWS KMS удаляет материал ключа, состояние ключа CMK меняется на ожидающий импорт, и CMK становится непригодным для использования. Чтобы снова использовать CMK, необходимо повторно импортировать тот же ключевой материал.

Вы можете загрузить новый ключ-обертку и импортировать токен, а также импортировать исходный материал ключа в существующую CMK.

ПРИМЕЧАНИЕ. Вы НЕ МОЖЕТЕ использовать Исходный ключ упаковки и импортировать токен. Это должен быть НОВЫЙ ключ-оболочка и токен импорта.

Зачем вам нужно импортировать свой ключевой материал?

Докажите, что случайность соответствует вашим требованиям (Company Compliance)

Чтобы иметь возможность удалять ключевой материал без ожидания в течение 7–30 дней. Затем вы сможете импортировать их снова

Для обеспечения устойчивости к сбоям AWS за счет хранения ключей за пределами AWS

Удаление CMK

Удаление CMK в AWS KMS приведет к удалению ключевого материала и всех связанных метаданных, связанных с CMK. Этот процесс необратим.

После удаления CMK мы больше не можем расшифровывать данные, зашифрованные этим CMK.

Прежде чем это станет необратимым процессом, AWS KMS применяет период ожидания.

Период ожидания может составлять от минимум 7 дней до максимум 30 дней. По умолчанию 30.

В течение периода ожидания CMK нельзя использовать ни в одной криптографической операции.

Типы ключей KMS

  1. Управляемые AWS главные ключи клиентов (CMK)
  2. Управляемые клиентом главные ключи клиентов (CMK) в KMS (здесь ключевой материал сгенерирован AWS)
  3. Клиент создает ключи в KMS с помощью внешнего материала ключа
  4. CMK, принадлежащий AWS — ОБРАТИТЕ ВНИМАНИЕ, что это не то же самое, что ключи, управляемые AWS

Смена ключа KMS

В следующей таблице представлены основные различия и сходства между CMK, управляемыми AWS, и CMK, управляемыми клиентами.

Автоматическая смена ключей не поддерживается в следующих типах:

  1. Асимметричные CMK
  2. CMK в пользовательских хранилищах ключей
  3. CMK, в которые импортированы ключевые материалы
  4. Принадлежит AWS CMK

Контроль доступа к KMS

В KMS по умолчанию ко всем CMK привязана политика ключей.

Мы можем контролировать доступ к KMS CMK тремя способами:

i) Использование ключевых политик

ii) Использование IAM-политики в сочетании с ключевыми политиками

iii) Использование грантов KMS

Что такое грант KMS?

Грант похож на секретный токен. Он предоставляет временные и детальные разрешения (шифрование, дешифрование, повторное шифрование, описание ключа)

Грант программно делегирует использование вашего CMK пользователю в вашей учетной записи или другой учетной записи

<цитата>

Используя Grants, вы можете ТОЛЬКО РАЗРЕШИТЬ доступ, и ВЫ МОЖЕТЕ НЕ ВЫПОЛНЯТЬ ЯВНОЕ ЗАПРЕЩЕНИЕ

Create-grant — добавляет грант и определяет операции, которые могут выполнять получатели гранта

Политики пользовательских ключей для относительно статических разрешений или явного запрета

KMS через службу

Использование kms:ViaService для разрешения или запрета доступа к вашему CMK в зависимости от того, какая служба инициирует запрос, например. S3, RDS, EBS, Lambda, SQS, SSM и т. д.

Доступ между учетными записями KMS

Необходимо обновить 2 правила.

  1. Политика ключей KMS
  2. IAM-политика

Шаг 1. Включите доступ в политике ключей для учетной записи, которой принадлежит CMK

Шаг 2. Включите доступ к KMS в IAM-политике для внешней учетной записи

Давайте рассмотрим пример:

Шаг 1. Измените политику ключей для CMK в аккаунте 44445555666

Шаг 2. Добавьте IAM-политику для пользователей или ролей в аккаунте 111122223333

Хранилище пользовательских ключей KMS и хранилище ключей по умолчанию

Хранилище ключей KMS по умолчанию. Ключи KMS, управляемые AWS, которые создаются от вашего имени другими сервисами AWS для шифрования ваших данных, всегда генерируются и хранятся в хранилище ключей AWS KMS по умолчанию.

Хранилище пользовательских ключей KMS. Только ключи KMS, управляемые клиентом, могут храниться и управляться в хранилище пользовательских ключей AWS KMS.

Требуемая политика ключей для шифрования и дешифрования с открытым ключом

Запомните действия.

Хорошо, время для Envelope Encryption

Когда вы хотите зашифровать любые данные, размер которых превышает 4 КБ. тогда нам нужно использовать Envelope Encryption.

Envelope Encryption — это практика шифрования данных в виде открытого текста с помощью ключа данных и шифрования ключа данных с помощью другого ключа.

<цитата>

Это процесс, при котором вы шифруете данные открытого текста с помощью КЛЮЧА ДАННЫХ, а затем шифруете КЛЮЧ ДАННЫХ с помощью ГЛАВНОГО КЛЮЧА открытого текста верхнего уровня.

Шаги по созданию Envelope Encryption

Шаг 1. Пользователь создаст главный ключ клиента в KMS.

Шаг 2. Создайте ключ данных с помощью CMK. (Вызов API GenerateDataKey)

Шаг 3. GenerateDataKey возвращает следующие два ключа: Ключ открытых данных и Ключ зашифрованных данных

Шаг 4. Пользователь будет использовать Ключ данных открытого текста для шифрования фактических данных с помощью KMS, а после шифрования обязательно удалите Ключ данных открытого текста

Шаг 5. Теперь у нас есть зашифрованные данные, и если мы хотим расшифровать данные, нам нужно отправить Ключ зашифрованных данных в KMS, и он вернет Ключ данных в открытом виде< /сильный>

Шаг 6. Используя Ключ открытых данных и расшифрованные данные, мы можем расшифровать данные в KMS.

Важные моменты, которые следует помнить

  1. GenerateDataKey создаст следующие два ключа: Ключ открытых данных и Ключ зашифрованных данных
  2. Обычный текст будет зашифрован с помощью Ключа данных открытого текста
  3. После удаления Ключа данных открытого текста мы можем получить его с помощью Ключа зашифрованных данных. Нам нужно отправить его в KMS для расшифровки.
  4. Зашифрованные данные будут расшифрованы с помощью ключа открытых текстовых данных
  5. .

ПРИМЕЧАНИЕ. Рассмотрим сценарий, в котором вас просят указать, что API должен возвращать только зашифрованную копию ключа данных, которая будет использоваться позже для шифрования. Затем вам нужно будет выбрать **GenerateDataKeyWithoutPlaintext** Это вернет только Ключ зашифрованных данных

Кэширование ключа данных

Недавно AWS представила функцию «Кэширование ключа данных» в своем SDK AWS Encryption.

Кэширование ключей данных позволяет нам повторно использовать ключи данных, которые защищают наши данные, вместо создания новых ключей данных для каждой операции шифрования.

Это сопряжено с компромиссами в области безопасности, поскольку передовые методы шифрования не поощряют широкое повторное использование ключей данных. В AWS Encryption SDK по умолчанию для каждой выполняемой операции шифрования создается новый ключ данных.

Важные указания по кэшированию ключей данных

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

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

Миграция KMS

Ключи KMS зависят от региона. (БОЛЬШЕ НЕТ)

Мы не можем вызывать KMS CMK из одного региона для получения услуг в разных регионах.

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

Для разных регионов мы не можем использовать один и тот же ключ KMS в качестве моментального снимка. Вместо этого мы должны указать другой ключ KMS CMK, принадлежащий целевому региону.

<цитата>

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

Мы НЕ МОЖЕМ использовать KMS для создания открытого/закрытого ключа для входа в EC2.

Мы НЕ МОЖЕМ использовать пару ключей EC2 для шифрования томов EBS, мы должны использовать KMS или сторонние приложения/инструменты

KMS через конечную точку VPC

Вы можете напрямую подключаться к AWS KMS через частную конечную точку в своем облаке VPC вместо подключения через Интернет.

При использовании конечной точки VPC обмен данными между вашим VPC и AWS KMS осуществляется исключительно в сети AWS.

AWS KMS поддерживает виртуальное частное облако Amazon (Amazon VPC) конечные точки интерфейса на основе Частная ссылка AWS


Оригинал