1. Wprowadzenie
Cloud Load Balancing Google Cloud jest wdrażane na brzegu sieci Google w punktach dostępowych Google na całym świecie. Ruch użytkowników kierowany do systemu równoważenia obciążenia serwera proxy TCP trafia do punktu dostępu najbliższego użytkownikowi, a następnie obciążenie jest równoważone w globalnej sieci Google do najbliższego backendu, który ma wystarczającą wydajność.
Cloud Armor to system wykrywania ataków typu DDoS i zapora sieciowa aplikacji internetowych (WAF) od Google. Cloud Armor jest ściśle powiązany z systemem równoważenia obciążenia proxy TCP Google Cloud i umożliwia sprawdzanie ruchu przychodzącego pod kątem niechcianych żądań. Funkcja ograniczania liczby żądań tej usługi umożliwia ograniczanie ruchu do zasobów backendu na podstawie liczby żądań i zapobiega zużywaniu zasobów w sieci VPC (prywatnego środowiska wirtualnego w chmurze) przez niepożądany ruch.
Systemy równoważenia obciążenia korzystające z serwera proxy TCP/SSL w Google Cloud umożliwiają przekazywanie ruchu typu TCP/ SSL między usługami backendu.
W tym ćwiczeniu utworzysz system równoważenia obciążenia serwera proxy TCP/SSL z usługą backendu i użyjesz Cloud Armor, aby ograniczyć dostęp do systemu równoważenia obciążenia tylko do określonego zestawu klientów użytkowników.

Czego się nauczysz
- Jak utworzyć system równoważenia obciążenia korzystający z serwera proxy TCP/SSL
- Tworzenie zasady zabezpieczeń Cloud Armor
- Tworzenie reguły listy zablokowanych adresów IP dla systemu równoważenia obciążenia korzystającego z serwera proxy TCP/SSL w Cloud Armor
- Jak utworzyć regułę ograniczania liczby żądań dla systemu równoważenia obciążenia serwera proxy TCP w Cloud Armor
- Jak dodać zasadę zabezpieczeń do usługi backendu równoważenia obciążenia TCP/SSL
Czego potrzebujesz
- Podstawowa wiedza o Google Compute Engine ( codelab)
- Podstawowa wiedza o sieciach i protokole TCP/IP
- Podstawowa znajomość wiersza poleceń w systemach Unix i Linux
- Warto wcześniej zapoznać się z przewodnikiem po sieciach w GCP, takim jak Networking in the Google Cloud.
2. Wymagania
Samodzielne konfigurowanie środowiska
- Zaloguj się w konsoli Google Cloud i utwórz nowy projekt lub użyj istniejącego. Jeśli nie masz jeszcze konta Gmail ani Google Workspace, musisz je utworzyć.
Uwaga: żeby łatwo otwierać konsolę Cloud, wystarczy zapamiętać jej adres URL: console.cloud.google.com.



Zapamiętaj identyfikator projektu, czyli unikalną nazwę we wszystkich projektach Google Cloud (podana powyżej nazwa jest już zajęta i nie będzie działać w Twoim przypadku). W dalszej części tych ćwiczeń z programowania będzie on nazywany PROJECT_ID.
Uwaga: jeśli używasz konta Gmail, możesz pozostawić domyślną lokalizację ustawioną na Brak organizacji. Jeśli używasz konta Google Workspace, wybierz lokalizację odpowiednią dla Twojej organizacji.
- Następnie musisz włączyć rozliczenia w konsoli Cloud, aby korzystać z zasobów Google Cloud.
Ukończenie tego laboratorium nie powinno wiązać się z dużymi kosztami, a nawet z żadnymi. Wykonaj instrukcje z sekcji „Czyszczenie”, w której znajdziesz informacje o tym, jak wyłączyć zasoby, aby uniknąć naliczenia opłat po zakończeniu tego samouczka. Nowi użytkownicy Google Cloud mogą skorzystać z bezpłatnego okresu próbnego, w którym mają do dyspozycji środki w wysokości 300 USD.
Uruchamianie Cloud Shell
Z Google Cloud można korzystać zdalnie na laptopie, ale w tym ćwiczeniu użyjesz Google Cloud Shell, czyli środowiska wiersza poleceń działającego w chmurze.
W konsoli GCP kliknij ikonę Cloud Shell na pasku narzędzi w prawym górnym rogu:

