1. Übersicht
In diesem Lab stellen Sie das Mitarbeiterportal bereit, über das Mitarbeiter Bestellungen aus der Cymbal Eats-App ansehen, aktualisieren und löschen können. Sie verwenden den Identity-Aware Proxy (IAP), um den Portalzugriff ohne Verwendung eines virtuellen privaten Netzwerks (VPN) zu sichern. IAP vereinfacht die Implementierung eines Zero-Trust-Zugriffsmodells und nimmt für Remote-Worker sowohl lokal als auch in Cloud-Umgebungen weniger Zeit in Anspruch als ein VPN. Der Zugriff auf Ihre Anwendungen wird dabei über einen einzigen Kontrollpunkt verwaltet.
Was ist Identity-Aware Proxy?
Identity-Aware Proxy (IAP) ist ein Google Cloud-Dienst, der an Ihre Anwendung gesendete Anfragen abfängt, den Nutzer, der die Anfrage stellt, über den Google Identity Service authentifiziert und die Anfragen nur weiterleitet, wenn sie von einem Nutzer stammen, der für den Zugriff auf die Anwendung autorisiert ist. Außerdem können die Anfrageheader so geändert werden, dass sie Informationen über den authentifizierten Nutzer enthalten.
Lerninhalte
- So konfigurieren Sie eine serverlose Netzwerk-Endpunktgruppe (NEG)
- Load-Balancer konfigurieren
- IAP aktivieren, um den Zugriff einzuschränken
- Zugriff mit IAP einschränken
2. Einrichtung und Anforderungen
Umgebung zum selbstbestimmten Lernen einrichten
- Melden Sie sich in der Google Cloud Console an und erstellen Sie ein neues Projekt oder verwenden Sie ein vorhandenes Projekt. Wenn Sie noch kein Gmail- oder Google Workspace-Konto haben, müssen Sie eines erstellen.
- Der Projektname ist der Anzeigename für die Projektteilnehmer. Es handelt sich um eine Zeichenfolge, die von Google APIs nicht verwendet wird. Sie können sie jederzeit aktualisieren.
- Die Projekt-ID ist für alle Google Cloud-Projekte eindeutig und unveränderlich. Sie kann nach dem Festlegen nicht mehr geändert werden. Die Cloud Console generiert automatisch einen eindeutigen String. ist Ihnen meist egal, was es ist. In den meisten Codelabs musst du auf die Projekt-ID verweisen, die üblicherweise als
PROJECT_ID
gekennzeichnet ist. Wenn Ihnen die generierte ID nicht gefällt, können Sie eine weitere zufällige ID erstellen. Alternativ können Sie einen eigenen verwenden und nachsehen, ob er verfügbar ist. Sie kann nach diesem Schritt nicht mehr geändert werden und bleibt für die Dauer des Projekts bestehen. - Zur Information gibt es noch einen dritten Wert, die Projektnummer, die von manchen APIs verwendet wird. Weitere Informationen zu allen drei Werten finden Sie in der Dokumentation.
- Als Nächstes müssen Sie in der Cloud Console die Abrechnung aktivieren, um Cloud-Ressourcen/APIs verwenden zu können. Dieses Codelab sollte möglichst wenig kosten. Wenn Sie Ressourcen herunterfahren möchten, um über diese Anleitung hinaus keine Kosten zu verursachen, können Sie die von Ihnen erstellten Ressourcen oder das gesamte Projekt löschen. Neue Google Cloud-Nutzer haben Anspruch auf eine kostenlose Testversion mit 300$Guthaben.
Umgebung einrichten
- Projekt- und ressourcenbezogene Umgebungsvariablen erstellen
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
- IAP und Cloud Resource Manager Service APIs aktivieren
gcloud services enable \
iap.googleapis.com \
cloudresourcemanager.googleapis.com \
cloudidentity.googleapis.com \
compute.googleapis.com
- Klonen Sie das Repository der Beispielanwendung und rufen Sie das Verzeichnis auf
git clone https://github.com/GoogleCloudPlatform/cymbal-eats.git && cd cymbal-eats/employee-ui
- Stellen Sie das Mitarbeiterportal mithilfe des Setupskripts bereit. Warten Sie, bis das Skript abgeschlossen ist, bevor Sie mit dem nächsten Schritt fortfahren
./setup.sh
Beispielausgabe
... 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
- Klicken Sie auf den Link Service-URL.
3. Serverlose Netzwerk-Endpunktgruppe (NEG) konfigurieren
Sie erstellen eine serverlose Netzwerk-Endpunktgruppe( serverlose NEG) für den Cloud Run-Dienst über die Mitarbeiter-UI. Mit serverlosen NEGs können Sie serverlose Google Cloud-Anwendungen mit externem HTTP(S)-Load-Balancing verwenden.
- Erstellen Sie eine Netzwerk-Endpunktgruppe für den Mitarbeiter-UI-Dienst.
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
Beispielausgabe
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].
Back-End-Dienst erstellen und serverlose NEG hinzufügen
Ein Back-End-Dienst definiert, wie Cloud Load Balancing Traffic verteilt. Die Back-End-Dienstkonfiguration enthält eine Reihe von Werten, z. B. das Protokoll für die Verbindung mit Back-Ends, verschiedene Verteilungs- und Sitzungseinstellungen, Systemdiagnosen und Zeitüberschreitungen. Mit diesen Einstellungen können Sie genau steuern, wie sich Ihr Load-Balancer verhält.
- Backend-Dienst erstellen
gcloud compute backend-services create employee-ui-iap-backend \
--global
Beispielausgabe
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
- Serverloses NEG als Back-End zum Back-End-Dienst hinzufügen
gcloud compute backend-services add-backend employee-ui-iap-backend \
--global \
--network-endpoint-group=employee-ui-iap-neg \
--network-endpoint-group-region=$REGION
Beispielausgabe
Updated [https://www.googleapis.com/compute/v1/projects/cymbal-eats-18147-25762/global/backendServices/employee-ui-iap-backend].
- Erstellen Sie eine URL-Zuordnung, um eingehende Anfragen an den Back-End-Dienst weiterzuleiten.
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. Load-Balancer-Komponenten konfigurieren
Das folgende Diagramm zeigt, wie der Load-Balancer ein serverloses NEG-Back-End verwendet, um Anfragen an einen serverlosen Cloud Run-Dienst zu leiten.
Statische IP-Adresse reservieren
- Statische IPv4-Adresse reservieren und Domain speichern
gcloud compute addresses create employee-ui-iap-ip \
--network-tier=PREMIUM \
--ip-version=IPV4 \
--global
Beispielausgabe
Created [https://www.googleapis.com/compute/v1/projects/cymbal-eats-18147-25762/global/addresses/employee-ui-iap-ip].
- Domain „nip.io“ speichern
export DOMAIN=$(gcloud compute addresses list --filter employee-ui-iap-ip --format='value(ADDRESS)').nip.io
Von Google verwaltete SSL-Zertifikatsressource erstellen
- Von Google verwaltete SSL-Zertifikatsressource erstellen
gcloud compute ssl-certificates create employee-ui-iap-cert \
--description=employee-ui-iap-cert \
--domains=$DOMAIN \
--global
Beispielausgabe
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
Ziel-HTTPS-Proxy erstellen
- Erstellen Sie den Ziel-HTTPS-Proxy, um Anfragen an Ihre URL-Zuordnung zu leiten
gcloud compute target-https-proxies create employee-ui-iap-http-proxy \
--ssl-certificates employee-ui-iap-cert \
--url-map employee-ui-iap-url-map
Beispielausgabe
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:
Weiterleitungsregeln konfigurieren
- Weiterleitungsregel erstellen, um eingehende Anfragen an den Proxy weiterzuleiten
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
Beispielausgabe
Created [https://www.googleapis.com/compute/v1/projects/cymbal-eats-18147-25762/global/forwardingRules/employee-ui-iap-forwarding-rule].
Eingehenden Traffic auf den Cloud Run-Dienst beschränken
Beschränken Sie den eingehenden Traffic auf interne Anfragen und Anfragen, die über das HTTP(S)-Load-Balancing eingehen.
- Aktualisieren Sie den Dienst, um nur eingehenden Traffic von internen Anfragen und Anfragen über den HTTP(S)-Load-Balancer zuzulassen.
gcloud run services update employee-ui-service \
--ingress internal-and-cloud-load-balancing \
--region $REGION
Beispielausgabe
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
- Klicken Sie auf den Link Service-URL.
Der Zugriff auf die URL des Cloud Run-Dienstes wird jetzt als verboten angezeigt.
5. Cloud Identity-Aware Proxy (IAP) für den Load-Balancer aktivieren
Mit IAP können Sie eine zentrale Autorisierungsebene für Anwendungen einrichten, auf die über HTTPS zugegriffen wird. Anstelle von Firewalls auf Netzwerkebene können Sie ein Zugriffssteuerungsmodell auf Anwendungsebene verwenden.
OAuth-Zustimmungsbildschirm konfigurieren
Eine Marke ist der OAuth-Zustimmungsbildschirm, der Branding-Informationen für Nutzer enthält. Marken können auf interne oder öffentliche Nutzer beschränkt sein. Bei einer internen Marke kann ein Mitglied derselben Google Workspace-Organisation wie das Projekt auf den OAuth-Ablauf zugreifen. Eine öffentliche Marke macht den OAuth-Vorgang für jeden zugänglich, der Zugriff auf das Internet hat.
- Marke erstellen
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
Beispielausgabe
Created [462858740426]. applicationTitle: Cymbal Eats name: projects/462858740426/brands/462858740426 orgInternalOnly: true
IAP-OAuth-Client erstellen
- Erstellen Sie einen Kunden mit dem Markennamen aus dem vorherigen Schritt
gcloud alpha iap oauth-clients create \
projects/$PROJECT_ID/brands/$PROJECT_NUMBER \
--display_name=cymbal-eats-employee-ui
Beispielausgabe
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]
- Name, ID und Secret des Clients speichern
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ählen Sie in der Cloud Console das Projekt aus dem Drop-down-Menü für die Projektauswahl aus.
- Rufen Sie in der Cloud Console den OAuth-Zustimmungsbildschirm auf.
- Klicken Sie unter Nutzertyp auf EXTERN VERWENDEN.
- Wählen Sie als Veröffentlichungsstatus „Test“ aus.
- Klicke auf BESTÄTIGEN.
6. Zugriff mit IAP einschränken
Schränken Sie den Zugriff auf den Back-End-Dienst mit IAP ein und prüfen Sie dann, ob die Anwendung nicht zugänglich ist.
- IAP für den Back-End-Dienst aktivieren
gcloud iap web enable --resource-type=backend-services \
--oauth2-client-id=$CLIENT_ID \
--oauth2-client-secret=$CLIENT_SECRET \
--service=employee-ui-iap-backend
IAP-Konfiguration prüfen
- Prüfen, ob das SSL-Zertifikat AKTIV ist
gcloud compute ssl-certificates list --format='value(MANAGED_STATUS)'
- Service-URL abrufen
echo https://$DOMAIN
Beispielausgabe
https://34.102.234.98.nip.io
- Klicken Sie auf die Dienst-URL, um das Mitarbeiterportal zu öffnen.
- Melden Sie sich mit Ihren Lab-Anmeldedaten an.
- Schließen Sie den Browser.
Nutzern Zugriff auf das Mitarbeiterportal gewähren
- Fügen Sie eine IAM-Richtlinienbindung für die Rolle
'roles/iap.httpsResourceAccessor'
für den im vorherigen Schritt erstellten Nutzer hinzu
gcloud iap web add-iam-policy-binding \
--resource-type=backend-services \
--service=employee-ui-iap-backend \
--member=user:$USER_EMAIL \
--role='roles/iap.httpsResourceAccessor'
Beispielausgabe
Updated IAM policy for backend service [projects/462858740426/iap_web/compute/services/employee-ui-iap-backend].
Dienstzugriff testen
Prüfen, ob der Zugriff auf das Mitarbeiterportal gewährt wurde
- Service-URL abrufen
echo https://$DOMAIN
Beispielausgabe
https://34.102.234.98.nip.io
- Klicken Sie auf die Dienst-URL, um das Mitarbeiterportal zu öffnen.
Sie sollten jetzt Zugriff auf das Mitarbeiterportal haben.
(Optional) Stellen Sie alle Abhängigkeiten bereit. Die Bereitstellung dieser Mikrodienste kann etwa 20 Minuten dauern.
unset ORDER_SERVICE_URL
unset INVENTORY_SERVICE_URL
unset MENU_SERVICE_URL
cd ~/cymbal-eats
./setup.sh
./get-site-urls.sh
7. Glückwunsch!
Glückwunsch, du hast das Codelab abgeschlossen.
Nächste Schritte:
Weitere Codelabs von Cymbal Eats:
- Cloud Workflows mit Eventarc auslösen
- Ereignisverarbeitung aus Cloud Storage auslösen
- Verbindung zu Private CloudSQL über Cloud Run herstellen
- Verbindung zu vollständig verwalteten Datenbanken über Cloud Run herstellen
- Cloud Run-Jobs mit Cloud Scheduler auslösen
- Sichere Bereitstellung in Cloud Run
- Eingehenden Cloud Run-Traffic sichern
- Verbindung zu privater AlloyDB über GKE Autopilot herstellen
Bereinigen
Damit Ihrem Google Cloud-Konto die in dieser Anleitung verwendeten Ressourcen nicht in Rechnung gestellt werden, können Sie entweder das Projekt löschen, das die Ressourcen enthält, oder das Projekt beibehalten und die einzelnen Ressourcen löschen.
Projekt löschen
Am einfachsten vermeiden Sie weitere Kosten durch Löschen des für die Anleitung erstellten Projekts.