Codelab: Cloud Armor- und TCP/SSL-Proxy-Load-Balancer – Ratenbegrenzung und IP-Sperrliste

1. Einführung

Das Load-Balancing von Google Cloud wird an den weltweiten Edges des Google-Netzwerks in seinen Points of Presence (POPs) bereitgestellt. Der an einen TCP-Proxy-Load-Balancer geleitete Nutzer-Traffic 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 DDoS-Erkennungssystem (Distributed Denial of Service) und die Web Application Firewall (WAF) von Google. 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 untersuchen. Mit der Ratenbegrenzungsfunktion 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 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.

be33dadf836374bb.png

Lerninhalte

  • TCP-/SSL-Proxy-Load-Balancer erstellen
  • Cloud Armor-Sicherheitsrichtlinie erstellen
  • Regel für die IP-Sperrliste für TCP-/SSL-Proxy-Load-Balancer in Cloud Armor erstellen
  • Ratenbegrenzungsregel für TCP-Proxy-Load-Balancer in Cloud Armor erstellen
  • Sicherheitsrichtlinie einem Backend-Dienst für TCP/SSL-Load-Balancing hinzufügen

Voraussetzungen

  • Grundkenntnisse von Google Compute Engine ( Codelab)
  • Grundkenntnisse in den Bereichen Netzwerk und TCP/IP
  • Grundkenntnisse zu Unix/Linux-Befehlszeilen
  • Es ist hilfreich, wenn Sie bereits eine Einführung in die Vernetzung in der GCP mit Netzwerke in Google Cloud durchlaufen haben.

2. Voraussetzungen

Umgebung zum selbstbestimmten Lernen einrichten

  1. 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: Wir empfehlen Ihnen, sich die URL console.cloud.google.com zu merken. Damit können Sie mühelos auf die Cloud Console zugreifen.

96a9c957bc475304.png

b9a10ebdf5b5a448.png

a1e3c01a38fa61c2.png

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.

  1. 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 keine oder nur geringe Kosten verursachen. Folgen Sie bitte der Anleitung im Abschnitt „Bereinigen“, in der Sie erfahren, wie Sie Ressourcen herunterfahren können, damit nach Abschluss dieser Anleitung keine Gebühren anfallen. Neue Nutzer von Google Cloud kommen für das Programm für kostenlose Testversionen mit einem Guthaben von 300$ infrage.

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:

bce75f34b2c53987.png

Die Bereitstellung und Verbindung mit der Umgebung sollte nur wenige Augenblicke dauern. Anschließend sehen Sie in etwa Folgendes:

f6ef2b5f13479f3a.png

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 dieses 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

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"

Erstellen Sie die Instanz 1-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"

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 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 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 können Sie auf Ihren Dienst mit Load-Balancing zugreifen.

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 Sie den Load-Balancer erstellt haben, testen Sie ihn mit dem folgenden Befehl.

Curl LB_IP:110

Erstellen Sie als Nächstes VMs, um den Zugriff auf den Load Balancer zu verweigern.

Sie sollten zwei Instanzen erstellen, die jeweils eine öffentliche IP-Adresse haben und die Namen „test-server1“ und „test-server2“ tragen.

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 verweigert, indem eine Sicherheitsrichtlinie zum Verweigern bestimmter IP-Adressen festgelegt wird. Mit der zweiten Regel wird die Ratenbegrenzung durchgeführt.

  1. Erstellen Sie in Cloud Shell(eine Anleitung zur Verwendung von Cloud Shell finden Sie unter „Cloud Shell starten“ im Abschnitt „Einrichtung und Anforderungen“) 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 zu einer 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"

Eine Ratenbegrenzungsregel zur Cloud Armor-Sicherheitsrichtlinie „rate-limit-and-deny-tcp“ 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 Back-End-Dienst des TCP-Proxys anhängen:

Führen Sie den folgenden Befehl aus, um zu prüfen, ob die Sicherheitsrichtlinie an den TCP-Proxy-Backend-Dienst angehängt ist.

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. Regel für die Sperrliste validieren

Prüfen Sie die Regel für die Ablehnungsliste, indem Sie sich auf dem Testserver anmelden, dessen IP-Adresse in der Regel für die Ablehnungsliste 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 zu prüfen, ob der Logeintrag für die IP-Ablehnungsregel ausgelöst wurde.

Rufen Sie Cloud Logging auf und wählen Sie unter „Ressourcen“ den Ressourcentyp „tcp_ssl_proxy_rule“ aus. Legen Sie das Backend-Ziel auf „my-tcp-lb“ fest.

Anhand der für das Filtern definierten Ressourcen können wir bestätigen, dass die IP-Sperrregel anhand des PRIORITY-Werts von 1000 im Logeintrag und der konfigurierten Aktion DENY in Kraft ist, da beide durch die Sperrregel und die gesperrte IP-Adresse angewiesen wurden, wie unten dargestellt.

db9b835e0360dcaf.png

8. Ratenbegrenzungsregel validieren

Prüfen Sie, ob die Ratenbegrenzungsregel wirksam 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 werden zu Cloud Logging weitergeleitet, wo Sie die Logs nach dem Load-Balancer filtern können, um die Cloud Armor-Logs zu sehen, sobald sie eingehen.

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 bestätigen, dass die Ratenbegrenzungsregel wirksam ist. Die Aktion RATE BASED BAN (Ratenbasierte Sperrung) wird wie in der Ratenbegrenzungsregel angegeben ausgeführt.

37c76e5d7532623.png

9. Umgebung bereinigen

Denken Sie daran, die erstellte Infrastruktur zu bereinigen, um laufende Kosten für ungenutzte Infrastruktur zu vermeiden.

Am schnellsten ist es, das gesamte Projekt in GCP zu löschen, um sicherzustellen, dass keine nicht mehr benötigten Ressourcen zurückbleiben. Sie können die einzelnen Ressourcen jedoch auch mit den folgenden Befehlen löschen.

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

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

Die Cloud Armor-Sicherheitsrichtlinie

gcloud compute security-policies delete rate-limit-and-deny-tcp