1. Einführung
Das Load-Balancing von Google Cloud wird an den Edges des Google-Netzwerks in den weltweiten Points of Presence (POPs) von Google bereitgestellt. Der an einen TCP-Proxy-Load-Balancer geleitete Nutzertraffic gelangt in den POP, der dem Nutzer am nächsten liegt, und wird dann über das globale Google-Netzwerk auf das nächstgelegene Backend mit ausreichender Kapazität verteilt.
Cloud Armor ist das System von Google zur Erkennung von DDoS-Angriffen (Distributed Denial of Service) und Web Application Firewall (WAF). Cloud Armor ist eng mit dem TCP-Proxy-Load-Balancer von Google Cloud verknüpft und ermöglicht es Ihnen, eingehenden Traffic auf unerwünschte Anfragen zu prüfen. Mit der Ratenbegrenzungsfunktion dieses Dienstes können Sie den Traffic zu Backend-Ressourcen basierend auf dem Anfragevolumen begrenzen und verhindern, dass unerwünschter Traffic Ressourcen in Ihrem VPC-Netzwerk (Virtual Private Cloud) verbraucht.
Mit den TCP/SSL-Proxy-Load-Balancern von Google Cloud können Sie TCP/ SSL-Traffic zwischen Ihren Backend-Diensten weiterleiten.
In diesem Lab erstellen Sie einen TCP/SSL-Load-Balancer mit einem Backend-Dienst und beschränken den Zugriff auf den Load-Balancer auf eine bestimmte Gruppe von Nutzerclients.

Lerninhalte
- TCP/SSL-Proxy-Load-Balancer erstellen
- Cloud Armor-Sicherheitsrichtlinie erstellen
- Regel für die IP-Sperrliste für den TCP/SSL-Proxy-Load-Balancer in Cloud Armor erstellen
- Regel zur Ratenbegrenzung für den TCP-Proxy-Load-Balancer in Cloud Armor erstellen
- Sicherheitsrichtlinie zu einem Backend-Dienst für das TCP/SSL-Load-Balancing hinzufügen
Voraussetzungen
- Grundkenntnisse zu Google Compute Engine ( Codelab)
- Grundkenntnisse in den Bereichen Netzwerk und TCP/IP
- Grundkenntnisse zu Unix/Linux-Befehlszeilen
- Es ist hilfreich, wenn Sie die Tour zu Netzwerken in der GCP mit Netzwerke in Google Cloud abgeschlossen haben.
2. Voraussetzungen
Umgebung zum selbstbestimmten Lernen einrichten
- Melden Sie sich in der Cloud Console an und erstellen Sie ein neues Projekt oder verwenden Sie ein vorhandenes. Wenn Sie noch kein Gmail- oder Google Workspace-Konto haben, müssen Sie eines erstellen.
Hinweis: Wir empfehlen Ihnen, sich die URL console.cloud.google.com zu merken Damit können Sie mühelos auf die Cloud Console zugreifen.



Notieren Sie sich die Projekt-ID, also den projektübergreifend nur einmal vorkommenden Namen eines Google Cloud-Projekts. Der oben angegebene Name ist bereits vergeben und kann leider nicht mehr verwendet werden. Er wird später in diesem Codelab als PROJECT_ID bezeichnet.
Hinweis: Wenn Sie ein Gmail-Konto verwenden, können Sie den Standardspeicherort auf „Keine Organisation“ festgelegt lassen. Wenn Sie ein Google Workspace-Konto verwenden, wählen Sie einen Speicherort aus, der für Ihre Organisation sinnvoll ist.
- Als Nächstes müssen Sie die Abrechnung in der Cloud Console aktivieren, um Google Cloud-Ressourcen verwenden zu können.
Die Durchführung dieses Codelabs sollte wenig oder gar nichts kosten. Folgen Sie der Anleitung im Abschnitt „Bereinigen“, in der Sie erfahren, wie Sie Ressourcen herunterfahren, damit Ihnen nach Abschluss dieses Codelabs keine Kosten entstehen. Neue Google Cloud-Nutzer können das kostenlose Testprogramm im Wert von 300$ nutzen.
Cloud Shell starten
Während Sie Google Cloud von Ihrem Laptop aus per Fernzugriff nutzen können, wird in diesem Codelab Google Cloud Shell verwendet, eine Befehlszeilenumgebung, die in der Cloud ausgeführt wird.
Klicken Sie in der GCP Console oben rechts in der Symbolleiste auf das Cloud Shell-Symbol:

Die Bereitstellung und Verbindung mit der Umgebung sollte nur wenige Augenblicke dauern. Wenn der Vorgang abgeschlossen ist, sollten Sie Folgendes sehen:

Diese virtuelle Maschine verfügt über sämtliche Entwicklertools, die Sie benötigen. Sie bietet ein Basisverzeichnis mit 5 GB nichtflüchtigem Speicher und läuft in Google Cloud, was die Netzwerkleistung und Authentifizierung erheblich verbessert. Für alle Aufgaben in diesem Lab benötigen Sie lediglich einen Browser.
Hinweis
Prüfen Sie in Cloud Shell, ob Ihre Projekt-ID eingerichtet ist.
gcloud config list project gcloud config set project [YOUR-PROJECT-NAME] PROJECT_ID=[YOUR-PROJECT-NAME] echo $PROJECT_ID
APIs aktivieren
Aktivieren Sie alle erforderlichen Dienste.
gcloud services enable compute.googleapis.com gcloud services enable logging.googleapis.com gcloud services enable monitoring.googleapis.com
3. Backend-Dienste erstellen
Erstellen Sie zwei Instanzen: Erstellen Sie instance1-b1 in der Zone us-central1-b.
gcloud compute instances create vm-1-b1 \
--image-family debian-9 \
--image-project debian-cloud \
--tags tcp-lb \
--zone us-central1-b \
--metadata startup-script="#! /bin/bash
sudo apt-get update
sudo apt-get install apache2 -y
sudo sed -i '/Listen 80/c\Listen 110' /etc/apache2/ports.conf
sudo service apache2 restart
echo '<!doctype html><html><body><h1>This is VM1-b1 in central1-b</h1></body></html>' | tee /var/www/html/index.html
EOF"
Erstellen Sie instance1-b2 in der Zone us-central1-b.
gcloud compute instances create vm-1-b2 \
--image-family debian-9 \
--image-project debian-cloud \
--tags tcp-lb \
--zone us-central1-b \
--metadata startup-script="#! /bin/bash
sudo apt-get update
sudo apt-get install apache2 -y
sudo sed -i '/Listen 80/c\Listen 110' /etc/apache2/ports.conf
sudo service apache2 restart
echo '<!doctype html><html><body><h1>This is VM1-b2 in central1-b</h1></body></html>' | tee /var/www/html/index.html
EOF"
Erstellen Sie eine Instanzgruppe vm-ig1.
gcloud compute instance-groups unmanaged create vm-ig1 --zone us-central1-b
Erstellen Sie einen benannten Port für die Instanzgruppe. In diesem Lab verwenden wir Port 110.
gcloud compute instance-groups set-named-ports vm-ig1 \ --named-ports tcp 110:110 --zone us-central1-b
Fügen Sie die Instanzen der Instanzgruppe hinzu.
gcloud compute instance-groups unmanaged add-instances vm-ig1 \ --instances vm-1-b1,vm-1-b2 --zone us-central1-b
4. Load-Balancer konfigurieren
Als Nächstes erstellen wir eine Systemdiagnose.
gcloud compute health-checks create tcp my-tcp-health-check --port 110
Backend-Dienst erstellen
gcloud compute backend-services create my-tcp-lb --global-health-checks --global \ --protocol TCP --health-checks my-tcp-health-check --timeout 5m --port-name tcp110
Instanzgruppe dem Backend-Dienst hinzufügen
gcloud compute backend-services add-backend my-tcp-lb --global --instance-group \ vm-ig1 --instance-group-zone us-central1-b --balancing-mode UTILIZATION \ --max-utilization 0.8
Ziel-TCP-Proxy konfigurieren
gcloud compute target-tcp-proxies create my-tcp-lb-target-proxy --backend-service \ my-tcp-lb --proxy-header NONE
Globale statische IPv4-Adressen reservieren
Über diese IP-Adresse greifen Sie auf Ihren Dienst mit Load-Balancing zu.
gcloud compute addresses create tcp-lb-static-ipv4 --ip-version=IPV4 --global
Konfigurieren Sie globale Weiterleitungsregeln für die IP-Adresse des Load-Balancers.
gcloud compute forwarding-rules create my-tcp-lb-ipv4-forwarding-rule \
--global --target-tcp-proxy my-tcp-lb-target-proxy --address LB_STATIC_IPV4 \ --ports 110
5. Firewallregel für den TCP-Proxy-Load-Balancer erstellen
gcloud compute firewall-rules create allow-tcplb-and-health \ --source-ranges 130.211.0.0/22,35.191.0.0/16 \ --target-tags tcp-lb \ --allow tcp:110
Testen Sie den erstellten Load-Balancer mit dem folgenden Befehl:
Curl LB_IP:110
Erstellen Sie als Nächstes VMs, um den Zugriff auf den Load-Balancer zu verweigern.
Erstellen Sie zwei Instanzen mit jeweils einer öffentlichen IP-Adresse und den Namen test-server1 und test-server2.
6. Sicherheitsrichtlinie in Cloud Armor erstellen
In diesem Abschnitt erstellen Sie eine Backend-Sicherheitsrichtlinie und zwei Regeln in der Richtlinie in Cloud Armor.
Die erste Regel verweigert einer begrenzten Anzahl von IPs den Zugriff auf den TCP-Load-Balancer, indem eine Sicherheitsrichtlinie festgelegt wird, die bestimmte IPs verweigert. Die zweite Regel führt eine Ratenbegrenzung durch.
- Erstellen Sie in Cloud Shell(Anleitung zur Verwendung von Cloud Shell finden Sie unter „Cloud Shell starten“ im Abschnitt „Einrichtung und Voraussetzungen“) eine Sicherheitsrichtlinie für den Backend-Dienst mit dem Namen „rate-limit-and-deny-tcp“:
gcloud compute security-policies create rate-limit-and-deny-tcp \
--description "policy for tcp proxy rate limiting and IP deny"
Regeln zur Sicherheitsrichtlinie hinzufügen
Fügen Sie als Nächstes der Cloud Armor-Richtlinie „rate-limit-and-deny-tcp“ eine Regel für die Sperrliste hinzu.
gcloud compute security-policies rules create 1000 --action deny --security-policy \ rate-limit-and-deny-tcp --description "deny test-server1" --src-ip-ranges \ "enter-test-server-1ip-here"
Fügen Sie der Cloud Armor-Sicherheitsrichtlinie „rate-limit-and-deny-tcp“ eine Regel zur Ratenbegrenzung hinzu.
gcloud compute security-policies rules create 3000 \ --security-policy=rate-limit-and-deny-tcp \ --expression="true" --action=rate-based-ban --rate-limit-threshold-count=5 \ --rate-limit-threshold-interval-sec=60 --ban-duration-sec=300 \ --conform-action=allow --exceed-action=deny-404 --enforce-on-key=IP
Hängen Sie die Richtlinie an den Backend-Dienst des TCP-Proxys an:
Führen Sie den folgenden Befehl aus, um zu prüfen, ob die Sicherheitsrichtlinie an den Backend-Dienst des TCP-Proxys angehängt ist.
gcloud compute backend-services update my-tcp-lb --security-policy \ rate-limit-and-deny-tcp
Logging für den TCP-Proxy-Load-Balancer aktivieren
gcloud beta compute backend-services update my-tcp-lb \ --enable-logging --logging-sample-rate=1
7. Regel für die Sperrliste validieren
Validieren Sie die Regel für die Sperrliste, indem Sie sich auf dem Testserver anmelden, dessen IP in der Regel für die Sperrliste angegeben wurde, und den folgenden Befehl ausführen:
Curl LB_IP:110
Bei sofortigen Anfragen erhalten Sie möglicherweise eine Antwort vom Load-Balancer. Warten Sie jedoch, bis die Curl-Anfrage abgelehnt oder verworfen wird, und sehen Sie sich dann die Logs in Cloud Logging an, um den Logeintrag für die ausgelöste Regel für die IP-Sperrliste zu prüfen.
Wählen Sie in Cloud Logging unter „Ressourcen“ den Ressourcentyp „tcp_ssl_proxy_rule“ aus und legen Sie das Backend-Ziel als „my-tcp-lb“ fest.
Mit den für die Filterung definierten Ressourcen können wir prüfen, ob die Regel für die IP-Sperrliste wirksam ist. Dies erkennen wir am Wert 1000 für PRIORITY im Logeintrag und daran, dass die konfigurierte Aktion "DENY" wirksam ist, da beide durch die Regel für die Sperrliste und die verweigerte IP-Adresse wie unten dargestellt angewiesen wurden.

