1. Einführung
Google Cloud Load Balancing wird weltweit an den Edge-Punkten des Google-Netzwerks in den Google Points of Presence (POPs) 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 Back-End mit ausreichender Kapazität verteilt.
Cloud Armor ist das WAF-Erkennungssystem (Distributed Denial of Service und Web Application Firewall) von Google. Cloud Armor ist eng mit dem TCP-Proxy-Load-Balancer von Google Cloud gekoppelt und ermöglicht es Ihnen, eingehenden Traffic auf unerwünschte Anfragen zu abfragen. Mit der Ratenbegrenzungsfunktion dieses Dienstes können Sie den Traffic zu Back-End-Ressourcen basierend auf dem Anfragevolumen beschränken und verhindern, dass unerwünschter Traffic Ressourcen in Ihrem VPC-Netzwerk (Virtual Private Cloud) verbraucht.
Mit Google Cloud TCP/SSL-Proxy-Load-Balancern können Sie TCP/ SSL-Traffic zwischen Ihren Back-End-Diensten weiterleiten.
In diesem Codelab erstellen Sie einen TCP/SSL-Proxy-Load-Balancer mit einem Back-End-Dienst und verwenden Cloud Armor, um den Zugriff auf den Load-Balancer auf eine bestimmte Gruppe von Nutzerclients zu beschränken.
Lerninhalte
- So erstellen Sie einen TCP/SSL-Proxy-Load-Balancer
- Cloud Armor-Sicherheitsrichtlinie erstellen
- Anleitung zum Erstellen einer Regel für IP-Ablehnungslisten für den TCP/SSL-Proxy-Load-Balancer in Cloud Armor
- Anleitung zum Erstellen einer Ratenbegrenzungsregel für den TCP-Proxy-Load-Balancer in Cloud Armor
- So fügen Sie die Sicherheitsrichtlinie einem Back-End-Dienst für TCP/SSL-Load-Balancing hinzu
Voraussetzungen
- Grundkenntnisse der Google Compute Engine ( Codelab)
- Grundkenntnisse in den Bereichen Netzwerk und TCP/IP
- Grundkenntnisse zu Unix/Linux-Befehlszeilen
- Es ist hilfreich, eine Tour zum Thema Netzwerk in der GCP mit dem Kurs Networking in the Google Cloud zu absolvieren.
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 Projekt. Wenn Sie noch kein Gmail- oder Google Workspace-Konto haben, müssen Sie eines erstellen.
Hinweis: Sie können ganz einfach auf die Cloud Console zugreifen, wenn Sie sich die URL „console.cloud.google.com“ merken.
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 in diesem Codelab später als PROJECT_ID bezeichnet.
Hinweis: Wenn Sie ein Gmail-Konto verwenden, können Sie die Standardeinstellung „Keine Organisation“ beibehalten. 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 in der Cloud Console die Abrechnung aktivieren, um Google Cloud-Ressourcen nutzen zu können.
Dieses Codelab sollte möglichst wenig kosten. Folgen Sie der Anleitung im Abschnitt „Bereinigen“, . Hier erfahren Sie, wie Sie Ressourcen herunterfahren, damit Ihnen über dieses Tutorial hinaus keine Kosten entstehen. Neue Google Cloud-Nutzer haben Anspruch auf eine kostenlose Testversion mit 300$Guthaben.
Cloud Shell starten
Sie können Google Cloud zwar von Ihrem Laptop aus der Ferne bedienen, 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 dauert nur einen Moment. Wenn er abgeschlossen ist, sollten Sie in etwa Folgendes sehen:
Diese virtuelle Maschine verfügt über sämtliche Entwicklertools, die Sie benötigen. Es bietet ein Basisverzeichnis mit 5 GB nichtflüchtigem Speicher und läuft auf Google Cloud, wodurch die Netzwerkleistung und Authentifizierung erheblich verbessert werden. Sie können alle Aufgaben in diesem Lab ganz einfach in einem Browser erledigen.
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. Backend-Dienste erstellen
Erstellen Sie wie folgt 2 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"
Instanz 1-b2 in 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. Für dieses Lab verwenden wir Port 110.
gcloud compute instance-groups set-named-ports vm-ig1 \ --named-ports tcp 110:110 --zone us-central1-b
Instanzen zur 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 Back-End-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 erreichen Sie den Dienst mit Load-Balancing.
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
Nachdem Ihr Load-Balancer erstellt wurde, testen Sie ihn mit dem folgenden Befehl
Curl LB_IP:110
Erstellen Sie als Nächstes VMs für die Validierung der Zugriffsverweigerung zum Load-Balancer
Sie sollten zwei Instanzen mit jeweils einer öffentlichen IP-Adresse mit den Namen „test-server1“ und „test-server2“ erstellen.
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 einer begrenzten Anzahl von IP-Adressen der Zugriff auf den TCP-Load-Balancer verweigert, indem eine Sicherheitsrichtlinie festgelegt wird, die bestimmte IP-Adressen ablehnt. Die zweite Regel wendet die Ratenbegrenzung an.
- Erstellen Sie in Cloud Shell eine Sicherheitsrichtlinie für den Back-End-Dienst namens "rate-limit-and-deny-tcp" unter "Einrichtung und Anforderungen". Gehen Sie dazu so vor:
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 Ablehnungsliste 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 Ratenbegrenzungsregel 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
Fügen Sie die Richtlinie an den TCP-Proxy-Back-End-Dienst an:
Führen Sie den folgenden Befehl aus, um sicherzustellen, dass die Sicherheitsrichtlinie an den TCP-Proxy-Back-End-Dienst angehängt wird.
gcloud compute backend-services update my-tcp-lb --security-policy \ rate-limit-and-deny-tcp
Logging für TCP-Proxy-Load-Balancer aktivieren
gcloud beta compute backend-services update my-tcp-lb \ --enable-logging --logging-sample-rate=1
7. Ablehnungslistenregel validieren
Überprüfen Sie die Deny-Listen-Regel, indem Sie sich beim Testserver anmelden, dessen IP-Adresse in der Deny-Listen-Regel angegeben wurde, und führen Sie den folgenden Befehl aus:
Curl LB_IP:110
Sofortige Anfragen können eine Antwort vom Load-Balancer zurückgeben. Warten Sie jedoch, bis die curl-Anfrage abgelehnt oder gelöscht wurde. Prüfen Sie dann die Logs in Cloud Logging, 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 und legen Sie als Back-End-Ziel my-tcp-lb" fest.
Wenn die Ressourcen zum Filtern definiert sind, können wir überprüfen, ob die IP-Ablehnungsregel ab dem PRIORITY-Wert 1.000 im Logeintrag wirksam ist und die konfigurierte Aktion "DENY" aktiv ist, da beide von der Ablehnungsregel und der abgelehnten IP-Adresse angewiesen wurden (siehe unten).
8. Ratenbegrenzungsregel validieren
Prüfen Sie, ob die Ratenbegrenzungsregel gilt, indem Sie viele Anfragen innerhalb eines kurzen Zeitraums senden, der den definierten Grenzwert (5 Anfragen pro Minute) überschreitet.
Klicken Sie danach auf „Logs ansehen“ im Cloud Armor-Dienst. Sie werden dann zu Cloud Logging weitergeleitet. Dort können Sie die Logs nach dem Load-Balancer filtern, um die eingehenden Cloud Armor-Logs zu sehen.
Ein Eintrag zur Ratenbegrenzung sollte wie im Screenshot unten dargestellt sein. Wir können überprüfen, ob die Ratenbegrenzungsregel ab dem PRIORITY-Wert 3.000 im Logeintrag und ab der konfigurierten Aktion die Aktion RATE BASED BAN (RATE BASED BAN) wie in der Ratenbegrenzungsregel angegeben gilt.
9. Bereinigung der Umgebung
Achten Sie darauf, die erstellte Infrastruktur zu bereinigen, um laufende Kosten für eine ungenutzte Infrastruktur zu vermeiden.
Am schnellsten löschen Sie das gesamte Projekt in der GCP, um sicherzustellen, dass keine veralteten Ressourcen unbeaufsichtigt bleiben. Löschen Sie jedoch die einzelnen Ressourcen mit den folgenden Befehlen.
TCP-Proxy-Load-Balancer
gcloud compute target-tcp-proxies delete my-tcp-lb
Instanzgruppe
gcloud compute instance-groups unmanaged delete vm-ig1
Die zwei 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 innerhalb 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