Sichere serverlose Anwendung mit Identity-Aware Proxy (IAP)

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 Identity-Aware Proxy (IAP), um den Portalzugriff ohne Virtual Private Network (VPN) zu sichern. IAP vereinfacht die Implementierung eines Zero-Trust-Zugriffsmodells und ist für Remote-Mitarbeiter sowohl in lokalen als auch in Cloud-Umgebungen weniger zeitaufwendig als ein VPN. Außerdem bietet es einen zentralen Kontrollpunkt für die Verwaltung des Zugriffs auf Ihre Anwendungen.

94b06525c85408ad.png

Was ist Identity-Aware Proxy?

Identity-Aware Proxy (IAP) ist ein Google Cloud-Dienst, der an Ihre Anwendung gesendete Anfragen abfängt, den anfragenden Nutzer über den Google Identity Service authentifiziert und die Anfragen nur weiterleitet, wenn sie von einem Nutzer stammen, der zum Zugriff auf die Anwendung autorisiert ist. Außerdem kann der Dienst Anfrageheader so ändern, dass sie Informationen über den authentifizierten Nutzer enthalten.

Lerninhalte

  • Serverlose Netzwerk-Endpunktgruppe (NEG) konfigurieren
  • Load-Balancer konfigurieren
  • IAP aktivieren, um den Zugriff einzuschränken
  • Zugriff mit IAP beschränken

2. Einrichtung und Anforderungen

Umgebung zum selbstbestimmten Lernen einrichten

  1. 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.

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • Der Projektname ist der Anzeigename für die Teilnehmer dieses Projekts. Es handelt sich um einen String, der nicht von Google APIs verwendet wird. Sie können ihn jederzeit aktualisieren.
  • Die Projekt-ID ist für alle Google Cloud-Projekte eindeutig und unveränderlich (kann nach dem Festlegen nicht mehr geändert werden). In der Cloud Console wird automatisch ein eindeutiger String generiert. Normalerweise ist es nicht wichtig, wie dieser String aussieht. In den meisten Codelabs müssen Sie auf die Projekt-ID verweisen (sie wird in der Regel als PROJECT_ID angegeben). Wenn Ihnen die generierte ID nicht gefällt, können Sie eine andere zufällige ID generieren. Alternativ können Sie es mit einem eigenen versuchen und sehen, ob es verfügbar ist. Sie kann nach diesem Schritt nicht mehr geändert werden und bleibt für die Dauer des Projekts bestehen.
  • Zur Information: Es gibt einen dritten Wert, die Projektnummer, die von einigen APIs verwendet wird. Weitere Informationen zu diesen drei Werten
  1. Als Nächstes müssen Sie die Abrechnung in der Cloud Console aktivieren, um Cloud-Ressourcen/-APIs zu verwenden. Die Durchführung dieses Codelabs sollte keine oder nur geringe Kosten verursachen. Wenn Sie Ressourcen herunterfahren möchten, damit Ihnen nach Abschluss dieser Anleitung keine Kosten mehr in Rechnung gestellt werden, können Sie die von Ihnen erstellten Ressourcen oder das gesamte Projekt löschen. Neue Nutzer von Google Cloud kommen für das Programm für kostenlose Testversionen mit einem Guthaben von 300$ infrage.

Umgebung einrichten

  1. 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
  1. IAP- und Cloud Resource Manager-Dienst-APIs aktivieren
gcloud services enable \
    iap.googleapis.com \
    cloudresourcemanager.googleapis.com \
    cloudidentity.googleapis.com \
    compute.googleapis.com
  1. Beispiel-App-Repository klonen und zum Verzeichnis wechseln
git clone https://github.com/GoogleCloudPlatform/cymbal-eats.git && cd cymbal-eats/employee-ui
  1. Stellen Sie das Mitarbeiterportal mithilfe des Einrichtungs-Scripts 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
  1. Klicken Sie auf den Link „Dienst-URL“.

86416f68c0b8152a.png

3. Serverlose Netzwerk-Endpunktgruppe (NEG) konfigurieren

Sie erstellen eine serverlose Netzwerk-Endpunktgruppe( serverlose NEG) für den Cloud Run-Dienst der Mitarbeiter-UI. Mit serverlosen NEGs können Sie serverlose Google Cloud-Anwendungen mit externem HTTP(S)-Load-Balancing verwenden.

