Шифрование и дешифрование данных с помощью Cloud KMS

1. Обзор

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

Вы узнаете

  • Как включить API Cloud KMS
  • Как создать связку ключей Cloud KMS
  • Как создать криптографический ключ Cloud KMS для симметричного шифрования/дешифрования
  • Как повернуть симметричный криптографический ключ Cloud KMS

2. Настройка и требования

Настройка среды для самостоятельного обучения

  1. Войдите в Cloud Console и создайте новый проект или используйте существующий. (Если у вас еще нет учетной записи Gmail или G Suite, вам необходимо ее создать .)

dMbN6g9RawQj_VXCSYpdYncY-DbaRzr2GbnwoV7jFf1u3avxJtmGPmKpMYgiaMH-qu80a_NJ9p2IIXFppYk8x3wyymZXavjglNLJJhuXieCem56H30hwXtd8PvXGpXJO9gEUDu3cZw

ci9Oe6PgnbNuSYlMyvbXF1JdQyiHoEgnhl4PlV_MFagm2ppzhueRkqX4eLjJllZco_2zCp0V0bpTupUSKji9KkQyWqj11pqit1K1faS1V6aFxLGQdkuzGp4rsQTan7F01iePL5DtqQ

8-tA_Lheyo8SscAVKrGii2coplQp2_D1Iosb2ViABY0UUO1A8cimXUu6Wf1R9zJIRExL5OB2j946aIiFtyKTzxDcNnuznmR45vZ2HMoK3o67jxuoUJCAnqvEX6NgPGFjCVNgASc-lg

Запомните идентификатор проекта (Project ID) — уникальное имя для всех проектов Google Cloud (указанное выше имя уже занято и вам не подойдёт, извините!). В дальнейшем в этом практическом занятии оно будет обозначаться как PROJECT_ID .

  1. Далее вам потребуется включить оплату в Cloud Console, чтобы использовать ресурсы Google Cloud.

Выполнение этого практического задания не должно стоить дорого, если вообще что-либо. Обязательно следуйте инструкциям в разделе «Очистка», где указано, как отключить ресурсы, чтобы избежать дополнительных расходов после завершения этого урока. Новые пользователи Google Cloud имеют право на бесплатную пробную версию стоимостью 300 долларов США .

Запустить Cloud Shell

В этом практическом задании вы будете использовать Cloud Shell — бесплатную виртуализированную среду, работающую в Google Cloud. В консоли GCP щелкните значок Cloud Shell на панели инструментов в правом верхнем углу:

vezHz_9nBUSt_0pD8eMHkzgHehRa83ILgMpcztEJtGZspECiZTk47O02PYk6Zp7jyStful3AIDEZU8qcCNbiXF4WcpkUdJi2LoUbxTWg4cZ4skDnvGKNywBZlDBzzWha111IZ1KqXQ

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

wQQCzLZ7_omk2cuoBaKVPnniKDFG6MsP8h2OA0j3Iw9LRSFQ9TkD6Ccq4dcUASPoD5UKe1Ur7bIgYn5gAh2r6BlQDnpFmgyAtv9x2D6ppXS0pfjfxViuEfoetgLvgVeduekc2hgU2Q

Эта виртуальная машина содержит все необходимые инструменты разработки. Она предоставляет постоянный домашний каталог размером 5 ГБ и работает в облаке Google, что значительно повышает производительность сети и аутентификацию. Если не указано иное, все команды следует выполнять из этой оболочки.

3. Включите облачную службу KMS.

Прежде чем использовать Cloud KMS, необходимо сначала включить эту службу в вашем проекте. Это нужно сделать только один раз для каждого проекта. Чтобы включить службу Cloud KMS, выполните следующую команду:

$ gcloud services enable cloudkms.googleapis.com \
    --project "${GOOGLE_CLOUD_PROJECT}"

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

4. Создайте ключ KMS.

Создайте связку ключей Cloud KMS. В Cloud KMS связка ключей — это логическая коллекция криптографических ключей. Связка ключей содержит метаданные о ключах, такие как их местоположение. Создайте связку ключей с именем my-keyring в global регионе:

$ gcloud kms keyrings create "my-keyring" \
    --location "global"

Теперь создайте криптографический ключ с именем my-symmetric-key , предназначенный encryption внутри только что созданного вами связки ключей.

$ gcloud kms keys create "my-symmetric-key" \
    --location "global" \
    --keyring "my-keyring" \
    --purpose "encryption"

5. Шифрование данных

Создайте файл с данными для шифрования и используйте инструмент командной строки gcloud для шифрования данных в файле:

$ echo "my-contents" > ./data.txt
$ gcloud kms encrypt \
    --location "global" \
    --keyring "my-keyring" \
    --key "my-symmetric-key" \
    --plaintext-file ./data.txt \
    --ciphertext-file ./data.txt.enc

Зашифрованные данные (также известные как «шифротекст») сохраняются на диске в файле data.txt.enc . Если вы откроете файл data.txt.enc , вы заметите в нем странные, непечатаемые символы. Это происходит потому, что полученные данные находятся в двоичном формате .

При хранении зашифрованного текста в базе данных или его передаче в составе HTTP-запроса может потребоваться кодирование данных. Распространенным механизмом кодирования является base64.

Cloud KMS не хранит предоставленный вами открытый текст. Вам необходимо сохранить этот зашифрованный текст в безопасном месте, поскольку он потребуется для получения значения открытого текста.

6. Расшифровка данных

Расшифруйте зашифрованный текст из файла с помощью инструмента командной строки gcloud :

$ gcloud kms decrypt \
    --location "global" \
    --keyring "my-keyring" \
    --key "my-symmetric-key" \
    --plaintext-file - \
    --ciphertext-file ./data.txt.enc

Инструмент командной строки gcloud считывает зашифрованный текст из файла и расшифровывает его с помощью Cloud KMS. Обратите внимание, что в этом примере аргумент --plaintext-file указан как - . Это указывает gcloud вывести результат в терминал.

В консоли будет выведено значение my-contents , которое представляет собой тот же текстовый результат, что и в файле выше.

7. Клавиши поворота

В Cloud KMS криптографический ключ фактически представляет собой набор версий криптографического ключа. Вы можете создавать новые версии криптографического ключа для выполнения ротации ключей . Cloud KMS также может автоматически менять ключи по расписанию .

Для ручной смены ключа создайте новую версию криптографического ключа и установите её в качестве основной версии:

$ gcloud kms keys versions create \
    --location "global" \
    --keyring "my-keyring" \
    --key "my-symmetric-key" \
    --primary

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

Чтобы предотвратить расшифровку зашифрованных данных, полученных с использованием более старой версии криптографического ключа, с помощью Cloud KMS, вы можете отключить или удалить эту версию криптографического ключа. Отключение является обратимой операцией, тогда как удаление — необратимой. Чтобы отключить версию:

$ gcloud kms keys versions disable "1" \
    --location "global" \
    --keyring "my-keyring" \
    --key "my-symmetric-key"

8. Поздравляем!

Вы активировали API Cloud KMS, создали симметричный ключ шифрования и зашифровали и расшифровали данные! Cloud KMS — мощный продукт, и шифрование/дешифрование — это лишь малая часть его возможностей.

Уборка

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

  • Перейдите в консоль облачной платформы.
  • Выберите проект, который хотите закрыть, затем нажмите кнопку «Удалить» вверху. Это запланирует удаление проекта.

Узнать больше

Лицензия

Данная работа распространяется под лицензией Creative Commons Attribution 2.0 Generic.