Uzyskanie dostępu do środowiska i połączenie się z nim powinno zająć tylko kilka chwil. Po zakończeniu powinno wyświetlić się coś takiego:

Ta maszyna wirtualna zawiera wszystkie potrzebne narzędzia dla programistów. Zawiera również stały katalog domowy o pojemności 5 GB i działa w Google Cloud, co znacznie zwiększa wydajność sieci i usprawnia proces uwierzytelniania. Wszystkie zadania w tym module możesz wykonać w przeglądarce.
Zanim zaczniesz
W Cloud Shell sprawdź, czy identyfikator projektu jest skonfigurowany.
gcloud config list project gcloud config set project [YOUR-PROJECT-NAME] PROJECT_ID=[YOUR-PROJECT-NAME] echo $PROJECT_ID
Włącz interfejsy API
Włącz wszystkie niezbędne usługi
gcloud services enable compute.googleapis.com gcloud services enable logging.googleapis.com gcloud services enable monitoring.googleapis.com
3. Tworzenie usług backendu
Utwórz 2 instancje w ten sposób: utwórz instancję instancja1-b1 w strefie 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"
Utwórz instancję 1-b2 w strefie 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"
Utwórz grupę instancji vm-ig1
gcloud compute instance-groups unmanaged create vm-ig1 --zone us-central1-b
Utwórz nazwany port dla grupy instancji. W tym laboratorium użyjemy portu 110.
gcloud compute instance-groups set-named-ports vm-ig1 \ --named-ports tcp 110:110 --zone us-central1-b
Dodawanie instancji do grupy instancji
gcloud compute instance-groups unmanaged add-instances vm-ig1 \ --instances vm-1-b1,vm-1-b2 --zone us-central1-b
4. Konfigurowanie systemu równoważenia obciążenia
Następnie utworzymy kontrolę stanu.
gcloud compute health-checks create tcp my-tcp-health-check --port 110
Tworzenie usługi backendu
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
Dodawanie grupy instancji do usługi backendu
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
Konfigurowanie docelowego serwera proxy TCP
gcloud compute target-tcp-proxies create my-tcp-lb-target-proxy --backend-service \ my-tcp-lb --proxy-header NONE
Rezerwowanie globalnych statycznych adresów IPv4
Użyjesz tego adresu IP, aby uzyskać dostęp do usługi z równoważeniem obciążenia.
gcloud compute addresses create tcp-lb-static-ipv4 --ip-version=IPV4 --global
Skonfiguruj globalne reguły przekierowania dla adresu IP systemu równoważenia obciążenia.
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. Tworzenie reguły zapory sieciowej dla systemu równoważenia obciążenia TCP serwera proxy
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
Po utworzeniu systemu równoważenia obciążenia przetestuj go za pomocą tego polecenia:
Curl LB_IP:110
Następnie utwórz maszyny wirtualne do weryfikacji odmowy dostępu do usługi równoważenia obciążenia.
Utwórz 2 instancje, każdą z publicznym adresem IP, i nadaj im nazwy test-server1 i test-server2.
6. Tworzenie zasady zabezpieczeń w Cloud Armor
W tej sekcji utworzysz zasadę zabezpieczeń backendu i 2 reguły w zasadzie w Cloud Armor.
Pierwsza reguła uniemożliwi dostanie się do usługi równoważenia obciążenia TCP ograniczonej liczbie adresów IP, ustawiając zasadę zabezpieczeń, która blokuje określone adresy IP. Druga reguła będzie ograniczać liczbę żądań.
- W Cloud Shell(instrukcje korzystania z Cloud Shell znajdziesz w sekcji „Konfiguracja i wymagania” w artykule „Uruchamianie Cloud Shell”) utwórz zasadę zabezpieczeń usługi backendu o nazwie rate-limit-and-deny-tcp w ten sposób:
gcloud compute security-policies create rate-limit-and-deny-tcp \
--description "policy for tcp proxy rate limiting and IP deny"
Dodawanie reguł do zasad zabezpieczeń
Następnie dodaj regułę listy odrzucania do zasady Cloud Armor „rate-limit-and-deny-tcp”.
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"
Dodawanie reguły ograniczania liczby żądań do zasady zabezpieczeń Cloud Armor „rate-limit-and-deny-tcp”
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
Dołącz zasadę do usługi backendu serwera proxy TCP:
Uruchom to polecenie, aby sprawdzić, czy zasady zabezpieczeń są dołączone do usługi backendu serwera proxy TCP.
gcloud compute backend-services update my-tcp-lb --security-policy \ rate-limit-and-deny-tcp
Włączanie logowania w systemie równoważenia obciążenia serwera proxy TCP
gcloud beta compute backend-services update my-tcp-lb \ --enable-logging --logging-sample-rate=1
7. Sprawdzanie reguły listy odrzuconych
Sprawdź regułę listy odmowy, logując się na serwer testowy, którego adres IP został określony w regule listy odmowy, i uruchamiając to polecenie:
Curl LB_IP:110
W przypadku żądań natychmiastowych możesz otrzymać odpowiedź z usługi równoważenia obciążenia, ale poczekaj, aż żądanie curl zostanie odrzucone lub odrzucone, a następnie sprawdź logi w Cloud Logging, aby zweryfikować wpis logu dotyczący wywołania reguły odrzucania adresu IP.
Otwórz Cloud Logging i w sekcji zasobów wybierz typ zasobu „tcp_ssl_proxy_rule”, a jako miejsce docelowe backendu ustaw „my-tcp-lb”.
Dzięki zasobom zdefiniowanym na potrzeby filtrowania możemy sprawdzić, czy reguła odrzucania IP działa na podstawie wartości PRIORITY 1000 w wpisie logu i skonfigurowanego działania „DENY”. Oba te elementy zostały określone w regule odrzucania, a adres IP jest odrzucany, jak pokazano poniżej.

