Симметричное шифрование данных
В этом разделе вы узнаете, как в KMS шифровать и расшифровывать данные небольшого размера (до 32 КБ) с помощью CLI, Terraform и API по схеме симметричного шифрования. Подробнее о возможных способах шифрования читайте в разделе Какой способ шифрования выбрать?
Перед началом работы
Если у вас еще нет интерфейса командной строки Yandex Cloud (CLI), установите и инициализируйте его.
Зашифруйте данные
Примечание
Изменения, вызванные eventually consistent операциями, становятся применимыми для шифрования с задержкой до трех часов.
Команда зашифрует открытый текст, переданный в файле --plaintext-file, и запишет полученный шифртекст в файл --ciphertext-file.
--id— идентификатор ключа KMS, должен быть указан один из флагов:--idили--name.--name— название ключа KMS, должен быть указан один из флагов:--idили--name.--version-id— (опционально) версия ключа KMS, которая будет использоваться для шифрования. По умолчанию используется основная.--plaintext-file— входной файл с открытым текстом.--aad-context-file— (опционально) входной файл с AAD-контекстом.--ciphertext-file— выходной файл с шифртекстом.
yc kms symmetric-crypto encrypt \
--id abj76v82fics******** \
--plaintext-file plaintext-file \
--ciphertext-file ciphertext-file
Terraform
Terraform распространяется под лицензией Business Source License
Подробную информацию о ресурсах провайдера смотрите в документации на сайте Terraform
Если у вас еще нет Terraform, установите его и настройте провайдер Yandex Cloud.
Чтобы зашифровать данные:
-
Опишите в конфигурационном файле параметры ресурса
yandex_kms_secret_ciphertextс указанием на ключ KMS в полеkey_id:resource "yandex_kms_secret_ciphertext" "password" { key_id = "<идентификатор_ключа>" aad_context = "additional authenticated data" plaintext = "strong password" }Где:
key_id— идентификатор ключа KMS.aad_context— (AAD-контекст).plaintext— строка, которую нужно зашифровать.
Важно
Использование
yandex_kms_secret_ciphertextпозволяет скрыть секреты при разворачивании инфраструктуры, но в общем случае указаниеplaintextиaad_contextв конфигурационном файле в открытом виде небезопасно. Секреты могут быть прочитаны из файла конфигурации, могут попасть в Terraform-state или могут быть прочитаны из логов выполнения.Более подробную информацию о параметрах ресурсов в Terraform см. в документации провайдера.
-
Проверьте конфигурацию командой:
terraform validateЕсли конфигурация является корректной, появится сообщение:
Success! The configuration is valid. -
Выполните команду:
terraform planВ терминале будет выведен список ресурсов с параметрами. На этом этапе изменения не будут внесены. Если в конфигурации есть ошибки, Terraform на них укажет.
-
Примените изменения конфигурации:
terraform apply -
Подтвердите изменения: введите в терминал слово
yesи нажмите Enter.После этого доступ к шифртексту можно получить через переменную
ciphertext, а к зашифрованным данным —plaintext.Для проверки вы можете добавить в файл конфигурации следующий код с выходной переменной
decrypted_pass.Внимание
Это небезопасно и может быть использовано только для тестирования.
output "decrypted_pass" { sensitive = true value = yandex_kms_secret_ciphertext.password.plaintext }После обновления конфигурации можно проверить зашифрованные данные командой:
terraform output decrypted_passРезультат:
"strong password"
Чтобы зашифровать данные, воспользуйтесь методом REST API encrypt для ресурса SymmetricCrypto или вызовом gRPC API SymmetricCryptoService/Encrypt.
О том, как шифровать и расшифровывать данные с помощью SDK Yandex Cloud читайте в разделе Шифрование данных с помощью SDK Yandex Cloud.
О том, как шифровать и расшифровывать данные с помощью AWS Encryption SDK
О том, как шифровать и расшифровывать данные с помощью Google Tink
Расшифруйте данные
Примечание
Изменения, вызванные eventually consistent операциями, становятся применимыми для расшифрования с задержкой до трех часов.
Команда расшифрует шифртекст, переданный в файле --ciphertext-file, и запишет полученный открытый текст в файл --plaintext-file:
--id— идентификатор ключа KMS, должен быть указан один из флагов:--idили--name.--name— название ключа KMS, должен быть указан один из флагов:--idили--name.--ciphertext-file— входной файл с шифртекстом.--aad-context-file— (опционально) входной файл с AAD-контекстом.--plaintext-file— выходной файл с открытым текстом.
yc kms symmetric-crypto decrypt \
--id abj76v82fics******** \
--ciphertext-file ciphertext-file \
--plaintext-file decrypted-file
Чтобы расшифровать данные, воспользуйтесь методом REST API decrypt для ресурса SymmetricCrypto или вызовом gRPC API SymmetricCryptoService/Decrypt.
О том, как шифровать и расшифровывать данные с помощью SDK Yandex Cloud читайте в разделе Шифрование данных с помощью SDK Yandex Cloud.
О том, как шифровать и расшифровывать данные с помощью AWS Encryption SDK
О том, как шифровать и расшифровывать данные с помощью Google Tink