Cloud KMS to hostowana w chmurze usługa zarządzania kluczami, która umożliwia zarządzanie kluczami kryptograficznymi dla usług w chmurze w taki sam sposób jak w przypadku usług lokalnych. Obsługuje 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 zaszyfrowanymi danymi za pomocą Cloud KMS
- Wyświetlanie logów kontrolnych Cloud Storage
Pobierzesz skrócone dane z korpusu Enron, zaszyfrujesz je i wczytasz do Cloud Storage.
Dowiesz się
- Szyfrowanie danych i zarządzanie kluczami szyfrowania za pomocą usługi Key Management Service (KMS)
Będziesz używać
- Cloud KMS
- Cloud Storage
- Pakiet SDK Cloud
Samodzielne konfigurowanie środowiska
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:
Zapamiętaj identyfikator projektu, czyli unikalną nazwę we wszystkich projektach Google Cloud (podana powyżej nazwa jest już zajęta i nie będzie działać w Twoim przypadku). W dalszej części tego laboratorium będzie on nazywany PROJECT_ID
.
Następnie musisz włączyć płatności w konsoli Cloud, aby móc korzystać z zasobów Google Cloud.
Wykonanie tego samouczka nie powinno kosztować więcej niż kilka dolarów, ale może okazać się droższe, jeśli zdecydujesz się wykorzystać więcej zasobów lub pozostawisz je uruchomione (patrz sekcja „Czyszczenie” na końcu tego dokumentu).
Nowi użytkownicy Google Cloud Platform mogą skorzystać z bezpłatnego okresu próbnego, w którym mają do dyspozycji środki w wysokości 300 USD.
Uruchamianie Cloud Shell
W tym ćwiczeniu programistycznym użyjesz Cloud Shell, bezpłatnego zwirtualizowanego środowiska działającego w Google Cloud. W konsoli GCP kliknij ikonę Cloud Shell na pasku narzędzi w prawym górnym rogu:
Udostępnienie środowiska i połączenie się z nim może zająć tylko kilka chwil. Po zakończeniu powinno wyświetlić się coś takiego:
Ta maszyna wirtualna zawiera wszystkie potrzebne narzędzia dla programistów. Zawiera stały katalog domowy o pojemności 5 GB i działa w Google Cloud, co znacznie zwiększa wydajność sieci i uwierzytelniania. O ile nie podano inaczej, wszystkie polecenia uruchamiaj w tym shellu.
Aby przechowywać dane na potrzeby tego samouczka, utwórz zasobnik Cloud Storage. Ponieważ nazwy zasobników Cloud Storage muszą być globalnie unikalne, dodaj do nazwy zasobnika prefiks w postaci identyfikatora 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 zawierająca ponad 600 tys. e-maili wygenerowanych przez 158 pracowników Enron Corporation. Te dane zostały skopiowane do zasobnika Cloud Storage o nazwie gs://enron_emails/
.
Pobierz jeden z plików e-mail lokalnie:
$ gsutil cp gs://enron_emails/allen-p/inbox/1. . # <-- don't forget the dot!
Sprawdź pobrany plik, aby upewnić się, że jest to e-mail:
$ tail 1.
E-mail będzie zawierać wiadomość podobną do tej:
Attached is the Delta position for 1/18... # ...
Oprócz e-maili zawiera on też obrazy. W tym samouczku używamy zarówno e-maili w formacie zwykłego tekstu, jak i obrazów.
Zanim zaczniesz korzystać z Cloud KMS, musisz najpierw włączyć tę usługę w swoim projekcie. Wystarczy to zrobić raz na projekt. Aby włączyć usługę Cloud KMS, uruchom to polecenie:
$ gcloud services enable cloudkms.googleapis.com \ --project "${GOOGLE_CLOUD_PROJECT}"
Włączenie tej opcji może potrwać około minuty. Po zakończeniu polecenia pojawi się komunikat o powodzeniu.
Utwórz pęk kluczy Cloud KMS. W Cloud KMS pęk kluczy to logiczny zbiór kluczy kryptograficznych. Pęk kluczy zawiera metadane kluczy, takie jak ich lokalizacja. Utwórz pęk kluczy o nazwie my-keyring
w regionie global
:
$ gcloud kms keyrings create "my-keyring" \ --location "global"
Teraz w utworzonym pęku kluczy utwórz klucz kryptograficzny o nazwie enron-emails
i przeznaczeniu encryption
.
$ 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. Znajdziesz ją w menu głównym w sekcji Administracja.
W konsoli Cloud możesz wyświetlać pierścienie kluczy i klucze kryptograficzne oraz nimi zarządzać.
Zaszyfruj zawartość pobranego wcześniej e-maila za pomocą Cloud KMS. W tym samouczku używamy narzędzia wiersza poleceń gcloud
, ale dane możesz też szyfrować za pomocą Cloud KMS API.
$ gcloud kms encrypt \ --location "global" \ --keyring "my-keyring" \ --key "enron-emails" \ --plaintext-file ./1. \ --ciphertext-file ./1.enc
Spowoduje to utworzenie nowego pliku na dysku 1.enc
, który zawiera zaszyfrowane treści. Teraz, gdy dane są zaszyfrowane za pomocą Cloud KMS, prześlij zaszyfrowany plik do zasobnika Cloud Storage.
$ gsutil cp ./1.enc gs://${BUCKET_NAME}
Cloud KMS jest zintegrowana z usługą Google Cloud Identity and Access Management (IAM). Role Cloud KMS IAM dzielą się na 2 główne kategorie:
- Uprawnienie do zarządzania kluczami
- Uprawnienia do używania kluczy
Na przykład rola roles/cloudkms.admin
umożliwia posiadaczowi tworzenie pęków kluczy i kluczy kryptograficznych, konfigurowanie zasad IAM oraz wykonywanie operacji związanych z zarządzaniem. roles/cloudkms.cryptoKeyEncrypterDecrypter
umożliwia szyfrowanie i odszyfrowywanie danych, ale nie obejmuje uprawnień do zarządzania.
Role IAM są dziedziczone przez zasób nadrzędny. Jeśli ktoś ma rolę roles/cloudkms.admin
w projekcie Google Cloud, jest administratorem wszystkich kluczy w tym projekcie. Jeśli użytkownik ma ikonę roles/cloudkms.admin
na pęku kluczy, jest administratorem wszystkich kluczy w tym pęku. Jeśli użytkownik ma roles/cloudkms.admin
przy pojedynczym kluczu kryptograficznym, jest tylko administratorem tego klucza.
W tym ćwiczeniu użyj swojej tożsamości:
$ export MY_IDENTITY=you@gmail.com # or you@example.com
Przyznaj tożsamości uprawnienia do zarządzania zasobami Cloud KMS w pęku kluczy utworzonym powyżej za pomocą 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 jedynie do zarządzania nimi. Aby przyznać tożsamości możliwość szyfrowania i odszyfrowywania danych za pomocą enron-emails
klucza kryptograficznego:
$ gcloud kms keys add-iam-policy-binding "enron-emails" \ --location "global" \ --keyring "my-keyring" \ --member "user:${MY_IDENTITY}" \ --role "roles/cloudkms.cryptoKeyEncrypterDecrypter"
Pamiętaj, że pierwsze polecenie przyznaje rolę roles/cloudkms.admin
w przypadku pierścienia kluczy, co obejmuje wszystkie zasoby kluczy kryptograficznych podrzędnych. Drugie polecenie przyznaje uprawnienia roles/cloudkms.cryptoKeyEncrypterDecrypter
, ale tylko do klucza kryptograficznego enron-emails
.
Role możesz też wyświetlać i przypisywać w interfejsie Cloud KMS w konsoli Google Cloud.
Oprócz zaszyfrowania pojedynczego pliku możesz też zaszyfrować zbiór plików za pomocą skryptu. Ten przykład przesyła strumieniowo wszystkie e-maile dla użytkownika allen-p, szyfruje je i przesyła 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
Ta funkcja iteruje wszystkie pliki w danym katalogu w przykładowym zasobniku Cloud Storage, szyfruje je za pomocą Cloud KMS i przesyła do Twojego Google Cloud Storage.
Po zakończeniu działania skryptu możesz wyświetlić zaszyfrowane pliki w interfejsie Cloud Storage. Powinien pojawić się ekran podobny do tego:
Cloud Audit Logging ma 2 strumienie logów – logi aktywności administracyjnej i logi dostępu do danych – które są generowane przez usługi Google Cloud, aby pomóc Ci odpowiedzieć na pytanie „kto, co, gdzie i kiedy?” w Twoich projektach Google Cloud Platform.
Aby wyświetlić aktywność dowolnego zasobu w KMS, kliknij pęk kluczy i wybierz Wyświetl aktywność. Spowoduje to przejście do interfejsu aktywności w chmurze, w którym powinny być widoczne utworzenie i wszystkie modyfikacje wprowadzone w obszarze KeyRing.
Dane zostały zaszyfrowane za pomocą Cloud KMS i przechowywane w Cloud Storage.
Czyszczenie
Zwolnij zasoby utworzone w ramach tego samouczka. Usuń utworzony wcześniej zasobnik Cloud Storage:
$ gsutil rm -r gs://${BUCKET_NAME}
Zasobów Cloud KMS nie można usuwać. Możesz jednak usunąć 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ówiliśmy
- Zarządzanie uprawnieniami Cloud KMS za pomocą Cloud IAM
- Szyfrowanie danych za pomocą Cloud KMS
- Korzystanie z Cloud Storage do przechowywania zaszyfrowanych danych
- Wyświetlanie całej aktywności związanej z kluczami i pierścieniami kluczy za pomocą Cloud Audit Logging
Dalsze kroki
- Szyfrowanie kolumny w bazie danych, np. BigQuery, za pomocą Cloud KMS
- Ustawianie automatycznego harmonogramu rotacji kluczy Cloud KMS
Więcej informacji
- Więcej informacji o tym, jak wykonywać rotację kluczy szyfrowania
- Więcej informacji o szyfrowaniu kopertowym
- Więcej informacji o szyfrowaniu po stronie serwera w przypadku zasobników Cloud Storage
- Zadawaj pytania i znajduj odpowiedzi na Stack Overflow, używając tagu google-cloud-kms.
Licencja
To zadanie jest licencjonowane na podstawie ogólnej licencji Creative Commons Attribution 2.0.