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 zabezpieczonych sprzętowo. Z tego samouczka dowiesz się, jak szyfrować i odszyfrowywać dane za pomocą symetrycznych kluczy Cloud KMS.

Dowiesz się

  • 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 kryptograficzny 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_NJ9p2IIXFppYk8x3wyymZXavjglNLJJhuXieCem56H30hwXtd8PvXGpXJO9gEUDu3cZwci9Oe6PgnbNuSYlMyvbXF1JdQyiHoEgnhl4PlV_MFagm2ppzhueRkqX4eLjJllZco_2zCp0V0bpTupUSKji9KkQyWqj11pqit1K1faS1V6aFxLGQdkuzGp4rsQTan7F01iePL5DtqQ8-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 Cloud Console, 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 o wartości 300 USD.

Uruchom Cloud Shell

W tym ćwiczeniu 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 tej powłoce.

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ć tylko 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.

4. Tworzenie klucza KMS

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 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 na dysku w data.txt.enc. 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 gcloud wydrukowanie wyniku w terminalu.

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 rotować klucze 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 zaszyfrowania 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 CryptoKey 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!

Włączono interfejs Cloud KMS API, utworzono klucz szyfrowania symetrycznego oraz zaszyfrowano i odszyfrowano dane. 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 wyłączyć, a następnie 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.