1. Wprowadzenie
Równoważenie obciążenia 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 TCP serwera proxy 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 szybkości tej usługi umożliwia ograniczanie ruchu do zasobów backendu na podstawie liczby żądań i zapobiega zużywaniu zasobów w sieci VPC 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 laboratorium utworzysz system równoważenia obciążenia TCP/SSL z usługą backendu i ograniczysz dostęp do niego 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 zasad 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 TCP serwera proxy 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 sieciami w GCP, korzystając z przewodnika 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 lub 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 Cloud Console, 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 programu 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 laboratorium 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 module 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
Ten adres IP będzie służyć do uzyskiwania dostępu 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ę bezpieczeństwa, która odrzuca 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 odmowy 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 skonfigurowanej akcji „DENY”. Obie te wartości zostały określone w regule odrzucania, a odrzucany adres IP jest widoczny poniżej.

8. Weryfikowanie reguły ograniczania liczby żądań
Sprawdź, czy reguła limitu szybkości działa, wysyłając w krótkim czasie wiele żądań, które przekraczają 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 w miarę ich pojawiania się.
Wpis dotyczący ograniczenia szybkości 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 na podstawie skonfigurowanego działania. Działanie „RATE BASED BAN” jest aktywne zgodnie z instrukcjami reguły ograniczania liczby żądań.

9. Environment Clean UP
Pamiętaj o zwolnieniu miejsca w utworzonej infrastrukturze, aby uniknąć kosztów nieużywanej infrastruktury.
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