1. Przegląd
W tym module wdrożysz portal dla pracowników, który umożliwia im wyświetlanie, aktualizowanie i usuwanie zamówień z aplikacji Cymbal Eats. Do zabezpieczenia dostępu do portalu bez używania wirtualnej sieci prywatnej (VPN) użyjesz Identity Aware Proxy (IAP). IAP upraszcza wdrażanie modelu dostępu opartego na zasadzie „zero zaufania” i zajmuje mniej czasu niż VPN w przypadku pracowników zdalnych, zarówno w środowiskach lokalnych, jak i chmurowych, dzięki jednemu punktowi kontroli do zarządzania dostępem do aplikacji.

Co to jest Identity-Aware Proxy?
Identity-Aware Proxy (IAP) to usługa Google Cloud, która przechwytuje żądania wysyłane do aplikacji, uwierzytelnia użytkownika, który przesyła żądanie, przy użyciu Google Identity Services i przekazuje do aplikacji tylko te z nich, które pochodzą od użytkownika uprawnionego do dostępu do aplikacji. Dodatkowo może modyfikować nagłówki żądań, dodając do nich informacje o uwierzytelnionym użytkowniku.
Czego się nauczysz
- Konfigurowanie bezserwerowej grupy punktów końcowych sieci (NEG)
- Jak skonfigurować system równoważenia obciążenia
- Jak włączyć IAP, aby ograniczyć dostęp
- Jak ograniczać dostęp przy użyciu IAP
2. Konfiguracja i wymagania
Samodzielne konfigurowanie środowiska
- 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ć.



- Nazwa projektu to wyświetlana nazwa uczestników tego projektu. Jest to ciąg znaków, który nie jest używany przez interfejsy API Google. Możesz ją zaktualizować w dowolnym momencie.
- Identyfikator projektu jest unikalny we wszystkich projektach Google Cloud i nie można go zmienić po ustawieniu. Konsola Cloud automatycznie generuje unikalny ciąg znaków. Zwykle nie musisz się nim przejmować. W większości ćwiczeń z programowania musisz odwoływać się do identyfikatora projektu (zwykle jest on oznaczony jako
PROJECT_ID). Jeśli wygenerowany identyfikator Ci się nie podoba, możesz wygenerować inny losowy identyfikator. Możesz też spróbować własnej nazwy i sprawdzić, czy jest dostępna. Po tym kroku nie można go zmienić i będzie obowiązywać przez cały czas trwania projektu. - Warto wiedzieć, że istnieje też trzecia wartość, czyli numer projektu, z której korzystają niektóre interfejsy API. Więcej informacji o tych 3 wartościach znajdziesz w dokumentacji.
- Następnie musisz włączyć płatności w konsoli Cloud, aby korzystać z zasobów i interfejsów API Google Cloud. Ukończenie tego laboratorium nie powinno wiązać się z dużymi kosztami, a nawet z żadnymi. Aby wyłączyć zasoby i uniknąć naliczania opłat po zakończeniu tego 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
- Tworzenie zmiennych środowiskowych związanych z projektami i zasobami
export PROJECT_ID=$(gcloud config get-value project)
export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format='value(projectNumber)')
export REGION=us-east1
export ORDER_SERVICE_URL=order-service
export INVENTORY_SERVICE_URL=inventory-service
export MENU_SERVICE_URL=menu-service
- Włączanie interfejsów API usług IAP i Cloud Resource Manager
gcloud services enable \
iap.googleapis.com \
cloudresourcemanager.googleapis.com \
cloudidentity.googleapis.com \
compute.googleapis.com
- Klonowanie repozytorium przykładowej aplikacji i przechodzenie do katalogu
git clone https://github.com/GoogleCloudPlatform/cymbal-eats.git && cd cymbal-eats/employee-ui
- Wdróż portal pracowniczy za pomocą skryptu konfiguracji. Zanim przejdziesz do następnego kroku, poczekaj na zakończenie działania skryptu.
./setup.sh
Przykładowe dane wyjściowe
... Done. Service [employee-ui-service] revision [employee-ui-service-00001-quw] has been deployed and is serving 100 percent of traffic. Service URL: https://employee-ui-service-gbtuuy5eda-uk.a.run.app
- Kliknij link Adres URL usługi.

