Zabezpieczanie ruchu przychodzącego w Cloud Run

1. Omówienie

W tym laboratorium dowiesz się, jak ograniczyć dostęp do usługi Cloud Run i zezwalać tylko na żądania z zadań działających lokalnie lub w sieci VPC projektu. Dostępne są 2 poziomy kontroli dostępu: ustawienia ingress i zasady zarządzania tożsamościami i dostępem (IAM).

5aed47d10595c878.png

Ustawienia ruchu przychodzącego

Ustawienia Ingress umożliwiają filtrowanie żądań na podstawie ich pochodzenia z sieci (wewnętrznej lub zewnętrznej). Domyślnie wszystkie żądania są przepuszczane, w tym te z publicznego internetu.

Zasady dotyczące uprawnień

Zasady uprawnień umożliwiają filtrowanie żądań na podstawie tożsamości nadawcy i są często używane do uwierzytelniania żądań między usługami.

Z tego modułu dowiesz się, jak i kiedy używać ustawień ingress.

Hosty lokalne łączą się przez VPC

W tym module przećwiczymy symulowanie obciążenia lokalnego. Aby połączyć hosta lokalnego z Cloud Run, skonfiguruj usługę Private Google Access dla hostów lokalnych. Obejmuje to skonfigurowanie bramy Cloud VPN w sieci VPC, jak pokazano poniżej.

31611f6a2f12fd0c.png

Symulowanie obciążenia lokalnego za pomocą serwera przeskoku w VPC

W tym module udajemy wysyłanie żądań z hosta lokalnego, wysyłając żądania z maszyny wirtualnej Compute Engine w VPC, jak pokazano na ilustracji.

aebf22740c7a84f0.png

Maszyna wirtualna Compute Engine, której użyjesz jako serwera przeskakiwania, ma ten sam punkt początkowy sieci co brama Cloud VPN, dlatego możesz jej użyć do symulowania wysyłania żądań z lokalnego środowiska pracy.

2. Konfiguracja i wymagania

Konfigurowanie środowiska we własnym tempie

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

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • Nazwa projektu to wyświetlana nazwa uczestników tego projektu. Jest to ciąg znaków, którego nie używają interfejsy API Google. Możesz ją zaktualizować w dowolnym momencie.
  • Identyfikator projektu jest niepowtarzalny w ramach wszystkich projektów Google Cloud i nie można go zmienić (po ustawieniu). Cloud Console automatycznie generuje unikalny ciąg znaków. Zwykle nie ma znaczenia, jaki to ciąg. W większości laboratoriów z kodem musisz odwoływać się do identyfikatora projektu (zazwyczaj jest to PROJECT_ID). Jeśli nie podoba Ci się wygenerowany identyfikator, możesz wygenerować inny losowy. Możesz też spróbować użyć własnego konta i sprawdzić, czy jest ono dostępne. Po tym kroku nie można go zmienić. Pozostanie ona niezmieniona przez cały czas trwania projektu.
  • Informacyjnie: istnieje jeszcze 3 wartość, numer projektu, którego używają niektóre interfejsy API. Więcej informacji o wszystkich 3 wartościach znajdziesz w dokumentacji.
  1. Następnie musisz włączyć rozliczenia w konsoli Cloud, aby korzystać z zasobów i interfejsów API Cloud. Przejście przez ten moduł Codelab nie powinno wiązać się z wielkimi kosztami, jeśli w ogóle z nimi będzie. Aby wyłączyć zasoby, aby nie generować opłat po zakończeniu samouczka, możesz usunąć utworzone zasoby lub cały projekt. Nowi użytkownicy Google Cloud mogą skorzystać z bezpłatnego okresu próbnego, w którym mają do dyspozycji środki w wysokości 300 USD.

Konfiguracja środowiska

  1. Ustaw zmienną środowiskową na identyfikator projektu, aby używać go w późniejszych poleceniach:
export PROJECT_ID=$(gcloud config get-value project)
export REGION=us-central1
export ZONE=us-central1-a
  1. Włącz interfejsy API wymagane do wykonania tego ćwiczenia.
gcloud services enable \
  run.googleapis.com \
  cloudbuild.googleapis.com \
  compute.googleapis.com \
  artifactregistry.googleapis.com
  1. Sklonuj repozytorium przykładowej aplikacji i otwórz katalog
git clone https://github.com/GoogleCloudPlatform/cymbal-eats.git

cd cymbal-eats/partner-registration-service
  1. Ustawianie domyślnego regionu i strefy dla Compute Engine i Cloud Run
gcloud config set compute/region ${REGION}
gcloud config set run/region ${REGION}
gcloud config set compute/zone ${ZONE}

3. Wdrażanie usługi

Najpierw wdruż usługę i sprawdź, czy jest ona dostępna publicznie. Gdy potwierdzisz, że możesz wysyłać żądania z przeglądarki, zablokujemy usługę i zezwolimy tylko na żądania z wewnętrznych źródeł sieci.

Podczas uruchamiania tego polecenia postępuj zgodnie z tymi instrukcjami:

  • Lokalizacja kodu źródłowego (...): sprawdź, czy jesteś w katalogu partner-registration-service, i naciśnij Enter, aby zaakceptować domyślną opcję
  • Nazwa usługi (partner-registration-service): naciśnij klawisz Enter, aby zaakceptować domyślną nazwę.
  • Zezwalaj na nieuwierzytelnione wywołania usługi [partner-registration-service] (y/N)? T
