Szyfrowanie i odszyfrowywanie danych za pomocą Cloud KMS

1. Przegląd

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 szyfrować i odszyfrowywać dane za pomocą symetrycznych kluczy Cloud KMS.

You will learn

  • Jak włączyć Cloud KMS API
  • Jak utworzyć pęk kluczy Cloud KMS
  • Jak utworzyć klucz kryptograficzny Cloud KMS do szyfrowania i odszyfrowywania symetrycznego
  • Jak obracać symetryczny klucz CryptoKey Cloud KMS

2. Konfiguracja i wymagania

Samodzielne konfigurowanie środowiska

  1. Zaloguj się w konsoli Google Cloud i utwórz nowy projekt lub użyj istniejącego. (Jeśli nie masz jeszcze konta Gmail lub G Suite, musisz je utworzyć).

dMbN6g9RawQj_VXCSYpdYncY-DbaRzr2GbnwoV7jFf1u3avxJtmGPmKpMYgiaMH-qu80a_NJ9p2IIXFppYk8x3wyymZXavjglNLJJhuXieCem56H30hwXtd8PvXGpXJO9gEUDu3cZw

ci9Oe6PgnbNuSYlMyvbXF1JdQyiHoEgnhl4PlV_MFagm2ppzhueRkqX4eLjJllZco_2zCp0V0bpTupUSKji9KkQyWqj11pqit1K1faS1V6aFxLGQdkuzGp4rsQTan7F01iePL5DtqQ

8-tA_Lheyo8SscAVKrGii2coplQp2_D1Iosb2ViABY0UUO1A8cimXUu6Wf1R9zJIRExL5OB2j946aIiFtyKTzxDcNnuznmR45vZ2HMoK3o67jxuoUJCAnqvEX6NgPGFjCVNgASc-lg

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.

  1. Następnie musisz włączyć rozliczenia w konsoli Cloud, aby korzystać z zasobów Google Cloud.

Ukończenie tego laboratorium nie powinno wiązać się z dużymi kosztami, a nawet z żadnymi. Wykonaj instrukcje z sekcji „Czyszczenie”, w której znajdziesz informacje o tym, jak wyłączyć zasoby, aby uniknąć naliczenia opłat po zakończeniu tego samouczka. Nowi użytkownicy Google Cloud mogą skorzystać z programu bezpłatnego okresu próbnego, w którym mają do dyspozycji środki w wysokości 300 USD.

Uruchamianie Cloud Shell

W tym module użyjesz Cloud Shell, czyli 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:

vezHz_9nBUSt_0pD8eMHkzgHehRa83ILgMpcztEJtGZspECiZTk47O02PYk6Zp7jyStful3AIDEZU8qcCNbiXF4WcpkUdJi2LoUbxTWg4cZ4skDnvGKNywBZlDBzzWha111IZ1KqXQ

Uzyskanie dostępu do środowiska i połączenie się z nim powinno zająć tylko kilka chwil. Po zakończeniu powinno wyświetlić się coś takiego:

wQQCzLZ7_omk2cuoBaKVPnniKDFG6MsP8h2OA0j3Iw9LRSFQ9TkD6Ccq4dcUASPoD5UKe1Ur7bIgYn5gAh2r6BlQDnpFmgyAtv9x2D6ppXS0pfjfxViuEfoetgLvgVeduekc2hgU2Q

Ta maszyna wirtualna zawiera wszystkie potrzebne narzędzia dla programistów. Zawiera również stały katalog domowy o pojemności 5 GB i działa w Google Cloud, co znacznie zwiększa wydajność sieci i usprawnia proces uwierzytelniania. O ile nie podano inaczej, wszystkie polecenia uruchamiaj w tym shellu.

3. Włączanie usługi Cloud KMS

Zanim zaczniesz korzystać z Cloud KMS, musisz najpierw włączyć tę usługę w 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 opcji może potrwać około minuty. Po zakończeniu polecenie zgłosi powodzenie.

4. Tworzenie klucza KMS

Utwórz pęk kluczy Cloud KMS. W Cloud KMS pęk kluczy to logiczny zbiór kluczy kryptograficznych. Klucznik 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 my-symmetric-key i przeznaczeniu encryption.

$ gcloud kms keys create "my-symmetric-key" \
    --location "global" \
    --keyring "my-keyring" \
    --purpose "encryption"

