Начните работу с Cloud KMS

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

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

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

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

Вы узнаете

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

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

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

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

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

Скриншот от 2016-02-10 12:45:26.png

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

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

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

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

Запустить Cloud Shell

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

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

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

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

$ export BUCKET_NAME=${GOOGLE_CLOUD_PROJECT}_enron_emails

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

$ gsutil mb gs://${BUCKET_NAME}

Корпус Enron — это обширная база данных, содержащая более 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 связку ключей можно представить как логическую коллекцию криптографических ключей. Она содержит метаданные о ключах, например, их местоположение. Создайте связку ключей с именем 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"

Откройте веб-интерфейс Cryptographic Keys и просмотрите недавно созданные ресурсы. Это доступно в разделе «IAM и администрирование» главного меню.

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

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

$ 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). Роли IAM в Cloud KMS в основном делятся на две категории:

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

Например, роль 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 , шифрует их и загружает полученные зашифрованные значения в контейнер Cloud Storage:

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

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

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

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

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

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

Очистка

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

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

Ресурсы Cloud 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.