1. Giriş
Google Cloud yük dengeleme işlemi, 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 yük dengeleyiciyle sıkı bir şekilde bağlantılıdır ve gelen trafiği istenmeyen istekler için sorgulamanıza olanak tanır. Bu hizmetin sıklık sınırlama özelliği, istek hacmine göre arka uç kaynaklarına yönelik 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, arka uç hizmetleriniz arasında TCP/ SSL türü trafiği proxy'lemenize olanak tanır.
Bu codelab'de, arka uç hizmeti olan bir TCP/SSL proxy yük dengeleyici oluşturacak ve Cloud Armor'ı kullanarak yük dengeleyiciye erişimi yalnızca belirli bir kullanıcı istemcileri 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 dengeleyicisi için IP reddetme listesi kuralı oluşturma
- Cloud Armor'da TCP proxy yük dengeleyici için sıklık sınırlama kuralı oluşturma
- TCP/SSL yük dengeleme arka uç hizmetine güvenlik politikası ekleme
İhtiyacınız olanlar
- Google Compute Engine hakkında temel bilgiler ( codelab)
- Temel ağ iletişimi ve TCP/IP bilgisi
- Temel düzeyde Unix/Linux komut satırı bilgisi
- Google Cloud'da Ağ İletişimi ile GCP'de ağ iletişimi turunu tamamlamış olmanız faydalıdır.
2. Şartlar
Yönlendirmesiz 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: URL'sini (console.cloud.google.com) ezberleyerek Cloud Console'a kolayca erişebilirsiniz.



Proje kimliğini unutmayın. Bu kimlik, tüm Google Cloud projelerinde benzersiz bir addır (Yukarıdaki ad zaten alınmış olduğundan sizin için çalışmayacaktır). Bu codelab'de daha sonra 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.
- Ardından, Google Cloud kaynaklarını kullanmak için Cloud Console'da faturalandırmayı etkinleştirmeniz gerekir.
Bu codelab'i tamamlamak neredeyse hiç maliyetli değildir. Bu eğitimin ötesinde faturalandırma ücreti alınmaması için kaynakları nasıl kapatacağınız konusunda size tavsiyelerde bulunan "Temizleme" bölümündeki talimatları uyguladığınızdan emin olun. Google Cloud'un yeni kullanıcıları 300 ABD doları değerinde ücretsiz deneme programından yararlanabilir.
Cloud Shell'i Başlatma
Google Cloud, dizüstü bilgisayarınızdan uzaktan çalıştırılabilir ancak 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 Cloud Shell simgesini tıklayın:

Ortamın temel hazırlığı ve bağlanması yalnızca birkaç dakikanızı alır. İşlem tamamlandığında aşağıdakine benzer bir ekranla karşılaşırsınız:

Bu sanal makine, ihtiyaç duyacağınız tüm geliştirme araçlarını içerir. 5 GB boyutunda kalıcı bir ana dizin sunar ve Google Cloud üzerinde çalışır. Bu sayede ağ performansı ve kimlik doğrulama önemli ölçüde güçlenir. Bu laboratuvardaki çalışmalarınızın tamamını 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 örneğini 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 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 adlı bir örnek grubu oluşturun.
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, 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 dengeli 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şimin reddedilmesini doğrulamak 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 politikada 2 kural oluşturacaksınız.
İlk kural, belirli IP'leri reddetmek için bir güvenlik politikası ayarlayarak sınırlı bir IP grubunun TCP yük dengeleyiciye erişimini engeller. İkinci kural ise sıklık sınırlaması uygular.
- Cloud Shell'de(Cloud Shell'i kullanmayla ilgili talimatlar için "Kurulum ve Gereksinimler" bölümündeki "Cloud Shell'i başlatma" başlıklı makaleye bakın) aşağıdaki gibi rate-limit-and-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, "rate-limit-and-deny-tcp" adlı Cloud Armor politikasına 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"
"rate-limit-and-deny-tcp" adlı Cloud Armor güvenlik politikasına sıklık 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
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üğü etkinleştirme
gcloud beta compute backend-services update my-tcp-lb \ --enable-logging --logging-sample-rate=1
7. Reddetme listesi kuralını doğrulama
Reddetme listesi kuralında IP'si belirtilen test sunucusuna giriş yaparak ve aşağıdaki komutu çalıştırarak reddetme listesi kuralını doğrulayın.
Curl LB_IP:110
Anlık istekler LB'den yanıt verebilir ancak curl isteği reddedilene veya bırakılana kadar bekleyin ve ardından IP reddetme kuralının tetiklendiğine dair günlük girişini doğrulamak için Cloud Logging'deki günlükleri inceleyin.
Cloud Logging'e gidin ve kaynaklar bölümünde kaynak türünü "tcp_ssl_proxy_rule" olarak seçip arka uç hedefini "my-tcp-lb" olarak ayarlayın.
Filtreleme için tanımlanan kaynaklarla, günlük girişindeki 1.000 öncelik değerinden IP reddetme kuralının geçerli olduğunu ve yapılandırılan "DENY" (REDDET) işleminin geçerli olduğunu doğrulayabiliriz. Bunun nedeni, her ikisinin de reddetme kuralından ve reddedilen IP'den talimat almış olmasıdır.

8. Sıklık sınırlaması kuralını doğrulama
Kısa süre içinde tanımlanan eşiği (dakikada 5 istek) aşan çok sayıda istek göndererek sıklık 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, Cloud Armor günlüklerini geldikçe görmek için yük dengeleyiciye göre filtreleyebilirsiniz.
Sıklık sınırlaması girişi aşağıdaki ekran görüntüsündeki gibi olmalıdır. Günlük girişindeki 3.000 ÖNCELİK değerinden ve yapılandırılan işlemden, sıklık sınırlama kuralında belirtildiği gibi sıklığa dayalı yasaklama işleminin yürürlükte olduğunu doğrulayabiliriz.

9. Ortamı Temizleme
Kullanılmayan altyapının işletme maliyetlerinden kaçınmak için oluşturulan altyapıyı temizlediğinizden emin olun.
GCP'deki projenin tamamını silmek, ilgilenilmeyen kaynak kalmadığından emin olmanın en hızlı yoludur. Ancak aşağıdaki komutlarla 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