1. Introduction
L'équilibrage de charge Google Cloud est déployé à la périphérie du réseau Google dans les points de présence (POP) de Google à travers le monde. Le trafic utilisateur dirigé vers un équilibreur de charge proxy TCP entre dans le POP le plus proche de l'utilisateur. Ensuite, l'équilibrage de la charge sur le réseau mondial de Google permet d'acheminer le trafic jusqu'au backend le plus proche disposant d'une capacité suffisante.
Cloud Armor est le système de détection des attaques par déni de service distribué et des pare-feu d'application Web (WAF) de Google. Cloud Armor est étroitement associé à l'équilibreur de charge proxy TCP Google Cloud et vous permet d'interroger le trafic entrant à la recherche de requêtes indésirables. La fonctionnalité de limitation de débit de ce service vous permet de réduire le trafic vers les ressources backend en fonction du volume de requêtes et d'empêcher le trafic indésirable de consommer des ressources sur votre réseau de cloud privé virtuel (VPC).
Les équilibreurs de charge proxy TCP/SSL Google Cloud vous permettent de mettre en proxy le trafic de type TCP/ SSL entre vos services backend.
Dans cet atelier, vous allez créer un équilibreur de charge TCP/SSL avec un service de backend et limiter l'accès à l'équilibreur de charge à un ensemble spécifique de clients utilisateur.
Points abordés
- Créer un équilibreur de charge proxy TCP/SSL
- Créer une stratégie de sécurité Cloud Armor
- Créer une règle de liste de refus d'adresses IP pour l'équilibreur de charge proxy TCP/SSL dans Cloud Armor
- Créer une règle de limitation de débit pour l'équilibreur de charge proxy TCP dans Cloud Armor
- Ajouter la stratégie de sécurité à un service de backend d'équilibrage de charge TCP/SSL
Prérequis
- Connaissances de base sur Google Compute Engine ( atelier de programmation)
- Connaissances de base sur la gestion de réseaux et les protocoles TCP/IP
- Connaissances de base de la ligne de commande Unix/Linux
- Il est utile d'avoir suivi une présentation de la mise en réseau dans GCP avec Networking in the Google Cloud (Mise en réseau dans Google Cloud).
2. Conditions requises
Configuration de l'environnement au rythme de chacun
- Connectez-vous à la console Cloud, puis créez un projet ou réutilisez un projet existant. (Si vous ne possédez pas encore de compte Gmail ou Google Workspace, vous devez en créer un.)
Remarque: Vous pouvez facilement accéder à la console Cloud en mémorisant son URL, à savoir console.cloud.google.com.
Mémorisez l'ID du projet. Il s'agit d'un nom unique permettant de différencier chaque projet Google Cloud (le nom ci-dessus est déjà pris ; vous devez en trouver un autre). Il sera désigné par le nom PROJECT_ID tout au long de cet atelier de programmation.
Remarque: Si vous utilisez un compte Gmail, vous pouvez laisser l'emplacement par défaut défini sur "Aucune organisation". Si vous utilisez un compte Google Workspace, choisissez un emplacement pertinent pour votre organisation.
- Vous devez ensuite activer la facturation dans Cloud Console pour pouvoir utiliser les ressources Google Cloud.
L'exécution de cet atelier de programmation est très peu coûteuse, voire gratuite. Veillez à suivre les instructions de la section "Nettoyer" qui indique comment désactiver les ressources afin d'éviter les frais une fois ce tutoriel terminé. Les nouveaux utilisateurs de Google Cloud peuvent participer au programme d'essai sans frais pour bénéficier d'un crédit de 300$.
Démarrer Cloud Shell
Bien que Google Cloud puisse être utilisé à distance depuis votre ordinateur portable, nous allons nous servir de Google Cloud Shell pour cet atelier de programmation, un environnement de ligne de commande exécuté dans le cloud.
Depuis la console GCP, cliquez sur l'icône Cloud Shell de la barre d'outils située dans l'angle supérieur droit :
Le provisionnement et la connexion à l'environnement prennent quelques instants seulement. Une fois l'opération terminée, le résultat devrait ressembler à ceci :
Cette machine virtuelle contient tous les outils de développement nécessaires. Elle comprend un répertoire d'accueil persistant de 5 Go et s'exécute sur Google Cloud, ce qui améliore nettement les performances du réseau et l'authentification. Vous pouvez réaliser toutes les activités de cet atelier dans un simple navigateur.
Avant de commencer
Dans Cloud Shell, assurez-vous que l'ID de votre projet est configuré.
gcloud config list project gcloud config set project [YOUR-PROJECT-NAME] PROJECT_ID=[YOUR-PROJECT-NAME] echo $PROJECT_ID
Activer les API
Activez tous les services nécessaires.
gcloud services enable compute.googleapis.com gcloud services enable logging.googleapis.com gcloud services enable monitoring.googleapis.com
3. Créer des services de backend
Créez deux instances comme suit : Créez instance1-b1 dans la zone 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"
Créer l'instance 1-b2 dans la zone 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"
Créer un groupe d'instances vm-ig1
gcloud compute instance-groups unmanaged create vm-ig1 --zone us-central1-b
Définissez un port désigné pour le groupe d'instances. Pour cet atelier, nous allons utiliser le port 110.
gcloud compute instance-groups set-named-ports vm-ig1 \ --named-ports tcp 110:110 --zone us-central1-b
Ajouter les instances au groupe d'instances
gcloud compute instance-groups unmanaged add-instances vm-ig1 \ --instances vm-1-b1,vm-1-b2 --zone us-central1-b
4. Configurer l'équilibreur de charge
Vous allez ensuite créer une vérification de l'état.
gcloud compute health-checks create tcp my-tcp-health-check --port 110
Créer un service de backend
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
Ajouter le groupe d'instances au service de backend
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
Configurer un proxy TCP cible
gcloud compute target-tcp-proxies create my-tcp-lb-target-proxy --backend-service \ my-tcp-lb --proxy-header NONE
Réserver des adresses IPv4 statiques globales
Vous utiliserez cette adresse IP pour accéder à votre service à équilibrage de charge.
gcloud compute addresses create tcp-lb-static-ipv4 --ip-version=IPV4 --global
Configurez des règles de transfert globales pour l'adresse IP du 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. Créer une règle de pare-feu pour l'équilibreur de charge 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
Une fois votre équilibreur de charge créé, testez-le avec la commande suivante :
Curl LB_IP:110
Créez ensuite des VM pour valider le refus d'accès à l'équilibreur de charge.
Vous devez créer deux instances, chacune avec une adresse IP publique et nommées test-server1 et test-server2.
6. Créer une règle de sécurité dans Cloud Armor
Dans cette section, vous allez créer une stratégie de sécurité backend et deux règles dans la stratégie dans Cloud Armor.
La première règle empêche un ensemble limité d'adresses IP d'accéder à l'équilibreur de charge TCP en définissant une stratégie de sécurité pour refuser certaines adresses IP. La seconde règle effectue la limitation du débit.
- Dans Cloud Shell(consultez "Démarrer Cloud Shell" sous "Configuration et conditions requises" pour savoir comment utiliser Cloud Shell), créez une stratégie de sécurité de service backend appelée "rate-limit-and-deny-tcp" comme suit :
gcloud compute security-policies create rate-limit-and-deny-tcp \ --description "policy for tcp proxy rate limiting and IP deny"
Ajouter des règles à une stratégie de sécurité
Ajoutez ensuite une règle de liste de refus à la stratégie 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"
Ajouter une règle de limitation du débit à la stratégie de sécurité 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
Associer une stratégie au service de backend du proxy TCP:
Exécutez la commande suivante pour vous assurer que la stratégie de sécurité est associée au service de backend du proxy TCP.
gcloud compute backend-services update my-tcp-lb --security-policy \ rate-limit-and-deny-tcp
Activer la journalisation sur l'équilibreur de charge proxy TCP
gcloud beta compute backend-services update my-tcp-lb \ --enable-logging --logging-sample-rate=1
7. Valider la règle de liste de refus
Validez la règle de liste de refus en vous connectant au serveur de test dont l'adresse IP a été spécifiée dans la règle de liste de refus, puis exécutez la commande suivante :
Curl LB_IP:110
Les requêtes immédiates peuvent recevoir une réponse du LB, mais attendez que la requête curl soit refusée ou abandonnée, puis examinez les journaux dans Cloud Logging pour vérifier l'entrée de journal de la règle de refus d'adresse IP déclenchée.
Accédez à Cloud Logging. Sous "Ressources", sélectionnez le type de ressource "tcp_ssl_proxy_rule" et définissez la cible backend sur "my-tcp-lb".
Avec les ressources définies pour le filtrage, nous pouvons vérifier que la règle de refus d'adresse IP est en vigueur à partir de la valeur PRIORITY de 1 000 dans l'entrée de journal et que l'action DENY (REFUSER) configurée est en vigueur, car les deux ont été indiquées par la règle de refus et l'adresse IP refusée, comme indiqué ci-dessous.
8. Valider la règle de limitation du débit
Vérifiez que la règle de limitation de débit est en vigueur en envoyant de nombreuses requêtes en peu de temps, dépassant le seuil défini (cinq requêtes par minute).
Une fois cette opération effectuée, cliquez sur "Afficher les journaux" dans le service Cloud Armor. Vous êtes alors redirigé vers Cloud Logging, où vous pouvez filtrer les journaux par équilibreur de charge pour afficher les journaux Cloud Armor à mesure qu'ils arrivent.
Une entrée de limitation de débit doit ressembler à la capture d'écran ci-dessous. Nous pouvons vérifier que la règle de limitation de débit est en vigueur à partir de la valeur PRIORITY (PRIORITÉ) de 3 000 dans l'entrée de journal et de l'action configurée. L'action "RATE BASED BAN" (BLOCAGE BASÉ SUR LE TAUX) est en vigueur, comme indiqué dans la règle de limitation de débit.
9. Nettoyage de l'environnement
Veillez à nettoyer l'infrastructure créée pour éviter les coûts d'exécution de l'infrastructure inutilisée.
Le moyen le plus rapide consiste à supprimer l'intégralité du projet dans GCP pour vous assurer qu'il ne reste aucune ressource inutilisée.Toutefois, supprimez les ressources individuelles à l'aide des commandes suivantes :
Équilibreur de charge proxy TCP
gcloud compute target-tcp-proxies delete my-tcp-lb
Groupe d'instances
gcloud compute instance-groups unmanaged delete vm-ig1
Les deux instances de VM de test créées
gcloud compute instances delete Instance_name --zone=instance_zone
Le service de backend
gcloud compute backend-services delete BACKEND_SERVICE_NAME
Les règles Cloud Armor de la stratégie
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
Règle de sécurité Cloud Armor
gcloud compute security-policies delete rate-limit-and-deny-tcp