3. Konfigurowanie bezserwerowej grupy punktów końcowych sieci (NEG)
Utworzysz bezserwerową grupę punktów końcowych sieci( bezserwerową grupę NEG) dla usługi Cloud Run interfejsu pracownika. Bezserwerowe grupy punktów końcowych sieci umożliwiają korzystanie z bezserwerowych aplikacji Google Cloud z zewnętrznym równoważeniem obciążenia HTTP(S).

- Utwórz grupę punktów końcowych sieci dla usługi interfejsu pracownika.
gcloud compute network-endpoint-groups create employee-ui-iap-neg \
--project $PROJECT_ID \
--region=$REGION \
--network-endpoint-type=serverless \
--cloud-run-service=employee-ui-service
Przykładowe dane wyjściowe
Created [https://www.googleapis.com/compute/v1/projects/cymbal-eats-18147-25762/regions/us-east1/networkEndpointGroups/employee-ui-iap-neg]. Created network endpoint group [employee-ui-iap-neg].
Utwórz usługę backendu i dodaj bezserwerową grupę punktów końcowych sieci
Usługa backendu określa sposób, w jaki Cloud Load Balancing rozdziela ruch. Konfiguracja usługi backendu zawiera zestaw wartości, takich jak protokół używany do łączenia się z backendami, różne ustawienia dystrybucji i sesji, kontrola stanu i limity czasu. Te ustawienia zapewniają szczegółową kontrolę nad działaniem systemu równoważenia obciążenia.
- Tworzenie usługi backendu
gcloud compute backend-services create employee-ui-iap-backend \
--global
Przykładowe dane wyjściowe
Created [https://www.googleapis.com/compute/v1/projects/cymbal-eats-18147-25762/global/backendServices/employee-ui-iap-backend]. NAME: employee-ui-iap-backend BACKENDS: PROTOCOL: HTTP
- Dodawanie bezserwerowej grupy punktów końcowych sieci jako backendu do usługi backendu
gcloud compute backend-services add-backend employee-ui-iap-backend \
--global \
--network-endpoint-group=employee-ui-iap-neg \
--network-endpoint-group-region=$REGION
Przykładowe dane wyjściowe
Updated [https://www.googleapis.com/compute/v1/projects/cymbal-eats-18147-25762/global/backendServices/employee-ui-iap-backend].
- Tworzenie mapy URL do kierowania przychodzących żądań do usługi backendu
gcloud compute url-maps create employee-ui-iap-url-map \
--default-service employee-ui-iap-backend
Created [https://www.googleapis.com/compute/v1/projects/cymbal-eats-18147-25762/global/urlMaps/employee-ui-iap-url-map]. NAME: employee-ui-iap-url-map DEFAULT_SERVICE: backendServices/employee-ui-iap-backend
4. Konfigurowanie komponentów systemu równoważenia obciążenia
Na poniższym diagramie widać, że system równoważenia obciążenia używa backendu bezserwerowej grupy punktów końcowych sieci do kierowania żądań do bezserwerowej usługi Cloud Run.

Zarezerwuj statyczny adres IP
- Zarezerwuj statyczny adres IPv4 i zapisz domenę
gcloud compute addresses create employee-ui-iap-ip \
--network-tier=PREMIUM \
--ip-version=IPV4 \
--global
Przykładowe dane wyjściowe
Created [https://www.googleapis.com/compute/v1/projects/cymbal-eats-18147-25762/global/addresses/employee-ui-iap-ip].
- Przechowywanie domeny nip.io
export DOMAIN=$(gcloud compute addresses list --filter employee-ui-iap-ip --format='value(ADDRESS)').nip.io
Tworzenie zasobu certyfikatu SSL zarządzanego przez Google
- Tworzenie zasobu certyfikatu SSL zarządzanego przez Google
gcloud compute ssl-certificates create employee-ui-iap-cert \
--description=employee-ui-iap-cert \
--domains=$DOMAIN \
--global
Przykładowe dane wyjściowe
Created [https://www.googleapis.com/compute/v1/projects/cymbal-eats-18147-25762/global/sslCertificates/employee-ui-iap-cert]. NAME: employee-ui-iap-cert TYPE: MANAGED CREATION_TIMESTAMP: 2022-04-18T06:39:37.474-07:00 EXPIRE_TIME: MANAGED_STATUS: PROVISIONING 34.102.234.98.nip.io: PROVISIONING
Utwórz docelowy serwer proxy HTTPS
- Utwórz docelowy serwer proxy HTTPS, aby kierować żądania do mapy URL.
gcloud compute target-https-proxies create employee-ui-iap-http-proxy \
--ssl-certificates employee-ui-iap-cert \
--url-map employee-ui-iap-url-map
Przykładowe dane wyjściowe
Created [https://www.googleapis.com/compute/v1/projects/cymbal-eats-18147-25762/global/targetHttpsProxies/employee-ui-iap-http-proxy]. NAME: employee-ui-iap-http-proxy SSL_CERTIFICATES: employee-ui-iap-cert URL_MAP: employee-ui-iap-url-map CERTIFICATE_MAP:
Konfigurowanie reguł przekierowania
- Tworzenie reguły przekierowania w celu kierowania żądań przychodzących do serwera proxy
gcloud compute forwarding-rules create employee-ui-iap-forwarding-rule \
--load-balancing-scheme=EXTERNAL \
--network-tier=PREMIUM \
--address=employee-ui-iap-ip \
--global \
--ports=443 \
--target-https-proxy employee-ui-iap-http-proxy
Przykładowe dane wyjściowe
Created [https://www.googleapis.com/compute/v1/projects/cymbal-eats-18147-25762/global/forwardingRules/employee-ui-iap-forwarding-rule].
Ograniczanie ruchu przychodzącego do usługi Cloud Run
Ogranicz ruch przychodzący tak, aby akceptować tylko żądania wewnętrzne i żądania pochodzące z równoważenia obciążenia HTTP(S).

- Zaktualizuj usługę, aby zezwalała tylko na ruch przychodzący z żądań wewnętrznych i żądań kierowanych przez system równoważenia obciążenia HTTP(S).
gcloud run services update employee-ui-service \
--ingress internal-and-cloud-load-balancing \
--region $REGION
Przykładowe dane wyjściowe
OK Deploying... Done. OK Creating Revision... OK Routing traffic... Done. Service [employee-ui-service] revision [employee-ui-service-00001-quw] has been deployed and is serving 100 percent of traffic. Service URL: https://employee-ui-service-gbtuuy5eda-uk.a.run.app
- Kliknij link Adres URL usługi.

Dostęp do adresu URL usługi Cloud Run jest teraz zabroniony.
5. Włączanie Cloud Identity-Aware Proxy (IAP) w systemie równoważenia obciążenia
IAP umożliwia utworzenie centralnej warstwy autoryzacji dla aplikacji, do których dostęp uzyskuje się za pomocą protokołu HTTPS. Zamiast zapór sieciowych możesz używać modelu kontroli dostępu na poziomie aplikacji.

Konfigurowanie ekranu zgody OAuth
Marka to ekran zgody OAuth, który zawiera informacje o marce dla użytkowników. Marki mogą być ograniczone do użytkowników wewnętrznych lub publicznych. Marka wewnętrzna umożliwia dostęp do procesu OAuth członkowi tej samej organizacji Google Workspace co projekt. Marka publiczna sprawia, że proces OAuth jest dostępny dla każdego, kto ma dostęp do internetu.
- Tworzenie marki
export USER_EMAIL=$(gcloud config list account --format "value(core.account)")
gcloud alpha iap oauth-brands create \
--application_title="Cymbal Eats" \
--support_email=$USER_EMAIL
Przykładowe dane wyjściowe
Created [462858740426]. applicationTitle: Cymbal Eats name: projects/462858740426/brands/462858740426 orgInternalOnly: true
Tworzenie klienta OAuth IAP
- Utwórz klienta, używając nazwy marki z poprzedniego kroku.
gcloud alpha iap oauth-clients create \
projects/$PROJECT_ID/brands/$PROJECT_NUMBER \
--display_name=cymbal-eats-employee-ui
Przykładowe dane wyjściowe
Created [462858740426-tkpv8n03opijg7erd3s9ccued2pfllsd.apps.googleusercontent.com]. displayName: cymbal-eats-employee-ui name: projects/462858740426/brands/462858740426/identityAwareProxyClients/462858740426-tkpv8n03opijg7erd3s9ccued2pfllsd.apps.googleusercontent.com secret: [secret-removed]
- Przechowywanie nazwy, identyfikatora i tajnego klucza klienta
export CLIENT_NAME=$(gcloud alpha iap oauth-clients list \
projects/$PROJECT_NUMBER/brands/$PROJECT_NUMBER --format='value(name)' \
--filter="displayName:cymbal-eats-employee-ui")
export CLIENT_ID=${CLIENT_NAME##*/}
export CLIENT_SECRET=$(gcloud alpha iap oauth-clients describe $CLIENT_NAME --format='value(secret)')
- W konsoli Google Cloud wybierz projekt z menu wyboru projektu.
- W konsoli Cloud otwórz ekran zgody OAuth.

- W sekcji Typ użytkownika kliknij UDOSTĘPNIJ NA ZEWNĄTRZ.
- Wybierz Stan publikacji: Testowanie.

- Kliknij POTWIERDŹ.
6. Ograniczanie dostępu przy użyciu IAP
Ogranicz dostęp do usługi backendu za pomocą IAP, a następnie sprawdź, czy aplikacja jest niedostępna.
- Włączanie IAP w usłudze backendu
gcloud iap web enable --resource-type=backend-services \
--oauth2-client-id=$CLIENT_ID \
--oauth2-client-secret=$CLIENT_SECRET \
--service=employee-ui-iap-backend
Weryfikowanie konfiguracji IAP
- Sprawdź, czy certyfikat SSL jest AKTYWNY.
gcloud compute ssl-certificates list --format='value(MANAGED_STATUS)'
- Pobieranie adresu URL usługi
echo https://$DOMAIN
Przykładowe dane wyjściowe
https://34.102.234.98.nip.io
- Kliknij adres URL usługi, aby otworzyć portal pracowniczy.

- Zaloguj się, używając danych logowania do modułu.

- Zamknij przeglądarkę
Przyznawanie użytkownikowi dostępu do portalu pracowniczego
- Dodaj powiązanie zasady uprawnień dla roli
'roles/iap.httpsResourceAccessor'dla użytkownika utworzonego w poprzednim kroku.
gcloud iap web add-iam-policy-binding \
--resource-type=backend-services \
--service=employee-ui-iap-backend \
--member=user:$USER_EMAIL \
--role='roles/iap.httpsResourceAccessor'
Przykładowe dane wyjściowe
Updated IAM policy for backend service [projects/462858740426/iap_web/compute/services/employee-ui-iap-backend].
Testowanie dostępu do usługi
Sprawdź, czy dostęp do portalu pracowniczego został przyznany.
- Pobieranie adresu URL usługi
echo https://$DOMAIN
Przykładowe dane wyjściowe
https://34.102.234.98.nip.io
- Kliknij adres URL usługi, aby otworzyć portal pracowniczy.

Powinieneś(-aś) teraz mieć dostęp do portalu pracowniczego.
(Opcjonalnie) Wdróż wszystkie zależności. Wdrożenie tych mikroserwisów może potrwać około 20 minut.
unset ORDER_SERVICE_URL
unset INVENTORY_SERVICE_URL
unset MENU_SERVICE_URL
cd ~/cymbal-eats
./setup.sh
./get-site-urls.sh
7. Gratulacje!
Gratulacje! Codelab został ukończony.
Co dalej?
Zapoznaj się z innymi ćwiczeniami z programowania dotyczącymi Cymbal Eats:
- Aktywowanie Cloud Workflows za pomocą Eventarc
- Aktywowanie przetwarzania zdarzeń z Cloud Storage
- Nawiązywanie połączenia z prywatną instancją Cloud SQL z usługi Cloud Run
- Łączenie się z w pełni zarządzanymi bazami danych z usługi Cloud Run
- Wywoływanie zadań Cloud Run za pomocą Cloud Scheduler
- Bezpieczne wdrażanie w Cloud Run
- Zabezpieczanie ruchu przychodzącego w Cloud Run
- Łączenie się z prywatną bazą danych 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.
Usuwanie projektu
Najprostszym sposobem na uniknięcie płatności jest usunięcie projektu utworzonego w tym samouczku.