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 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 rozproszony system wykrywania ataków typu DoS i zapora sieciowa aplikacji internetowych (WAF) od Google. Cloud Armor jest ściśle powiązany z Google Cloud TCP Proxy Load Balancer i pozwala na sprawdzanie przychodzącego ruchu 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 (prywatnego środowiska wirtualnego w chmurze) przez niechciany ruch.
Systemy równoważenia obciążenia korzystające z serwera proxy Google Cloud TCP/SSL umożliwiają przekierowywanie ruchu typu TCP/ SSL między usługami backendu.
W tym laboratorium utworzysz system równoważenia obciążenia TCP/SSL z usługą backendową i ograniczysz dostęp do systemu równoważenia obciążenia tylko do określonego zestawu klientów.
Czego się nauczysz
- Tworzenie systemu równoważenia obciążenia korzystającego z serwera proxy TCP/SSL
- Jak utworzyć zasadę zabezpieczeń Cloud Armor
- Jak utworzyć regułę 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 szybkości dla systemu równoważenia obciążenia serwera proxy TCP w Cloud Armor
- Jak dodać zasadę zabezpieczeń do usługi backendowej równoważenia obciążenia TCP/SSL
Czego potrzebujesz
- podstawowa znajomość Google Compute Engine ( codelab),
- podstawowa znajomość sieci i protokołu TCP/IP,
- podstawowa znajomość wiersza poleceń w Unixie/Linuksie;
- Warto zapoznać się z sieciami w GCP, korzystając z kursu Networking in the Google Cloud (Sieci w Google Cloud).
2. Wymagania
Konfigurowanie środowiska we własnym tempie
- 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: możesz łatwo uzyskać dostęp do konsoli Cloud, zapamiętując jej adres URL, czyli console.cloud.google.com.
Zapamiętaj identyfikator projektu, który jest unikalną nazwą w ramach wszystkich projektów Google Cloud (podawana powyżej nazwa jest już zajęta i nie będzie działać). W dalszej części tego ćwiczenia będzie on oznaczany jako IDENTYFIKATOR_PROJEKTU.
Uwaga: jeśli korzystasz z 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ć płatności w Cloud Console, aby korzystać z zasobów Google Cloud.
Przejście przez ten moduł Codelab nie powinno wiązać się z wielkimi kosztami, jeśli w ogóle z nimi będzie. Pamiętaj, aby postępować zgodnie z instrukcjami w sekcji „Wyczyszczanie”, które podają, jak wyłączyć zasoby, aby uniknąć opłat po zakończeniu 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
Google Cloud można obsługiwać zdalnie z laptopa, ale w tym ćwiczeniu będziesz używać 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 jego zakończeniu powinno wyświetlić się coś takiego:
Ta maszyna wirtualna zawiera wszystkie potrzebne narzędzia dla programistów. Zawiera stały katalog domowy o pojemności 5 GB i działa w Google Cloud, co znacznie poprawia wydajność sieci i uwierzytelnianie. 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łączanie wszystkich niezbędnych usług
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 instance1-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"
Tworzenie grupy 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 utwórz kontrolę stanu.
gcloud compute health-checks create tcp my-tcp-health-check --port 110
Utwórz usługę 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 równoważenia obciążenia.
gcloud compute addresses create tcp-lb-static-ipv4 --ip-version=IPV4 --global
Skonfiguruj globalne reguły przekierowania dla adresu IP LB.
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 serwera proxy TCP
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 LB.
Należy utworzyć 2 instancji, z których każda ma publiczny adres IP i 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 Cloud Armor.
Pierwsza reguła zablokuje dostęp do równoważnika obciążenia TCP ograniczonemu zbiorowi adresów IP, ustawiając zasadę bezpieczeństwa, która zablokuje określone adresy IP. Druga reguła będzie ograniczać częstotliwość.
- W Cloud Shell(informacje o tym, jak korzystać z Cloud Shell, znajdziesz w sekcji „Uruchom Cloud Shell” w sekcji „Konfiguracja i wymagania”) utwórz zasadę zabezpieczeń usługi backendu o nazwie rate-limit-and-deny-tcp w następujący 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 szybkości 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łączanie zasad do usługi backendowej serwera proxy TCP:
Uruchom to polecenie, aby się upewnić, że zasada zabezpieczeń jest dołączona 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ł podany w regułach listy odmowy, i uruchom to polecenie
Curl LB_IP:110
Bezpośrednie żądania mogą wywołać odpowiedź od LB, ale poczekaj, aż żądanie curl zostanie odrzucone lub odrzucone, a następnie sprawdź w logach Cloud Logging, czy został wywołany wpis w logach dotyczący reguły odrzucania adresów IP.
Otwórz Cloud Logging i w sekcji Zasoby wybierz typ zasobu „tcp_ssl_proxy_rule”, a jako docelowe zaplecze wpisz „my-tcp-lb”.
Dzięki zdefiniowanym zasobom do filtrowania możemy sprawdzić, czy reguła odrzucania adresów IP jest aktywna na podstawie wartości 1000 w polu PRIORITY w rekordzie logowania. Z poziomu reguły odrzucania i adresu IP, który jest odrzucany, możemy też stwierdzić, że skonfigurowana akcja „DENY” jest aktywna.
8. Weryfikowanie reguły ograniczania szybkości
Aby sprawdzić, czy reguła dotycząca limitu szybkości jest aktywna, wyślij wiele żądań w krótkim czasie, przekraczając zdefiniowany próg (5 żądań na minutę).
Gdy to zrobisz, kliknij opcję wyświetlania logów w usłudze cloud armor. Przeniesie Cię to 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 ograniczający szybkość powinien wyglądać jak na zrzucie ekranu poniżej. Możemy potwierdzić, że reguła ograniczania szybkości jest aktywna, ponieważ wartość PRIORITY w rekordzie dziennika wynosi 3000, a z ustawionej akcji wynika, że „RATE BASED BAN” jest aktywna zgodnie z instrukcjami reguły ograniczania szybkości.
9. Czyszczenie środowiska
Aby uniknąć kosztów utrzymania nieużywanej infrastruktury, pamiętaj o usunięciu utworzonej infrastruktury.
Najszybszym sposobem jest usunięcie całego projektu w GCP, aby mieć pewność, że nie ma żadnych nieużywanych zasobów.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 maszyny wirtualne
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