8. Weryfikowanie reguły ograniczania liczby żądań
Sprawdź, czy reguła limitu jest aktywna, wysyłając wiele żądań w krótkim czasie, który przekracza zdefiniowany próg (5 żądań na minutę).
Gdy to zrobisz, kliknij opcję wyświetlania logów w usłudze Cloud Armor. Spowoduje to przejście do Cloud Logging, gdzie możesz filtrować logi według systemu równoważenia obciążenia, aby wyświetlać logi Cloud Armor na bieżąco.
Wpis dotyczący ograniczania liczby żądań powinien wyglądać jak na zrzucie ekranu poniżej. Możemy sprawdzić, czy reguła ograniczania liczby żądań jest aktywna, na podstawie wartości PRIORITY 3000 we wpisie logu oraz skonfigurowanego działania. Działanie „RATE BASED BAN” jest aktywne zgodnie z instrukcjami reguły ograniczania liczby żądań.

9. Oczyszczanie środowiska
Aby uniknąć kosztów nieużywanej infrastruktury, pamiętaj o jej usunięciu.
Najszybszym sposobem jest usunięcie całego projektu w GCP, aby mieć pewność, że nie pozostaną żadne nieużywane zasoby.Możesz jednak usunąć poszczególne zasoby za pomocą tych poleceń:
System równoważenia obciążenia serwera proxy TCP
gcloud compute target-tcp-proxies delete my-tcp-lb
Grupa instancji
gcloud compute instance-groups unmanaged delete vm-ig1
Utworzono 2 testowe instancje maszyn wirtualnych
gcloud compute instances delete Instance_name --zone=instance_zone
usługa backendu,
gcloud compute backend-services delete BACKEND_SERVICE_NAME
Reguły Cloud Armor w ramach zasady
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
Zasada zabezpieczeń Cloud Armor
gcloud compute security-policies delete rate-limit-and-deny-tcp