1. Omówienie
Cloud KMS to hostowana w chmurze usługa zarządzania kluczami, która umożliwia zarządzanie kluczami kryptograficznymi w usługach w chmurze tak samo jak lokalnie. Obejmuje obsługę szyfrowania, odszyfrowywania, podpisywania i weryfikacji przy użyciu różnych typów kluczy i źródeł, w tym Cloud HSM w przypadku kluczy obsługiwanych sprzętowo. Z tego samouczka dowiesz się, jak szyfrować i odszyfrowywać dane przy użyciu asymetrycznych kluczy Cloud KMS.
Zobacz,
- Jak włączyć interfejs Cloud KMS API
- Jak utworzyć pęk kluczy
- Jak utworzyć klucz kryptograficzny do szyfrowania/odszyfrowywania asymetrycznego
2. Konfiguracja i wymagania
Samodzielne konfigurowanie środowiska
- Zaloguj się w konsoli Google Cloud i utwórz nowy projekt lub wykorzystaj już istniejący. Jeśli nie masz jeszcze konta Gmail lub G Suite, musisz je utworzyć.
Zapamiętaj identyfikator projektu, unikalną nazwę we wszystkich projektach Google Cloud (powyższa nazwa jest już zajęta i nie będzie Ci odpowiadać). W dalszej części tego ćwiczenia w Codelabs będzie ona określana jako PROJECT_ID
.
- Następnie musisz włączyć płatności w Cloud Console, aby korzystać z zasobów Google Cloud.
Ukończenie tego ćwiczenia z programowania nie powinno kosztować zbyt wiele. Postępuj zgodnie z instrukcjami podanymi w sekcji „Czyszczenie” W tym samouczku znajdziesz wskazówki, jak wyłączyć zasoby, aby uniknąć naliczania opłat. Nowi użytkownicy Google Cloud mogą skorzystać z programu bezpłatnego okresu próbnego o wartości 300 USD.
Uruchamianie Cloud Shell
W tym ćwiczeniu w Codelabs wykorzystasz Cloud Shell – bezpłatne zwirtualizowane środowisko działające w Google Cloud. W konsoli GCP kliknij ikonę Cloud Shell na górnym pasku narzędzi:
Uzyskanie dostępu do środowiska i połączenie się z nim powinno zająć tylko kilka chwil. Po zakończeniu powinno pojawić się coś takiego:
Ta maszyna wirtualna ma wszystkie potrzebne narzędzia dla programistów. Zawiera stały katalog domowy o pojemności 5 GB i działa w Google Cloud, znacząco zwiększając wydajność sieci i uwierzytelnianie. Uruchom wszystkie polecenia z tej powłoki, chyba że otrzymasz inne instrukcje.
3. Włącz usługę Cloud KMS
Aby móc używać Cloud KMS, musisz najpierw włączyć tę usługę w swoim projekcie. Wystarczy to zrobić raz w przypadku każdego projektu. Aby włączyć usługę Cloud KMS, uruchom to polecenie:
$ gcloud services enable cloudkms.googleapis.com \ --project "${GOOGLE_CLOUD_PROJECT}"
Włączenie tej funkcji może potrwać około minuty. Po zakończeniu polecenia wskaże się jego powodzenie.
4. Utwórz klucz KMS
utworzyć pęk kluczy Cloud KMS; W Cloud KMS pęk kluczy to logiczny zbiór kluczy kryptograficznych. Pęk kluczy zawiera metadane dotyczące 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 utwórz klucz kryptograficzny o nazwie my-asymmetric-encryption-key
o celu asymmetric-encryption
w utworzonym właśnie pęku kluczy.
$ gcloud kms keys create "my-asymmetric-encryption-key" \ --location "global" \ --keyring "my-keyring" \ --purpose "asymmetric-encryption" \ --default-algorithm "rsa-decrypt-oaep-4096-sha512"
5. Zaszyfruj dane
W przypadku kluczy asymetrycznych Cloud KMS nie wykonuje szyfrowania. Zamiast tego zapewnia dostęp do klucza publicznego, a Ty szyfrujesz dane przy użyciu tego klucza publicznego za pomocą kryptografii klucza publicznego. Dzięki kluczom asymetrycznym szyfrowanie może być całkowicie offline i nie wymaga dostępu do Cloud KMS ani żadnych innych interfejsów API Google Cloud. Szyfrowanie odbywa się za pomocą narzędzia kryptograficznego, takiego jak openssl
, albo w języku programowania lub bibliotece, które obsługują kryptografię klucza publicznego.
Pobierz klucz publiczny z Cloud KMS:
$ gcloud kms keys versions get-public-key "1" \ --location "global" \ --keyring "my-keyring" \ --key "my-asymmetric-encryption-key" \ --output-file ./key.pub
Utwórz plik z danymi do zaszyfrowania i użyj narzędzia wiersza poleceń openssl
, by zaszyfrować dane w pliku:
$ echo "my-contents" > ./data.txt
$ openssl pkeyutl -encrypt -pubin \ -in ./data.txt \ -inkey ./key.pub \ -pkeyopt "rsa_padding_mode:oaep" \ -pkeyopt "rsa_oaep_md:sha512" \ -pkeyopt "rsa_mgf1_md:sha512" > ./data.txt.enc
Zaszyfrowane dane (znane też jako „tekst szyfrowany”) zostaną zapisane w data.txt.enc
na dysku. Po otwarciu pliku data.txt.enc
zauważysz, że zawiera on dziwne znaki niedrukowalne. Wynika to z faktu, że uzyskane dane mają format binarny.
Przechowywanie tekstu zaszyfrowanego w bazie danych lub przesyłanie go w ramach żądania HTTP może wymagać zakodowania danych. Najczęstszym mechanizmem kodowania w przypadku tekstu zaszyfrowanego jest base64.
Cloud KMS nie przechowuje żadnego z podanego przez Ciebie tekstu zwykłego. Musisz zapisać ten tekst szyfrowany w bezpiecznej lokalizacji, ponieważ będzie on potrzebny do pobrania wartości zwykłego tekstu.
6. Odszyfrowywanie danych
W przeciwieństwie do szyfrowania odszyfrowywanie danych zaszyfrowanych za pomocą asymetrycznego klucza Cloud KMS wymaga dostępu online do usługi Cloud KMS. Odszyfruj tekst szyfrowany z pliku za pomocą narzędzia wiersza poleceń gcloud
:
$ gcloud kms asymmetric-decrypt \ --location "global" \ --keyring "my-keyring" \ --key "my-asymmetric-encryption-key" \ --version "1" \ --plaintext-file - \ --ciphertext-file ./data.txt.enc
Narzędzie wiersza poleceń gcloud
odczytuje tekst zaszyfrowany z pliku i odszyfrowuje go przy użyciu Cloud KMS. Zwróć uwagę na to, że w tym przykładzie argument --plaintext-file
ma postać -
. Dzięki temu gcloud
wydrukuje wynik w terminalu.
Konsola wyświetli wartość my-contents
, która jest taka sama jak wartość w postaci zwykłego tekstu z pliku powyżej.
7. Gratulacje!
Udało Ci się włączyć interfejs Cloud KMS API, utworzyć asymetryczny klucz szyfrowania oraz zaszyfrować i odszyfrować dane. Cloud KMS to zaawansowana usługa, a szyfrowanie i odszyfrowywanie w jej działaniu nie jest niczym niezwykłym.
Czyszczenie danych
Po zakończeniu analizy rozważ usunięcie projektu.
- Otwórz konsolę Cloud Platform.
- Wybierz projekt, który chcesz wyłączyć, a potem kliknij „Usuń” na górze ekranu. Spowoduje to zaplanowanie usunięcia projektu.
Więcej informacji
Licencja
To zadanie jest licencjonowane na podstawie ogólnej licencji Creative Commons Attribution 2.0.