Начните работу с облачным KMS

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

В этом руководстве вы узнаете, как использовать расширенные функции API безопасности и конфиденциальности в облаке, в том числе:

  • Настройка безопасного сегмента облачного хранилища
  • Управление ключами и зашифрованными данными с помощью Cloud KMS
  • Просмотр журналов аудита Cloud Storage

Вы возьмете сокращенные данные из Enron Corpus, зашифруете их и загрузите в облачное хранилище.

Ты выучишь

  • Как шифровать данные и управлять ключами шифрования с помощью службы управления ключами (KMS)

Вы будете использовать

  • Облачный KMS
  • Облачное хранилище
  • Облачный SDK

Самостоятельная настройка среды

Если у вас еще нет учетной записи Google (Gmail или Google Apps), вы должны создать ее. Войдите в консоль Google Cloud Platform ( console.cloud.google.com ) и создайте новый проект:

Скриншот от 10 февраля 2016 г., 12:45:26.png

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

Затем вам нужно включить выставление счетов в облачной консоли, чтобы использовать ресурсы Google Cloud.

Прохождение этой кодовой лаборатории не должно стоить вам больше нескольких долларов, но может стоить больше, если вы решите использовать больше ресурсов или оставите их работающими (см. раздел «Очистка» в конце этого документа).

Новые пользователи Google Cloud Platform имеют право на бесплатную пробную версию стоимостью 300 долларов США .

Запустить облачную оболочку

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

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

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

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

$ export BUCKET_NAME=${GOOGLE_CLOUD_PROJECT}_enron_emails

Затем создайте ведро:

$ gsutil mb gs://${BUCKET_NAME}

Enron Corpus — это большая база данных, содержащая более 600 000 электронных писем, созданных 158 сотрудниками корпорации Enron. Эти данные были скопированы в корзину облачного хранилища с именем gs://enron_emails/ .

Загрузите один из файлов электронной почты локально:

$ gsutil cp gs://enron_emails/allen-p/inbox/1. . # <-- don't forget the dot!

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

$ tail 1.

Электронное письмо будет содержать сообщение вида:

Attached is the Delta position for 1/18...
# ...

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

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

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

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

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

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

Теперь создайте криптографический ключ с именем enron-emails с целевым encryption внутри только что созданного набора ключей.

$ gcloud kms keys create "enron-emails" \
    --location "global" \
    --keyring "my-keyring" \
    --purpose "encryption"

Откройте веб-интерфейс криптографических ключей и просмотрите только что созданные ресурсы. Это доступно в разделе IAM & Admin в главном меню.

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

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

$ gcloud kms encrypt \
    --location "global" \
    --keyring "my-keyring" \
    --key "enron-emails" \
    --plaintext-file ./1. \
    --ciphertext-file ./1.enc

Это создаст новый файл на диске 1.enc , который содержит зашифрованное содержимое файла. Теперь, когда данные зашифрованы с помощью Cloud KMS, загрузите зашифрованный файл в корзину Cloud Storage.

$ gsutil cp ./1.enc gs://${BUCKET_NAME}

Cloud KMS интегрирован с Google Cloud Identity and Access Management (IAM). Роли Cloud KMS IAM в основном делятся на две категории:

  • Разрешение на управление ключами
  • Разрешение на использование ключей

Например, roles/cloudkms.admin позволяет владельцу создавать связки ключей, криптографические ключи, устанавливать политики IAM и выполнять операции, связанные с управлением. roles/cloudkms.cryptoKeyEncrypterDecrypter предоставляет владельцу шифрование и расшифровку данных, но не включает разрешения на управление.

Роли IAM наследуются их родительским ресурсом. Если у кого-то есть roles/cloudkms.admin в проекте Google Cloud, он является администратором всех ключей в этом проекте. Если у него есть roles/cloudkms.admin в связке ключей, он является администратором всех ключей в этой связке ключей. Если у них есть roles/cloudkms.admin на одном криптографическом ключе, они являются только администраторами этого ключа.

Для этого упражнения используйте свою личность:

$ export MY_IDENTITY=you@gmail.com # or you@example.com

Назначьте удостоверению возможность управлять ресурсами Cloud KMS в связке ключей, созданной выше, с помощью инструмента командной строки gcloud :

$ gcloud kms keyrings add-iam-policy-binding "my-keyring" \
    --location "global" \
    --member "user:${MY_IDENTITY}" \
    --role "roles/cloudkms.admin"

roles/cloudkms.admin не включает разрешение на использование ключей, только на управление ими. Чтобы предоставить вашей личности возможность шифровать и расшифровывать данные с помощью криптографического ключа enron-emails :

$ gcloud kms keys add-iam-policy-binding "enron-emails" \
    --location "global" \
    --keyring "my-keyring" \
    --member "user:${MY_IDENTITY}" \
    --role "roles/cloudkms.cryptoKeyEncrypterDecrypter"

Обратите внимание, что первая команда предоставляет roles/cloudkms.admin в связке ключей, которая будет включать любые дочерние ресурсы криптографического ключа. Вторая команда предоставляет roles/cloudkms.cryptoKeyEncrypterDecrypter , но только для криптографического ключа enron-emails .

Вы также можете просматривать и назначать роли в пользовательском интерфейсе Cloud KMS в Cloud Console .

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

DIR="gs://enron_emails/allen-p"
for file in $(gsutil ls ${DIR}/**); do
  ENC_NAME="$(basename ${file}).enc"
  gsutil cat ${file} \
  | \

  gcloud kms encrypt \
    --location "global" \
    --keyring "my-keyring" \
    --key "enron-emails" \
    --plaintext-file - \
    --ciphertext-file - \
    | \

    gsutil -q cp - gs://${BUCKET_NAME}/${ENC_NAME}
    echo "Copied ${ENC_NAME}"
done

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

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

В журнале облачного аудита есть два потока журналов — журналы действий администратора и журналы доступа к данным, которые генерируются облачными службами Google, чтобы помочь вам ответить на вопрос «кто, что, где и когда?» в ваших проектах Google Cloud Platform.

Чтобы просмотреть активность любого ресурса в KMS, щелкните кольцо ключей и выберите « Просмотреть активность ». Это приведет вас к пользовательскому интерфейсу Cloud Activity, где вы должны увидеть создание и все изменения, внесенные в KeyRing.

Вы успешно зашифровали данные с помощью Cloud KMS и сохранили зашифрованные данные в Cloud Storage.

Очистка

Освободите ресурсы, созданные во время этого руководства. Удалите созданную ранее корзину Cloud Storage:

$ gsutil rm -r gs://${BUCKET_NAME}

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

$ gcloud kms keys versions destroy "1" \
    --location "global" \
    --key "enron-emails" \
    --keyring "my-keyring"

Мы рассмотрели

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

Следующие шаги

  • Используйте Cloud KMS для шифрования столбца в базе данных, такой как BigQuery.
  • Установите расписание автоматической ротации ключей Cloud KMS.

Учить больше

Лицензия

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