2abe669e53c27186.png

  1. Erstellen Sie eine Netzwerk-Endpunktgruppe für den Dienst der Mitarbeiter-UI.
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 Konfiguration des Back-End-Dienstes enthält eine Reihe von Werten, z. B. das Protokoll, das für die Verbindung zu Back-Ends verwendet wird, verschiedene Verteilungs- und Sitzungseinstellungen, Systemdiagnosen und Zeitüberschreitungen. Mit diesen Einstellungen können Sie das Verhalten Ihres Load-Balancers genau steuern.

  1. 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
  1. Fügen Sie dem Backend-Dienst das serverlose NEG als Backend hinzu.
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].
  1. URL-Zuordnung erstellen, um eingehende Anfragen an den Backend-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

Im folgenden Diagramm verwendet der Load Balancer ein serverloses NEG-Backend, um Anfragen zu einem serverlosen Cloud Run-Dienst zu leiten.

335f4674737a6514.png

Statische IP-Adresse reservieren

  1. 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].
  1. Nip.io-Domain speichern
export DOMAIN=$(gcloud compute addresses list --filter employee-ui-iap-ip --format='value(ADDRESS)').nip.io

Von Google verwaltete SSL-Zertifikatsressource erstellen

  1. 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

HTTPS-Proxy erstellen

  1. HTTPS-Zielproxy erstellen, um Anfragen an Ihre URL-Zuordnung weiterzuleiten
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

  1. 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 für den Cloud Run-Dienst einschränken

Eingehenden Traffic so einschränken, dass nur interne Anfragen und Anfragen, die über HTTP(S)-Load-Balancing eingehen, akzeptiert werden.

26cb0b2a9162e7ab.png

  1. Dienst so aktualisieren, dass nur eingehender Traffic von internen Anfragen und Anfragen über HTTP(S)-Load-Balancer zugelassen wird
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
  1. Klicken Sie auf den Link „Dienst-URL“.

8505fde7e0784bf1.png

Der Zugriff auf die Cloud Run-Dienst-URL 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. Sie können ein Zugriffssteuerungsmodell auf Anwendungsebene anstelle von Firewalls auf Netzwerkebene verwenden.

d9740402a74370a8.png

Eine Marke ist der OAuth-Zustimmungsbildschirm, der Markeninformationen für Nutzer enthält. Marken können auf interne oder öffentliche Nutzer beschränkt sein. Eine interne Marke ermöglicht den Zugriff auf den OAuth-Ablauf durch ein Mitglied derselben Google Workspace-Organisation wie das Projekt. Eine öffentliche Marke macht den OAuth-Ablauf für jeden mit Internetzugang zugänglich.

  1. 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

  1. Client mit dem Markennamen aus dem vorherigen Schritt erstellen
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]
  1. Clientname, ‑ID und ‑Secret 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)')
  1. Wählen Sie in der Cloud Console das Projekt aus dem Drop-down-Menü zur Projektauswahl aus.
  2. Rufen Sie in der Cloud Console den OAuth-Zustimmungsbildschirm auf.

bcb460f3ab5241f4.png

  1. Klicken Sie unter „Nutzertyp“ auf „EXTERN MACHEN“.
  2. „Testen“ als Veröffentlichungsstatus auswählen

27fd7de6e7b7ef21.png

  1. Klicken Sie auf „BESTÄTIGEN“.

6. Zugriff mit IAP beschränken

Beschränken Sie den Zugriff auf den Backend-Dienst mit IAP und prüfen Sie dann, ob die Anwendung nicht mehr zugänglich ist.

  1. IAP für den Backend-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

  1. Prüfen, ob das SSL-Zertifikat AKTIV ist
gcloud compute ssl-certificates list --format='value(MANAGED_STATUS)'
  1. Service-URL abrufen
echo https://$DOMAIN

Beispielausgabe

https://34.102.234.98.nip.io
  1. Klicken Sie auf die Dienst-URL, um das Mitarbeiterportal zu öffnen.

352b600209c3fb33.png

  1. Melden Sie sich mit Ihren Lab-Anmeldedaten an.

f7e0318388aa0739.png

  1. Schließen Sie den Browser.

Nutzern Zugriff auf das Mitarbeiterportal gewähren

  1. IAM-Richtlinienbindung für die Rolle 'roles/iap.httpsResourceAccessor' für den im vorherigen Schritt erstellten Nutzer hinzufügen
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

Bestätigen, dass der Zugriff auf das Mitarbeiterportal gewährt wurde

  1. Service-URL abrufen
echo https://$DOMAIN

Beispielausgabe

https://34.102.234.98.nip.io
  1. Klicken Sie auf die Dienst-URL, um das Mitarbeiterportal zu öffnen.

86416f68c0b8152a.png

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!

Herzlichen Glückwunsch! Sie haben das Codelab abgeschlossen.

Nächste Schritte:

Weitere Codelabs zu Cymbal Eats:

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.