1. Omówienie
W tym module dowiesz się, jak ograniczyć dostęp do usługi Cloud Run i zezwalać jedynie na żądania pochodzące z zadania działającego lokalnie lub w sieci VPC Twojego projektu. Możesz użyć 2 warstw kontroli dostępu: ustawień ruchu przychodzącego oraz zasad Identity and Access Management (IAM).
Ustawienia ruchu przychodzącego
Ustawienia ruchu przychodzącego pozwalają filtrować żądania na podstawie ich pochodzenia sieciowego (wewnętrznego lub zewnętrznego). Domyślnie przekazywane są wszystkie żądania, również te z publicznego internetu.
Zasady dotyczące uprawnień
Zasady uprawnień pozwalają filtrować żądania na podstawie tożsamości nadawcy i są zwykle używane do uwierzytelniania żądań między usługami.
Z tego modułu dowiesz się, jak i kiedy używać ustawień ruchu przychodzącego.
Hosty lokalne łączą się przez VPC
W tym module przeprowadzimy symulację lokalnego zbioru zadań. Aby połączyć hosta lokalnego z Cloud Run, musisz skonfigurować prywatny dostęp do Google dla hostów lokalnych. Obejmuje to skonfigurowanie bramy Cloud VPN w sieci VPC, jak pokazano poniżej.
Symulowanie lokalnego zadania z użyciem serwera przesiadkowego w VPC
W tym module symulujesz wysyłanie żądań z hosta lokalnego przez wysyłanie żądań z maszyny wirtualnej Compute Engine w VPC, jak pokazano tutaj.
Maszyna wirtualna Compute Engine używana jako serwer przesiadkowy ma to samo źródło sieci co brama sieci Cloud VPN, dlatego możesz z niej korzystać do symulowania wysyłania żądań z lokalnego zbioru zadań.
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 ani Google Workspace, musisz je utworzyć.
- Nazwa projektu jest wyświetlaną nazwą uczestników tego projektu. To ciąg znaków, który nie jest używany przez interfejsy API Google. W każdej chwili możesz ją zmienić.
- Identyfikator projektu jest unikalny we wszystkich projektach Google Cloud i nie można go zmienić (po jego ustawieniu nie można go zmienić). Cloud Console automatycznie wygeneruje unikalny ciąg znaków. zwykle nieważne, co ona jest. W większości ćwiczeń z programowania konieczne jest odwołanie się do identyfikatora projektu (zwykle nazywa się on
PROJECT_ID
). Jeśli nie podoba Ci się wygenerowany identyfikator, możesz wygenerować kolejny losowy. Możesz też spróbować własnych sił i sprawdzić, czy jest dostępna. Potem nie będzie można go zmienić. Pozostanie ono przez czas trwania projektu. - Dostępna jest trzecia wartość, numer projektu, z którego korzystają niektóre interfejsy API. Więcej informacji o wszystkich 3 wartościach znajdziesz w dokumentacji.
- Następnie musisz włączyć płatności w Cloud Console, aby korzystać z zasobów Cloud/interfejsów API. Ukończenie tego ćwiczenia z programowania nie powinno kosztować zbyt wiele. Aby wyłączyć zasoby, aby nie naliczać opłat po zakończeniu tego samouczka, możesz usunąć utworzone zasoby lub cały projekt. Nowi użytkownicy Google Cloud mogą skorzystać z programu bezpłatnego okresu próbnego o wartości 300 USD.
Konfiguracja środowiska
- Ustaw zmienną środowiskową na identyfikator projektu, aby móc go używać w późniejszych poleceniach:
export PROJECT_ID=$(gcloud config get-value project)
export REGION=us-central1
export ZONE=us-central1-a
- Włącz interfejsy API wymagane do wykonania tego modułu.
gcloud services enable \
run.googleapis.com \
cloudbuild.googleapis.com \
compute.googleapis.com \
artifactregistry.googleapis.com
- Skopiuj repozytorium przykładowej aplikacji i przejdź do katalogu
git clone https://github.com/GoogleCloudPlatform/cymbal-eats.git
cd cymbal-eats/partner-registration-service
- 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 należy wdrożyć usługę i pozostawić ją publicznie dostępną. Gdy potwierdzisz, że możesz wysyłać żądania z przeglądarki, zablokujemy usługę i zezwolimy wyłącznie na żądania pochodzące tylko z wewnętrznych źródeł sieci.
Po uruchomieniu tego polecenia wykonaj te czynności:
- Lokalizacja kodu źródłowego (...): sprawdź, czy jesteś w katalogu usług rejestracji partnera i naciśnij Enter, aby zaakceptować wartość domyślną.
- Nazwa usługi (partner-registration-service): naciśnij Enter, aby zaakceptować wartość domyślną.
- Zezwolić na nieuwierzytelnione wywołania [partner-signup-service] (y/N)? T
gcloud run deploy
Po zakończeniu tego polecenia pojawi się adres URL Twojej usługi Cloud Run. Dane wyjściowe będą podobne do tych poniżej:
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
Skonfiguruj usługę w taki sposób, aby akceptowała tylko żądania wewnętrzne
Teraz użyjesz ustawień ruchu przychodzącego usługi Cloud Run, aby zezwolić tylko na żądania ze źródeł wewnętrznych. Źródła wewnętrzne obejmują zasoby w sieciach VPC, które znajdują się w tym samym projekcie (lub w granicach Ustawień usługi VPC) co usługa Cloud Run, dzięki czemu doskonale sprawdza się w naszym przypadku.
Poza tym żądania z innych usług Google Cloud są uznawane za wewnętrzne, nawet jeśli nie należą do VPC. Te usługi to na przykład Pub/Sub i Workflows.
Żądania z tych źródeł pozostają w sieci Google nawet wtedy, gdy uzyskują dostęp do usługi pod adresem URL run.app, a dostęp publiczny jest zabroniony.
Zaktualizuj usługę tak, aby akceptowała tylko żądania wewnętrzne:
gcloud run services update partner-registration-service --ingress=internal
Jeśli ponownie otworzysz adres URL usługi, zobaczysz komunikat „Error: Forbidden - Access is forbidden” (Błąd: brak dostępu – dostęp jest zabroniony).
Twoja przeglądarka wysyła żądanie z zewnętrznego źródła sieci, a nie z wewnętrznego do projektu Google Cloud, dlatego jest to dokładnie to, czego oczekujesz. Twoja usługa jest teraz bezpieczniejsza.
4. Tworzenie maszyny wirtualnej Compute Engine jako serwera przesiadkowego
Następnym krokiem jest symulacja żądań z serwera lokalnego przez bramę Cloud VPN przez utworzenie w VPC instancji Compute Engine, która będzie używana jako serwer przesiadkowy:
gcloud compute instances create jump-server --scopes=https://www.googleapis.com/auth/cloud-platform
Wynik tego polecenia powinien być podobny do tego:
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
Wyślij żądanie z instancji Compute Engine do usługi
Teraz otworzysz terminal w maszynie wirtualnej i wyślij żądanie bezpośrednio z maszyny w sieci VPC.
Jeśli podane niżej polecenie poprosi Cię o skonfigurowanie SSH w Cloud Shell, postępuj zgodnie z instrukcjami:
gcloud compute ssh jump-server
Uzyskaj adres URL usługi Cloud Run za pomocą tego polecenia:
gcloud run services describe partner-registration-service --region us-central1
Pierwszych 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ą narzędzia curl. To żądanie powinno się udać, ponieważ maszyna wirtualna działa w sieci VPC projektu – jest to źródło wewnętrzne.
export SERVICE_URL=https://
curl ${SERVICE_URL}
Dane wyjściowe powinny wyglądać tak:
Partner registration service: RUNNING
5. Co z kontrolą dostępu na podstawie uprawnień?
W tym module pokazaliśmy, jak i kiedy używać ustawień ruchu przychodzącego. Ustawienia ruchu przychodzącego są świetnym pierwszym krokiem, jeśli łączysz zadanie lokalne z Cloud Run.
Wdrożenie kontroli dostępu opartej na uprawnieniach wymaga większego nakładu pracy, zwłaszcza jeśli wywołujesz z hosta lokalnego:
- Uprawnienia wymagają zarządzania długoterminowymi danymi logowania do konta usługi na hoście
- Uprawnienia wymagają zmian w kodzie, aby podpisywać żądania przy użyciu danych logowania konta usługi.
Google zaleca wielowarstwową metodę kontroli dostępu. Używanie ustawień ruchu przychodzącego do ograniczenia dostępu tylko do hostów wewnętrznych to świetny pierwszy krok, ale nie poprzestawaj na tym.
6. Gratulacje!
Gratulacje. Udało Ci się ukończyć ćwiczenia z programowania.
Co dalej:
Poznaj inne ćwiczenia z programowania Cymbal Eats:
- Aktywowanie przepływów pracy w Cloud za pomocą Eventarc
- Aktywowanie przetwarzania zdarzeń z Cloud Storage
- Łączenie z Private Cloud SQL z poziomu Cloud Run
- Łączenie z w pełni zarządzanymi bazami danych z Cloud Run
- Bezpieczna aplikacja bezserwerowa z serwerem proxy identyfikującym tożsamość (IAP)
- Aktywowanie zadań Cloud Run za pomocą usługi Cloud Scheduler
- Bezpieczne wdrażanie w Cloud Run
- Łączenie z prywatnym AlloyDB z Autopilota w GKE
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.
Usuwam projekt
Najprostszym sposobem na uniknięcie płatności jest usunięcie projektu utworzonego na potrzeby samouczka.
Przydatne materiały
Oto dodatkowe zasoby, które pomogą Ci dowiedzieć się więcej o 2 warstwach kontroli dostępu w Cloud Run.