5. Szyfrowanie danych

Utwórz plik z danymi do zaszyfrowania i użyj narzędzia wiersza poleceń gcloud, aby zaszyfrować dane w pliku:

$ echo "my-contents" > ./data.txt
$ gcloud kms encrypt \
    --location "global" \
    --keyring "my-keyring" \
    --key "my-symmetric-key" \
    --plaintext-file ./data.txt \
    --ciphertext-file ./data.txt.enc

Zaszyfrowane dane (zwane też „szyfrogramem”) są zapisywane w data.txt.enc na dysku. Jeśli otworzysz plik data.txt.enc, zauważysz, że zawiera on dziwne, niedrukowalne znaki. Dzieje się tak, ponieważ wynikowe dane są w formacie binarnym.

Podczas przechowywania tekstu zaszyfrowanego w bazie danych lub przesyłania go w ramach żądania HTTP może być konieczne zakodowanie danych. Popularnym mechanizmem kodowania jest base64.

Cloud KMS nie przechowuje żadnego z dostarczonych przez Ciebie tekstów jawnych. Musisz zapisać ten tekst szyfrowany w bezpiecznym miejscu, ponieważ będzie on potrzebny do pobrania wartości w formie tekstu jawnego.

6. Odszyfrowywanie danych

Odszyfruj tekst zaszyfrowany w pliku za pomocą narzędzia wiersza poleceń gcloud:

$ gcloud kms decrypt \
    --location "global" \
    --keyring "my-keyring" \
    --key "my-symmetric-key" \
    --plaintext-file - \
    --ciphertext-file ./data.txt.enc

Narzędzie wiersza poleceń gcloud odczytuje tekst zaszyfrowany z pliku i odszyfrowuje go za pomocą Cloud KMS. Zwróć uwagę, że w tym przykładzie argument --plaintext-file ma wartość -. To polecenie spowoduje wydrukowanie wyniku w terminalu.gcloud

Konsola wyświetli wartość my-contents, czyli tę samą wartość w postaci zwykłego tekstu z pliku powyżej.

7. Rotacja kluczy

W Cloud KMS klucz kryptograficzny to w rzeczywistości zbiór wersji klucza kryptograficznego. Możesz tworzyć nowe wersje klucza kryptograficznego, aby przeprowadzać rotację klucza. Cloud KMS może też automatycznie wykonywać rotację kluczy zgodnie z harmonogramem.

Aby ręcznie przeprowadzić rotację klucza, utwórz nową wersję klucza kryptograficznego i ustaw ją jako wersję podstawową:

$ gcloud kms keys versions create \
    --location "global" \
    --keyring "my-keyring" \
    --key "my-symmetric-key" \
    --primary

Wszystkie przyszłe żądania szyfrowania danych będą korzystać z tego nowego klucza. Starsze klucze są nadal dostępne do odszyfrowywania danych, które zostały wcześniej zaszyfrowane za ich pomocą. Cloud KMS automatycznie określa odpowiedni klucz odszyfrowywania na podstawie podanego tekstu zaszyfrowanego. Nie musisz określać, której wersji klucza kryptograficznego użyć do odszyfrowania.

Aby zapobiec odszyfrowywaniu w Cloud KMS wartości tekstu zaszyfrowanego, które zostały zaszyfrowane przy użyciu starszej wersji klucza kryptograficznego, możesz wyłączyć lub zniszczyć tę wersję klucza kryptograficznego. Wyłączenie jest operacją odwracalną, a zniszczenie jest nieodwracalne. Aby wyłączyć wersję:

$ gcloud kms keys versions disable "1" \
    --location "global" \
    --keyring "my-keyring" \
    --key "my-symmetric-key"

8. Gratulacje!

Interfejs Cloud KMS API został włączony, klucz szyfrowania symetrycznego został utworzony, a dane zostały zaszyfrowane i odszyfrowane. Cloud KMS to zaawansowana usługa, a szyfrowanie i odszyfrowywanie to tylko niektóre z jej funkcji.

Czyszczenie danych

Jeśli skończysz eksplorowanie, rozważ usunięcie projektu.

  • Otwórz konsolę Cloud Platform.
  • Wybierz projekt, który chcesz zamknąć, a potem kliknij „Usuń” u góry. Spowoduje to zaplanowanie usunięcia projektu.

Więcej informacji

Licencja

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