1. Giriş
Google Cloud yük dengeleme, Google'ın dünya çapındaki Google varlık noktalarında (POP) ağının ucunda dağıtılır. TCP Proxy yük dengeleyiciye yönlendirilen kullanıcı trafiği, kullanıcıya en yakın varlık noktasına girer, ardından Google'ın global ağı üzerinden yeterli kapasiteye sahip en yakın arka uca doğru yük dengelemesi yapılır.
Cloud Armor, Google'ın dağıtılmış hizmet reddi ve web uygulaması güvenlik duvarı (WAF) algılama sistemidir. Cloud Armor, Google Cloud TCP Proxy Yük Dengeleyici ile sıkı bir şekilde bağlantılıdır ve istenmeyen istekler için gelen trafiği sorgulamanıza olanak tanır. Bu hizmetin hız sınırlama özelliği, istek hacmine göre arka uç kaynaklarına olan trafiği azaltmanıza olanak tanır ve istenmeyen trafiğin Sanal Özel Bulut (VPC) ağınızdaki kaynakları tüketmesini önler.
Google Cloud TCP/SSL proxy yük dengeleyicileri, arka uç hizmetleriniz arasında TCP/ SSL türü trafiği proxy'lemenize olanak tanır.
Bu codelab'de, arka uç hizmetiyle bir TCP/SSL proxy yük dengeleyici oluşturacak ve yük dengeleyiciye erişimi yalnızca belirli bir kullanıcı istemci kümesiyle sınırlamak için Cloud Armor'ı kullanacaksınız.
Neler öğreneceksiniz?
- TCP/SSL proxy yük dengeleyici oluşturma
- Cloud Armor güvenlik politikası nasıl oluşturulur?
- Cloud Armor'da TCP/SSL proxy yük dengeleyici için IP reddetme listesi kuralı oluşturma
- Cloud Armor'da TCP proxy yük dengeleyici için hız sınırlama kuralı oluşturma
- TCP/SSL yük dengeleme arka uç hizmetine güvenlik politikası ekleme
Gerekenler
- Temel Google Compute Engine bilgisi ( codelab)
- Temel ağ iletişimi ve TCP/IP bilgisi
- Temel Unix/Linux komut satırı bilgisi
- Google Cloud'da Ağ İletişimi ile GCP'de ağ iletişimi turuna katılın.
2. Şartlar
Kendi hızınızda ortam kurulumu
- Cloud Console'da oturum açıp yeni bir proje oluşturun veya mevcut bir projeyi yeniden kullanın. Gmail veya Google Workspace hesabınız yoksa hesap oluşturmanız gerekir.
Not: Console.cloud.google.com URL'sini ezberleyerek Cloud Console'a kolayca erişebilirsiniz.
Tüm Google Cloud projelerinde benzersiz bir ad olan proje kimliğini unutmayın (yukarıdaki ad zaten alınmış ve size uygun olmayacaktır!). Bu kod, bu codelab'in ilerleyen bölümlerinde PROJECT_ID olarak adlandırılacaktır.
Not: Gmail hesabı kullanıyorsanız varsayılan konumu "Kuruluş yok" olarak bırakabilirsiniz. Google Workspace hesabı kullanıyorsanız kuruluşunuz için uygun bir konum seçin.
- Sonraki adımda, Google Cloud kaynaklarını kullanmak için Cloud Console'da faturalandırmayı etkinleştirmeniz gerekir.
Bu codelab'i çalıştırmanın maliyeti, yüksek değildir. "Temizleme" bölümündeki talimatları izlediğinizden emin olun. bölümünde, bu eğiticinin dışında faturalandırmayla karşılaşmamanız için kaynakları nasıl kapatacağınız konusunda tavsiyelerde bulunuyoruz. Yeni Google Cloud kullanıcıları, 300 ABD doları değerindeki ücretsiz denemeden yararlanabilir.
Cloud Shell'i Başlatma
Google Cloud dizüstü bilgisayarınızdan uzaktan çalıştırılabilse de bu codelab'de, Cloud'da çalışan bir komut satırı ortamı olan Google Cloud Shell'i kullanacaksınız.
GCP Console'da, sağ üstteki araç çubuğunda yer alan Cloud Shell simgesini tıklayın:
Ortamı sağlamak ve bağlamak yalnızca birkaç dakika sürer. Tamamlandığında şuna benzer bir sonuç görmeniz gerekir:
İhtiyacınız olan tüm geliştirme araçlarını bu sanal makinede bulabilirsiniz. 5 GB boyutunda kalıcı bir ana dizin sunar ve Google Cloud üzerinde çalışarak ağ performansını ve kimlik doğrulamasını büyük ölçüde iyileştirir. Bu laboratuvardaki tüm çalışmalarınızı yalnızca bir tarayıcıyla yapabilirsiniz.
Başlamadan önce
Cloud Shell'de proje kimliğinizin ayarlandığından emin olun
gcloud config list project gcloud config set project [YOUR-PROJECT-NAME] PROJECT_ID=[YOUR-PROJECT-NAME] echo $PROJECT_ID
API'leri etkinleştir
Gerekli tüm hizmetleri etkinleştirin
gcloud services enable compute.googleapis.com gcloud services enable logging.googleapis.com gcloud services enable monitoring.googleapis.com
3. Arka uç hizmetleri oluşturma
Aşağıdaki gibi 2 örnek oluşturun: us-central1-b alt bölgesinde example1-b1'i oluşturun
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"
us-central1-b alt bölgesinde 1-b2 örneği oluşturun
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"
vm-ig1 örnek grubu oluşturma
gcloud compute instance-groups unmanaged create vm-ig1 --zone us-central1-b
Örnek grubu için adlandırılmış bir bağlantı noktası oluşturun. Bu laboratuvar için 110 numaralı bağlantı noktasını kullanacağız.
gcloud compute instance-groups set-named-ports vm-ig1 \ --named-ports tcp 110:110 --zone us-central1-b
Örnekleri örnek grubuna ekleme
gcloud compute instance-groups unmanaged add-instances vm-ig1 \ --instances vm-1-b1,vm-1-b2 --zone us-central1-b
4. Yük dengeleyiciyi yapılandırma
Şimdi bir durum denetimi oluşturacağız.
gcloud compute health-checks create tcp my-tcp-health-check --port 110
Arka uç hizmeti oluşturma
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
Örnek grubunu arka uç hizmetine ekleme
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
Hedef TCP proxy'si yapılandırma
gcloud compute target-tcp-proxies create my-tcp-lb-target-proxy --backend-service \ my-tcp-lb --proxy-header NONE
Genel statik IPv4 adreslerini ayırtın
Yük dengeli hizmetinize ulaşmak için bu IP adresini kullanacaksınız.
gcloud compute addresses create tcp-lb-static-ipv4 --ip-version=IPV4 --global
LB IP adresi için genel iletim kurallarını yapılandırın.
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. TCP proxy yük dengeleyici için güvenlik duvarı kuralı oluşturma
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
Yük dengeleyiciniz oluşturulduktan sonra, aşağıdaki komutla bunu test edin
Curl LB_IP:110
Ardından, LB'ye erişim reddinin doğrulanması için sanal makine oluşturun
Her biri herkese açık IP adresine sahip ve test-server1 ile test-server2 olarak adlandırılmış 2 örnek oluşturmalısınız.
6. Cloud Armor'da Güvenlik Politikası Oluşturma
Bu bölümde Cloud Armor'daki politikada bir arka uç güvenlik politikası ve 2 kural oluşturacaksınız.
İlk kural belirli IP'leri reddedecek bir güvenlik politikası belirleyerek sınırlı bir IP grubunun TCP Yük Dengeleyici'ye erişmesini engeller, ikinci kural ise hız sınırlaması uygular.
- Cloud Shell'de(Cloud Shell'in nasıl kullanılacağıyla ilgili talimatlar için "Kurulum ve Gereksinimler" bölümündeki "Cloud Shell'i Başlatma" bölümüne bakın) aşağıdaki gibi hız-limit-ve-deny-tcp adlı bir arka uç hizmeti güvenlik politikası oluşturun
gcloud compute security-policies create rate-limit-and-deny-tcp \ --description "policy for tcp proxy rate limiting and IP deny"
Güvenlik Politikası'na Kural Ekleme
Ardından, Cloud Armor politikasına ("rate-limit-and-deny-tcp") bir reddetme listesi kuralı ekleyin.
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"
Cloud Armor güvenlik politikasına "rate-limit-and-deny-tcp" adlı bir hız sınırlama kuralı ekleyin
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
TCP Proxy arka uç hizmetine politika ekleyin:
Güvenlik politikasının TCP Proxy arka uç hizmetine eklendiğinden emin olmak için aşağıdaki komutu çalıştırın.
gcloud compute backend-services update my-tcp-lb --security-policy \ rate-limit-and-deny-tcp
TCP Proxy Yük Dengeleyici'de günlük kaydını etkinleştir
gcloud beta compute backend-services update my-tcp-lb \ --enable-logging --logging-sample-rate=1
7. Reddetme listesi kuralını doğrula
Reddetme listesi kuralında IP'si belirtilen test sunucusuna giriş yaparak ret listesi kuralını doğrulayın ve aşağıdaki komutu çalıştırın
Curl LB_IP:110
Anında istekler LB'den yanıt verebilir ancak curl isteği reddedilene veya bırakılana kadar bekleyin ve ardından tetiklenen IP reddetme kuralıyla ilgili günlük girişini doğrulamak için Cloud Logging'deki günlüklere göz atın.
Cloud Logging'e gidin ve kaynaklar bölümünde kaynak türünü "tcp_ssl_proxy_rule" olarak seçin. ve arka uç hedefini "my-tcp-lb" olarak ayarlayın.
Filtreleme için tanımlanan kaynaklarla, günlük girişinde 1000 olan PRIORITY değeri üzerinden IP reddetme kuralının yürürlükte olduğunu ve yapılandırılmış "DENY" işleminin, hem reddetme kuralından hem de IP'nin reddedildiğinde belirtildiği gibi yapılandırıldığını doğrulayabiliriz.
8. Hız sınırlama kuralını doğrulayın
Hız sınırı kuralının, tanımlanan eşiği aşan (dakikada 5 istek) kısa bir süre içinde çok sayıda istek göndererek etkili olduğunu doğrulayın.
Bu işlem tamamlandığında Cloud Armor hizmetindeki günlükleri görüntüle seçeneğini tıklayın. Bulut günlük kaydına yönlendirilirsiniz. Burada günlükleri, yük dengeleyiciye göre filtreleyerek gelen bulut zırhı günlüklerini görebilirsiniz.
Hız sınırlama girişi aşağıdaki ekran görüntüsüne göre olmalıdır. Hız sınırı kuralının geçerli olduğunu, günlük girişindeki 3000 olan PRIORITY değerinden ve yapılandırılan işlemde "HIZ TABANLI BAN" işleminin, hız sınırlama kuralında belirtildiği şekilde yürürlükte olduğunu doğrulayabiliriz.
9. Çevre Temizliği
Kullanılmayan altyapının çalışma maliyetlerini önlemek için oluşturulan altyapıyı temizlediğinizden emin olun.
En hızlı yol, gözetimsiz kalan kaynak kalmadığından emin olmak için Projenin tamamını GCP'den silmektir. Ancak aşağıdaki komutları kullanarak kaynakları tek tek silebilirsiniz.
TCP Proxy yük dengeleyici
gcloud compute target-tcp-proxies delete my-tcp-lb
Örnek grubu
gcloud compute instance-groups unmanaged delete vm-ig1
Oluşturulan 2 test sanal makine örneği
gcloud compute instances delete Instance_name --zone=instance_zone
Arka uç hizmeti
gcloud compute backend-services delete BACKEND_SERVICE_NAME
Politikadaki Cloud Armor kuralları
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 güvenlik politikası
gcloud compute security-policies delete rate-limit-and-deny-tcp