Pierwsze kroki z Cloud KMS

Cloud KMS to hostowana w chmurze usługa zarządzania kluczami, która umożliwia zarządzanie kluczami kryptograficznymi usług w chmurze w taki sam sposób, jak lokalne. Obejmuje ona szyfrowanie, odszyfrowywanie, podpisywanie i weryfikację przy użyciu różnych typów i źródeł kluczy, w tym Cloud HSM w przypadku kluczy opartych na sprzęcie.

Z tego samouczka dowiesz się, jak korzystać z zaawansowanych funkcji interfejsów Cloud Security and Privacy API, takich jak:

  • Konfigurowanie bezpiecznego zasobnika Cloud Storage
  • Zarządzanie kluczami i szyfrowanymi danymi za pomocą Cloud KMS
  • Wyświetlanie logów kontrolnych Cloud Storage

Spowoduje to pobranie skróconych danych z korpusu Enron, zaszyfrowanie go i załadowanie w Cloud Storage.

Dowiesz się

  • Szyfrowanie danych i zarządzanie kluczami szyfrowania za pomocą usługi zarządzania kluczami (KMS)

Wykorzystasz:

  • Cloud KMS
  • Cloud Storage
  • Pakiet SDK Cloud

Konfiguracja środowiska we własnym tempie

Jeśli nie masz jeszcze konta Google (Gmail lub Google Apps), musisz je utworzyć. Zaloguj się w konsoli Google Cloud Platform (console.cloud.google.com) i utwórz nowy projekt:

Zrzut ekranu z 10 września 2016 r., 12:45:26.png

Zapamiętaj identyfikator projektu, unikalną nazwę we wszystkich projektach Google Cloud (powyższa nazwa została już użyta i nie będzie działać). W ćwiczeniach nazywamy je później PROJECT_ID.

Aby móc używać zasobów Google Cloud, musisz najpierw włączyć płatności w Cloud Console.

Ćwiczenia z programowania nie powinny kosztować więcej niż kilka dolarów, ale mogą być większe, jeśli zdecydujesz się wykorzystać więcej zasobów lub pozostawisz to uruchomione (zobacz sekcję „Czyszczenie” na końcu tego dokumentu).

Nowi użytkownicy Google Cloud Platform mogą skorzystać z bezpłatnej wersji próbnej o wartości 300 USD.

Uruchom Cloud Shell

W tym ćwiczeniu wykorzystasz Cloud Shell – bezpłatne wirtualne środowisko działające w Google Cloud. W konsoli GCP kliknij ikonę Cloud Shell na pasku narzędzi w prawym górnym rogu:

Skonfigurowanie i połączenie się ze środowiskiem powinno zająć tylko kilka minut. Po zakończeniu powinno wyświetlić się mniej więcej coś takiego:

Ta maszyna wirtualna jest wyposażona we wszystkie potrzebne narzędzia dla programistów. Oferuje trwały katalog domowy o pojemności 5 GB oraz działa w Google Cloud, co znacznie zwiększa wydajność sieci i uwierzytelnianie. O ile nie określono inaczej, uruchom wszystkie polecenia z tej powłoki.

Aby przechowywać dane dla tego samouczka, utwórz zasobnik Cloud Storage. Nazwy zasobników Cloud Storage muszą być unikatowe globalnie, dlatego na początku nazwy zasobnika umieść jego identyfikator projektu:

$ export BUCKET_NAME=${GOOGLE_CLOUD_PROJECT}_enron_emails

Następnie utwórz zasobnik:

$ gsutil mb gs://${BUCKET_NAME}

Enron Corpus to duża baza danych,która zawiera ponad 600 tysięcy e-maili wygenerowanych przez 158 pracowników Enron Corporation. Te dane zostały skopiowane do zasobnika Cloud Storage o nazwie gs://enron_emails/.

Pobierz lokalnie jeden z plików poczty e-mail:

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

Przejrzyj pobrany plik, aby się upewnić, że jest to e-mail:

$ tail 1.

E-mail będzie zawierać następujący komunikat:

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

Oprócz e-maili zasobnik zawiera też obrazy. Ten samouczek wykorzystuje e-maile i obrazy zawierające zwykły tekst.

Aby móc używać Cloud KMS, musisz najpierw włączyć tę usługę w swoim projekcie. Wystarczy to zrobić tylko raz dla każdego projektu. Aby włączyć usługę Cloud KMS, uruchom to polecenie:

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

Włączanie może potrwać do minuty. Po zakończeniu polecenia wyświetli ono komunikat o pomyślnym wykonaniu operacji.

Utwórz pęk kluczy Cloud KMS. W Cloud KMS pęk kluczy jest logiczną kolekcją kluczy kryptograficznych. Pęk kluczy zawiera metadane o kluczach, np. ich lokalizację. Utwórz pęk kluczy o nazwie my-keyring w regionie global:

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

Teraz utwórz utworzony wcześniej klucz kryptograficzny enron-emails o celu encryption w obrębie utworzonego właśnie pęku kluczy.

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

Otwórz interfejs internetowy kluczy kryptograficznych i wyświetl nowo utworzone zasoby. Ta funkcja jest dostępna w menu Administracja.

