1. Omówienie
W tym module wdrożysz portal dla pracowników, który umożliwia pracownikom wyświetlanie, aktualizowanie i usuwanie zamówień w aplikacji Cymbal Eats. Za pomocą Identity Aware Proxy (IAP) będziesz zabezpieczać dostęp do portalu bez korzystania z wirtualnej sieci prywatnej (VPN). IAP upraszcza wdrożenie modelu dostępu typu zero zaufania i zajmuje mniej czasu niż sieć VPN dla pracowników zdalnych, zarówno lokalnych, jak i w chmurze, z jednym punktem 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 je wysłał, przy użyciu usługi tożsamości Google, i przekazuje do aplikacji tylko te żądania, które pochodzą od użytkownika autoryzowanego dostępu do aplikacji. Dodatkowo może modyfikować nagłówki żądania, tak by zawierały informacje o uwierzytelnionym użytkowniku.
Czego się nauczysz
- Jak skonfigurować bezserwerową grupę punktów końcowych sieci (NEG)
- Jak skonfigurować system równoważenia obciążenia
- Jak włączyć IAP, aby ograniczyć dostęp
- Jak ograniczyć dostęp za pomocą IAP
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
- 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 IAP i menedżera zasobów Cloud
gcloud services enable \
iap.googleapis.com \
cloudresourcemanager.googleapis.com \
cloudidentity.googleapis.com \
compute.googleapis.com
- Skopiuj repozytorium przykładowej aplikacji i przejdź do katalogu
git clone https://github.com/GoogleCloudPlatform/cymbal-eats.git && cd cymbal-eats/employee-ui
- Wdróż portal pracowników za pomocą skryptu konfiguracji. Zanim przejdziesz do następnego kroku, poczekaj, aż skrypt się zakończy
./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 URL usługi.
3. Konfigurowanie bezserwerowej grupy punktów końcowych sieci (NEG)
Utworzysz bezserwerową grupę punktów końcowych sieci( bezserwerową grupę punktów końcowych sieci) dla usługi Cloud Run interfejsu użytkownika. 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 na potrzeby usługi UI 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, jak 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, kontrole stanu i limity czasu. Te ustawienia dają szczegółową kontrolę nad zachowaniem systemu równoważenia obciążenia.
- Utwórz usługę 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
- Dodaj bezserwerową grupę punktów końcowych sieci jako backend 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].
- Utwórz mapę URL, aby kierować przychodzące żądania 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
Poniższy diagram pokazuje, że system równoważenia obciążenia używa bezserwerowego backendu grupy punktów końcowych sieci do kierowania żądań do bezserwerowej usługi Cloud Run.
Zarezerwuj statyczny adres IP
- Rezerwacja statycznego adresu IPv4 i przechowywanie domeny
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
- Utwórz regułę przekierowania, aby kierować przychodzące żądania 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 przychodzące przez równoważenie obciążenia HTTP(S).
- Zaktualizuj usługę, aby zezwalała wyłącznie na ruch przychodzący z żądań wewnętrznych i żądań wysyłanych 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 URL usługi.
Dostęp do adresu URL usługi Cloud Run jest teraz wyświetlany jako zabroniony.
5. Włączanie Cloud Identity-Aware Proxy (IAP) w systemie równoważenia obciążenia
IAP umożliwia ustanowienie centralnej warstwy autoryzacji dla aplikacji, do których dostęp jest uzyskiwany przez HTTPS. Zamiast zapór sieciowych na poziomie sieci możesz użyć modelu kontroli dostępu na poziomie aplikacji.
Konfigurowanie ekranu zgody OAuth
Marka to ekran zgody OAuth, który zawiera informacje o marce użytkownika. Marki mogą być ograniczone do użytkowników wewnętrznych lub publicznych. Marka wewnętrzna umożliwia dostęp do procesu OAuth osobie należącej do tej samej organizacji Google Workspace co projekt. Marka publiczna sprawia, że przepływ 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]
- Zapisywanie 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 Cloud wybierz projekt z menu wyboru projektów.
- Przejdź do ekranu zgody OAuth w konsoli Cloud.
- W sekcji Typ użytkownika kliknij USTAW ZEWNĘTRZNE
- Jako stan publikowania wybierz Testowanie
- Kliknij POTWIERDŹ
6. Ograniczanie dostępu przy użyciu IAP
Ogranicz dostęp do usługi backendu przy użyciu 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)'
- Uzyskanie 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 dla pracowników.
- Zaloguj się, używając danych logowania do modułu.
- Zamknij przeglądarkę
Przyznawanie użytkownikom dostępu do portalu pracowników
- Dodaj powiązanie zasad 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
Potwierdź, że dostęp do portalu dla pracowników został przyznany
- Uzyskanie 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 dla pracowników.
Teraz powinieneś mieć dostęp do portalu dla pracowników.
(Opcjonalnie) Wdróż wszystkie zależności. Wdrożenie tych mikroserwisów może potrwać ok. 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. 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
- Aktywowanie zadań Cloud Run za pomocą usługi Cloud Scheduler
- Bezpieczne wdrażanie w Cloud Run
- Zabezpieczanie ruchu przychodzącego 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.