1. Einführung
Das Google Cloud Load Balancing wird an den weltweiten Edges des Google-Netzwerks in seinen Points of Presence (POPs) implementiert. 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 Distributed Denial of Service-Angriffen und Web Application Firewalls (WAF). Cloud Armor ist eng mit dem Google Cloud TCP-Proxy-Load Balancer verknüpft und ermöglicht es Ihnen, eingehenden Traffic auf unerwünschte Anfragen zu prüfen. Mit der Ratenbegrenzung dieses Dienstes können Sie den Traffic zu Backend-Ressourcen basierend auf dem Anfragevolumen einschränken und verhindern, dass unerwünschter Traffic Ressourcen in Ihrem VPC-Netzwerk (Virtual Private Cloud) verbraucht.
Mit TCP/SSL-Proxy-Load Balancern von Google Cloud können Sie TCP-/SSL-Traffic zwischen Ihren Backend-Diensten proxyen.
In diesem Lab erstellen Sie einen TCP/SSL-Load Balancer mit einem Back-End-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
- IP-Ausschlussliste für TCP/SSL-Proxy-Load Balancer in Cloud Armor erstellen
- Regel für die Beschränkung der Zugriffsrate für TCP-Proxy-Load Balancer in Cloud Armor erstellen
- Sicherheitsrichtlinie einem TCP/SSL-Load Balancing-Back-End-Dienst hinzufügen
Voraussetzungen
- Grundlegende Kenntnisse der Google Compute Engine ( Codelab)
- Grundkenntnisse in den Bereichen Netzwerk und TCP/IP
- Grundkenntnisse zu Unix/Linux-Befehlszeilen
- Es ist hilfreich, sich mit Networking in the Google Cloud (Netzwerktechnik in der Google Cloud) vertraut zu machen.
2. Voraussetzungen
Einrichten der Umgebung im eigenen Tempo
- 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 ein Konto erstellen.
Hinweis: Sie können ganz einfach auf die Cloud Console zugreifen, indem Sie sich die URL merken: console.cloud.google.com.
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. Sie 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“ belassen. Wenn Sie ein Google Workspace-Konto verwenden, wählen Sie einen Standort 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 Ausführung dieses Codelabs sollte nur wenige Kosten verursachen, wenn überhaupt. Folgen Sie unbedingt der Anleitung im Abschnitt „Bereinigen“, um Ressourcen herunterzufahren, damit keine weiteren Kosten anfallen. Neuen Nutzern der Google Cloud Platform steht das kostenlose Testprogramm mit einem Guthaben von 300$ zur Verfügung.
Cloud Shell starten
Sie können Google Cloud zwar per Fernzugriff von Ihrem Laptop aus nutzen, in diesem Codelab verwenden Sie jedoch Google Cloud Shell, 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 Minuten dauern. Wenn der Vorgang abgeschlossen ist, sollte in etwa Folgendes angezeigt werden:
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 auf Google Cloud. Dadurch werden Netzwerkleistung und Authentifizierung erheblich verbessert. Für die Arbeit in diesem Lab benötigen Sie nur 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
Alle erforderlichen Dienste aktivieren
gcloud services enable compute.googleapis.com gcloud services enable logging.googleapis.com gcloud services enable monitoring.googleapis.com
3. Back-End-Dienste erstellen
Erstellen Sie zwei Instanzen: 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"
Instanz 1-b2 in der Zone us-central1-b erstellen
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"
Instanzgruppe „vm-ig1“ erstellen
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
Instanzen der Instanzgruppe hinzufügen
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 LB-IP-Adresse.
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 Load Balancer mit dem folgenden Befehl:
Curl LB_IP:110
Als Nächstes VM für die Validierung der Zugriffsverweigerung für den LB erstellen
Sie sollten zwei Instanzen mit jeweils einer öffentlichen IP-Adresse erstellen und sie „test-server1“ und „test-server2“ nennen.
6. Sicherheitsrichtlinie in Cloud Armor erstellen
In diesem Abschnitt erstellen Sie eine Back-End-Sicherheitsrichtlinie und zwei Regeln in der Richtlinie in Cloud Armor.
Mit der ersten Regel wird der Zugriff auf den TCP-Load Balancer für eine begrenzte Anzahl von IP-Adressen verhindert, indem eine Sicherheitsrichtlinie festgelegt wird, die bestimmte IP-Adressen ablehnt. Die zweite Regel führt eine Ratenbegrenzung durch.
- Erstellen Sie in Cloud Shell(eine Anleitung zur Verwendung von Cloud Shell finden Sie unter „Einrichtung und Anforderungen“ im Abschnitt „Cloud Shell starten“) eine Sicherheitsrichtlinie für Back-End-Dienste mit dem Namen „rate-limit-and-deny-tcp“ folgendermaßen:
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"
Cloud Armor-Sicherheitsrichtlinie „rate-limit-and-deny-tcp“ eine Ratenbegrenzungsregel hinzufügen
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
Richtlinie an den TCP-Proxy-Back-End-Dienst anhängen:
Führen Sie den folgenden Befehl aus, um sicherzustellen, dass die Sicherheitsrichtlinie mit dem TCP-Proxy-Back-End-Dienst verknüpft ist.
gcloud compute backend-services update my-tcp-lb --security-policy \ rate-limit-and-deny-tcp
Logging auf TCP-Proxy-Load Balancer aktivieren
gcloud beta compute backend-services update my-tcp-lb \ --enable-logging --logging-sample-rate=1
7. Regel für Sperrliste prüfen
Bestätigen Sie die Regel für die Sperrliste, indem Sie sich auf dem Testserver anmelden, dessen IP-Adresse in der Regel für die Sperrliste angegeben wurde, und den folgenden Befehl ausführen:
Curl LB_IP:110
Bei sofortigen Anfragen kann eine Antwort vom Load Balancer zurückgegeben werden. 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 IP-Ablehnungsregel zu prüfen.
Rufen Sie Cloud Logging auf und wählen Sie unter „Ressourcen“ den Ressourcentyp „tcp_ssl_proxy_rule“ aus. Legen Sie als Backend-Ziel „my-tcp-lb“ fest.
Mit den für die Filterung definierten Ressourcen können wir prüfen, ob die IP-Ausschlussregel aufgrund des PRIORITY-Werts von 1000 im Logeintrag aktiv ist und die konfigurierte Aktion DENY (Ablehnen) aktiv ist, da beide von der Ausschlussregel und der IP-Adresse, die abgelehnt wird, angewiesen wurden, wie unten dargestellt.
8. Regel für die Ratenbegrenzung überprüfen
Prüfen Sie, ob die Regel für die Ratenbegrenzung in Kraft ist, indem Sie in kurzer Zeit viele Anfragen senden, die den definierten Grenzwert (5 Anfragen pro Minute) überschreiten.
Klicken Sie dann im Cloud Armor-Dienst auf „Logs ansehen“. Sie gelangen zu Cloud Logging, wo Sie die Logs nach dem Load Balancer filtern können, um die Cloud Armor-Logs in Echtzeit zu sehen.
Ein Eintrag für die Ratenbegrenzung sollte wie im Screenshot unten aussehen. Wir können anhand des PRIORITY-Werts 3000 im Logeintrag und der konfigurierten Aktion prüfen, ob die Regel für die Ratenbegrenzung in Kraft ist. Die Aktion RATE BASED BAN ist gemäß der Regel für die Ratenbegrenzung in Kraft.
9. Umgebung bereinigen
Bereinigen Sie die erstellte Infrastruktur, um Kosten für ungenutzte Infrastruktur zu vermeiden.
Am schnellsten löschen Sie das gesamte Projekt in GCP, damit keine in der Schwebe befindlichen Ressourcen übrig bleiben. Sie können die einzelnen Ressourcen aber auch mit den folgenden Befehlen löschen.
Der TCP-Proxy-Load-Balancer
gcloud compute target-tcp-proxies delete my-tcp-lb
Instanzgruppe
gcloud compute instance-groups unmanaged delete vm-ig1
Die beiden erstellten VM-Testinstanzen
gcloud compute instances delete Instance_name --zone=instance_zone
einen 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
Cloud Armor-Sicherheitsrichtlinie
gcloud compute security-policies delete rate-limit-and-deny-tcp