gcloud run deploy 

Po wykonaniu tego polecenia otrzymasz listę adresów URL usług Cloud Run. Dane wyjściowe będą wyglądać podobnie do tych:

Service [partner-registration-service] revision [partner-registration-service-00001-haz] has been deployed and is serving 100 percent of traffic.
Service URL: https://partner-registration-service-ssssssssss-uc.a.run.app

Otwórz adres URL usługi w przeglądarce. Powinny się wyświetlić te dane wyjściowe:

Partner registration service: RUNNING

Ustaw usługę tak, aby zezwalała tylko na żądania wewnętrzne

Teraz użyjesz ustawień ruchu przychodzącego usługi Cloud Run, aby zezwalać tylko na żądania z źródeł wewnętrznych. Źródła wewnętrzne obejmują zasoby w sieciach VPC, które znajdują się w tym samym projekcie (lub obszarze Ustawień usługi VPC) co usługa Cloud Run. Dzięki temu są one idealne do naszego przypadku użycia.

Dodatkowo żądania z innych usług Google Cloud są uznawane za wewnętrzne, nawet jeśli nie są częścią VPC. Są to na przykład Pub/Sub i Workflows.

Żądania z tych źródeł pozostają w sieci Google, nawet jeśli uzyskują dostęp do Twojej usługi przez adres URL run.app. Dostęp publiczny jest zabroniony.

Zaktualizuj usługę, aby zezwalała tylko na żądania wewnętrzne:

gcloud run services update partner-registration-service --ingress=internal

Jeśli otworzysz adres URL usługi ponownie, zobaczysz komunikat „Błąd: Forbidden – dostęp jest zabroniony”.

Ponieważ przeglądarka wysyła żądanie z zewnętrznego źródła sieci, a nie z źródła wewnętrznego w projekcie Google Cloud, jest to dokładnie to, czego oczekujesz. Usługa jest teraz bezpieczniejsza.

4. Tworzenie maszyny wirtualnej Compute Engine jako serwera przeskoku

Następnym krokiem jest symulowanie żądań z serwera lokalnego przez bramę Cloud VPN. W tym celu utwórz instancję Compute Engine w sieci VPC, aby używać jej jako serwera przeskoku:

gcloud compute instances create jump-server --scopes=https://www.googleapis.com/auth/cloud-platform

Dane wyjściowe tego polecenia powinny wyglądać mniej więcej tak:

NAME         ZONE           MACHINE_TYPE   PREEMPTIBLE  INTERNAL_IP  EXTERNAL_IP   STATUS
jump-server  us-central1-a  n1-standard-1               10.128.0.10  34.170.108.8  RUNNING

Wysyłanie żądania z instancji Compute Engine do usługi

Otwórz teraz terminal na maszynie wirtualnej i wyślij żądanie bezpośrednio z maszyny w sieci VPC.

Jeśli po wykonaniu tego polecenia zostanie wyświetlony komunikat z prośbą o skonfigurowanie SSH w Cloud Shell, wykonaj podane instrukcje:

gcloud compute ssh jump-server

Aby uzyskać adres URL usługi Cloud Run, użyj tego polecenia:

gcloud run services describe partner-registration-service --region us-central1

Pierwsze kilka wierszy danych wyjściowych powinno wyglądać tak:

✔ Service partner-registration-service in region us-central1

URL:     https://partner-registration-service-ssssssssss-uc.a.run.app
Ingress: internal

Teraz skopiuj adres URL i wyślij żądanie z instancji Compute Engine za pomocą curl. Ta prośba powinna się powieść, ponieważ instancja maszyny wirtualnej działa w sieci VPC projektu – jest to wewnętrzny źródło.

export SERVICE_URL=https://

curl ${SERVICE_URL}

Dane wyjściowe powinny zawierać komunikat:

Partner registration service: RUNNING

5. A co z kontrolą dostępu opartą na uprawnieniach?

W tym module praktycznym pokazaliśmy, jak i kiedy używać ustawień ingress. Jeśli chcesz połączyć z Cloud Run zadanie działające lokalnie, ustawienia przychodzące są dobrym pierwszym krokiem.

Kontrola dostępu oparta na uprawnieniach wymaga więcej pracy, zwłaszcza jeśli nawiązujesz połączenie z hosta lokalnego:

  • W przypadku usługi IAM musisz zarządzać długotrwałymi danymi logowania do konta usługi na hoście.
  • Aby podpisywać żądania za pomocą danych logowania konta usługi, musisz wprowadzić zmiany w kodzie.

Google zaleca stosowanie wielowarstwowego podejścia do kontroli dostępu. Korzystanie z ustawień ingress do ograniczania dostępu tylko do hostów wewnętrznych to dobry pierwszy krok, ale nie poprzestawaj na tym.

6. Gratulacje!

Gratulacje! Masz ukończone zajęcia.

Co dalej:

Inne ćwiczenia z programowania dotyczące Cymbal Eats:

Czyszczenie danych

Aby uniknąć obciążenia konta Google Cloud opłatami za zasoby zużyte w tym samouczku, możesz usunąć projekt zawierający te zasoby lub zachować projekt i usunąć poszczególne zasoby.

Usuwanie projektu

Najprostszym sposobem na uniknięcie płatności jest usunięcie projektu utworzonego na potrzeby samouczka.

Przydatne materiały

Oto dodatkowe materiały, które pomogą Ci dowiedzieć się więcej o 2 poziomach kontroli dostępu w Cloud Run.