Możesz wyświetlać pęki kluczy i klucze kryptograficzne w Cloud Console oraz nimi zarządzać.

Zaszyfruj treść e-maila pobranego wcześniej za pomocą Cloud KMS. W tym samouczku używamy narzędzia wiersza poleceń gcloud, ale możesz też zaszyfrować dane przy użyciu interfejsu Cloud KMS API.

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

Spowoduje to utworzenie na dysku 1.enc nowego pliku zawierającego zaszyfrowaną zawartość pliku. Dane zostały zaszyfrowane za pomocą Cloud KMS, a potem prześlij zaszyfrowany plik do zasobnika Cloud Storage.

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

Usługa Cloud KMS jest zintegrowana z Google Cloud Identity and Access Management (IAM). Role uprawnień Cloud KMS są podzielone na 2 kategorie:

  • Uprawnienia do zarządzania kluczami
  • Uprawnienia do używania kluczy

Rola roles/cloudkms.admin umożliwia na przykład tworzenie pęków kluczy i kluczy kryptograficznych, ustawianie uprawnień oraz wykonywanie czynności związanych z zarządzaniem. roles/cloudkms.cryptoKeyEncrypterDecrypter przyznaje właścicielowi dane dotyczące szyfrowania i odszyfrowywania danych, ale nie obejmuje uprawnień do zarządzania.

Role uprawnień są dziedziczone przez ich zasoby nadrzędne. Jeśli użytkownik ma rolę roles/cloudkms.admin w projekcie Google Cloud, jest też administratorem wszystkich kluczy w tym projekcie. Jeśli użytkownik ma roles/cloudkms.admin w pęku kluczy, jest administratorem wszystkich kluczy w tym pęku. Jeśli dany użytkownik ma roles/cloudkms.admin na jednym kluczu kryptograficznym, jest tylko administratorem tego klucza.

W tym ćwiczeniu wykorzystaj swoją tożsamość:

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

Przypisz tożsamość do zarządzania zasobami Cloud KMS w utworzonym powyżej pęku kluczy przy użyciu narzędzia wiersza poleceń gcloud:

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

Rola roles/cloudkms.admin nie obejmuje uprawnień do używania kluczy, a tylko do zarządzania nimi. Aby przyznać swojej tożsamości możliwość szyfrowania i odszyfrowywania danych za pomocą klucza kryptograficznego enron-emails:

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

Pierwsze polecenie przypisuje rolę roles/cloudkms.admin do pęku kluczy, która obejmuje wszystkie podrzędne zasoby klucza kryptograficznego. Drugie polecenie przyznaje roles/cloudkms.cryptoKeyEncrypterDecrypter, ale tylko do klucza kryptograficznego enron-emails.

Możesz też wyświetlać i przypisywać role w interfejsie Cloud KMS w Cloud Console.

Oprócz szyfrowania pojedynczego pliku możesz też zaszyfrować kolekcję plików, używając skryptów. Ten przykład pokazuje wszystkie e-maile wysyłane do allen-p, szyfruje je i przesyła wynikowe zaszyfrowane wartości do zasobnika 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

Powoduje to iterację w przypadku wszystkich plików w podanym katalogu w przykładowym zasobniku Cloud Storage, szyfrowanie ich za pomocą Cloud KMS i przesyłanie do Google Cloud Storage.

Po zakończeniu działania skryptu możesz wyświetlać zaszyfrowane pliki w interfejsie Cloud Storage. Powinien pojawić się ekran podobny do tego:

Usługa Cloud Audit Logging ma 2 strumienie logów – logi aktywności administratora i logi dostępu do danych. Są one generowane przez usługi Google Cloud, aby ułatwić znalezienie odpowiedzi na pytania „kto, co, gdzie i kiedy?” w ramach projektów Google Cloud Platform.

Aby wyświetlić aktywność związaną z dowolnym zasobem w KMS, kliknij pęk kluczy i wybierz Wyświetl aktywność. Otworzy się interfejs aktywności w chmurze, w którym zobaczysz proces tworzenia i wprowadzania wszystkich zmian do pęku kluczy.

Zaszyfrowałeś dane przy użyciu Cloud KMS i przechowujesz zaszyfrowane dane w Cloud Storage.

Czyszczenie

Zwolnij zasoby utworzone w ramach tego samouczka. Usuń zasobnik Cloud Storage utworzony wcześniej:

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

Zasobów Cloud KMS nie można usuwać. Możesz jednak zniszczyć materiał klucza, aby nie można było go ponownie użyć:

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

Omówione zagadnienia

  • Zarządzanie uprawnieniami Cloud KMS za pomocą Cloud IAM
  • Szyfrowanie danych za pomocą Cloud KMS
  • Przechowywanie zaszyfrowanych danych w Cloud Storage
  • Używanie Cloud Audit Logging do wyświetlania całej aktywności kluczy i pęków kluczy

Dalsze kroki

  • Szyfrowanie kolumny w bazie danych takiej jak BigQuery za pomocą Cloud KMS
  • Ustaw harmonogram automatycznej rotacji kluczy Cloud KMS

Więcej informacji

Licencja

To zadanie jest licencjonowane na podstawie ogólnej licencji Creative Commons Attribution 2.0.