1. Giriş
Google Cloud yük dengeleme, Google'ın dünya çapındaki varlık noktalarında (POP) yer alan 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 Load Balancer ile sıkı bir şekilde bağlıdır ve gelen trafiği istenmeyen istekler için sorgulamanıza olanak tanır. Bu hizmetin hız sınırlama özelliği, istek hacmine göre arka uç kaynaklarına giden trafiği azaltmanıza olanak tanır ve istenmeyen trafiğin Sanal Özel Bulut (VPC) ağınızdaki kaynakları tüketmesini engeller.
Google Cloud TCP/SSL proxy yük dengeleyicileri, TCP/ SSL türü trafiği arka uç hizmetleriniz arasında proxy olarak kullanmanıza olanak tanır.
Bu laboratuvarda, arka uç hizmeti içeren bir TCP/SSL yük dengeleyici oluşturacak ve yük dengeleyiciye erişimi yalnızca belirli bir kullanıcı istemcisi grubuyla sınırlayacaksınız.
Neler öğreneceksiniz?
- TCP/SSL proxy yük dengeleyici oluşturma
- Cloud Armor güvenlik politikası oluşturma
- Cloud Armor'da TCP/SSL proxy yük dengeleyici için IP reddedilecekler listesi kuralı oluşturma
- Cloud Armor'da TCP proxy yük dengeleyici için hız sınırlama kuralı oluşturma
- Güvenlik politikasını TCP/SSL yük dengeleme arka uç hizmetine ekleme
İhtiyacınız olanlar
- Google Compute Engine hakkında temel bilgiler ( codelab)
- Temel ağ ve TCP/IP bilgisi
- Temel Unix/Linux komut satırı bilgisi
- Google Cloud'da Ağ İletişimi ile GCP'de ağ oluşturma turu tamamlamanız faydalı olacaktır.
2. Şartlar
Kendi hızınızda ortam kurulumu
- Cloud Console'da oturum açın ve 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: Cloud Console'a kolayca erişmek için console.cloud.google.com URL'sini ezberleyebilirsiniz.
Proje kimliğini unutmayın. Bu, tüm Google Cloud projeleri genelinde benzersiz bir addır (yukarıdaki ad zaten alınmış olduğundan kullanılamaz). Bu codelab'de daha sonra PROJECT_ID olarak anılacaktır.
Not: Gmail hesabı kullanıyorsanız varsayılan konumu Kuruluş yok olarak ayarlayabilirsiniz. Google Workspace hesabı kullanıyorsanız kuruluşunuz için uygun bir konum seçin.
- Ardından, Google Cloud kaynaklarını kullanabilmek için Cloud Console'da faturalandırmayı etkinleştirmeniz gerekir.
Bu codelab'i çalıştırmak çok pahalı olmayacaktır. Bu eğiticinin dışında faturalandırılmamak için "Temizleme" bölümündeki kaynakları nasıl kapatacağınıza dair talimatları uyguladığınızdan emin olun. Google Cloud'un yeni kullanıcıları 300 ABD doları değerindeki ücretsiz deneme programına uygundur.
Cloud Shell'i Başlatma
Google Cloud, dizüstü bilgisayarınızdan uzaktan çalıştırılabilir olsa da bu kod laboratuvarında bulutta çalışan bir komut satırı ortamı olan Google Cloud Shell'i kullanacaksınız.
GCP Console'da, sağ üstteki araç çubuğunda Cloud Shell simgesini tıklayın:
Ortam sağlanıp bağlantı kurulabilmesi için birkaç saniye beklemeniz gerekir. İşlem tamamlandığında aşağıdakine benzer bir ekran görürsünüz:
Bu sanal makinede ihtiyaç duyacağınız tüm geliştirme araçları yüklüdür. 5 GB boyutunda kalıcı bir ana dizin sunar ve Google Cloud üzerinde çalışır. Bu sayede ağ performansını ve kimlik doğrulamayı büyük ölçüde iyileştirir. Bu laboratuvardaki tüm çalışmalarınızı yalnızca bir tarayıcı kullanarak 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 bölgesinde instance1-b1 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ğini 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 grubunu 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 laboratuvarda 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
Ardından 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 adresleri ayırma
Yük dengelenmiş hizmetinize ulaşmak için bu IP adresini kullanırsı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 test edin
Curl LB_IP:110
Ardından, LB'ye erişim reddedilmesinin doğrulanması için sanal makineler oluşturun.
Her biri herkese açık IP adresine sahip ve test-server1 ile test-server2 olarak adlandırılmış 2 örnek oluşturmanız gerekir.
6. Cloud Armor'da güvenlik politikası oluşturma
Bu bölümde, Cloud Armor'da bir arka uç güvenlik politikası ve politikaya 2 kural ekleyeceksiniz.
İlk kural, belirli IP'leri reddetmek için bir güvenlik politikası ayarlayarak sınırlı sayıda IP'nin TCP Yük Dengeleyici'ye erişmesini engeller. İkinci kural ise hız sınırlamasını gerçekleştirir.
- Cloud Shell'de(Cloud Shell'in nasıl kullanılacağıyla ilgili talimatlar için "Kurulum ve Şartlar" bölümündeki "Cloud Shell'i başlatma" bölümüne bakın) aşağıdaki gibi rate-limit-and-deny-tcp adlı bir arka uç hizmet 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, "rate-limit-and-deny-tcp" adlı Cloud Armor politikasına bir engellenenler 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"
"rate-limit-and-deny-tcp" adlı Cloud Armor güvenlik politikasına bir hız sınırlama kuralı ekleme
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
Politikayı TCP Proxy arka uç hizmetine 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 Dengelemede günlük kaydını etkinleştirme
gcloud beta compute backend-services update my-tcp-lb \ --enable-logging --logging-sample-rate=1
7. Engellenenler listesi kuralını doğrulama
IP'si, reddetme listesi kuralında belirtilen test sunucusuna giriş yaparak ve aşağıdaki komutu çalıştırarak reddetme listesi kuralını doğrulayın
Curl LB_IP:110
Anında istek, LB'den yanıt verebilir ancak curl isteğinin reddedilmesini veya bırakılmasını bekleyin ve ardından IP reddetme kuralının tetiklendiğine dair günlük girişini doğrulamak için Cloud Logging'daki günlüklere göz atın.
Cloud Logging'a 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şindeki 1000 PRIORITY değerinden IP reddetme kuralının geçerli olduğunu ve yapılandırılmış "DENY" işleminin, hem reddetme kuralından hem de aşağıda gösterildiği gibi IP'nin reddedilmesinden talimat aldığı için geçerli olduğunu doğrulayabiliriz.
8. Hız sınırlaması kuralını doğrulama
Kısa bir zaman aralığında, tanımlanan eşiği (dakikada 5 istek) aşan çok sayıda istek göndererek hız sınırı kuralının geçerli olduğunu doğrulayın.
Bu işlem tamamlandıktan sonra Cloud Armor hizmetinde günlükleri görüntüle'yi tıklayın. Bu işlem sizi Cloud Logging'e yönlendirir. Burada günlükleri yük dengeleyiciye göre filtreleyerek Cloud Armor günlüklerini geldikçe görebilirsiniz.
Hız sınırlama girişi aşağıdaki ekran görüntüsüne göre olmalıdır. Günlük girişindeki 3000 olan ÖNCELİK değerinden ve yapılandırılmış işlemden, "HAREKET TABANLI KISITLAMA" işleminin, eşik sınırlama kuralında belirtildiği şekilde geçerli olduğunu doğrulayabiliriz.
9. Çevre Temizliği
Kullanılmayan altyapının maliyetlerini önlemek için oluşturulan altyapıyı temizlediğinizden emin olun.
En hızlı yol, gözetimsiz bırakılan kaynak kalmadığından emin olmak için GCP'deki projenin tamamını silmektir. Ancak aşağıdaki komutlarla kaynakları tek tek silin.
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