8. Regel zur Ratenbegrenzung validieren
Prüfen Sie, ob die Regel zur Ratenbegrenzung wirksam ist, indem Sie viele Anfragen in kurzer Zeit senden, die den definierten Schwellenwert (5 Anfragen pro Minute) überschreiten.
Klicken Sie anschließend im Cloud Armor-Dienst auf „Logs ansehen“. Dadurch gelangen Sie zu Cloud Logging, wo Sie die Logs nach dem Load-Balancer filtern können, um die Cloud Armor-Logs zu sehen, sobald sie eingehen.
Ein Eintrag zur Ratenbegrenzung sollte wie im Screenshot unten aussehen. Wir können prüfen, ob die Regel zur Ratenbegrenzung wirksam ist. Dies erkennen wir am Wert 3000 für PRIORITY im Logeintrag und daran, dass die konfigurierte Aktion RATE BASED BAN wirksam ist, wie in der Regel zur Ratenbegrenzung angegeben.

9. Umgebung bereinigen
Bereinigen Sie die erstellte Infrastruktur, um Kosten für ungenutzte Infrastruktur zu vermeiden.
Am schnellsten geht das, wenn Sie das gesamte Projekt in der GCP löschen, um sicherzustellen, dass keine verwaisten Ressourcen zurückbleiben.Löschen Sie jedoch die einzelnen Ressourcen mit den folgenden Befehlen:
Der TCP-Proxy-Load-Balancer
gcloud compute target-tcp-proxies delete my-tcp-lb
Die Instanzgruppe
gcloud compute instance-groups unmanaged delete vm-ig1
Die beiden erstellten VM-Testinstanzen
gcloud compute instances delete Instance_name --zone=instance_zone
Der Backend-Dienst
gcloud compute backend-services delete BACKEND_SERVICE_NAME
Die Cloud Armor-Regeln in der Richtlinie
gcloud compute security-policies rules delete 1000 \ --security-policy=rate-limit-and-deny-tcp && gcloud compute security-policies rules delete 3000 \ --security-policy=rate-limit-and-deny-tcp
Die Cloud Armor-Sicherheitsrichtlinie
gcloud compute security-policies delete rate-limit-and-deny-tcp