1. Introduction
L'équilibrage de charge Google Cloud est déployé à la périphérie du réseau Google dans les points of presence (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 du déni de service distribué et du pare-feu d'application Web (WAF) de Google. Cloud Armor est étroitement lié à l'équilibreur de charge proxy TCP de Google Cloud et vous permet d'interroger le trafic entrant pour les requêtes indésirables. La fonctionnalité de limitation du débit de ce service vous permet de restreindre 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 cloud privé virtuel (VPC).
Les équilibreurs de charge proxy TCP/SSL de Google Cloud vous permettent d'acheminer par proxy le trafic de type TCP/ SSL entre vos services de backend.
Dans cet atelier de programmation, vous allez créer un équilibreur de charge proxy TCP/SSL avec un service de backend et utiliser Cloud Armor pour limiter l'accès à l'équilibreur de charge à un ensemble spécifique de clients utilisateurs.
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 du débit pour l'équilibreur de charge proxy TCP dans Cloud Armor
- Ajouter une règle 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 la visite guidée de la mise en réseau dans GCP avec Networking in the 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" dans la suite de cet atelier de programmation.
Remarque: Si vous utilisez un compte Gmail, vous pouvez conserver 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
Activer 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 l'instance 1-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 utiliserons 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
Nous allons maintenant créer une vérification d'é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 de l'équilibreur de charge.
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 à l'aide de la commande suivante :
Curl LB_IP:110
Créez ensuite des VM pour la validation du refus d'accès à l'équilibreur de charge.
Vous devez créer deux instances, chacune avec une adresse IP publique et nommée "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 Cloud Armor.
La première règle interdira l'accès à l'équilibreur de charge TCP à un ensemble limité d'adresses IP en définissant une règle de sécurité pour refuser certaines adresses IP, et la seconde règle limitera le débit.
- Dans Cloud Shell(consultez la section "Démarrer Cloud Shell" sous "Configuration et conditions requises" pour savoir comment utiliser Cloud Shell), créez une stratégie de sécurité du service de 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 à la 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
Associez la règle 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
Pour valider la règle de liste de refus, connectez-vous 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 fournir une réponse de l'équilibreur de charge, mais attendre que la requête curl soit refusée ou supprimée, puis consulter les journaux dans Cloud Logging pour vérifier l'entrée de journal pour la règle de refus d'adresse IP en cours de déclenchement.
Accédez à Cloud Logging et, 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 appliquée à partir de la valeur PRIORITY de 1 000 dans l'entrée de journal et que l'action configurée "DENY" est en cours, car les instructions de la règle de refus et de l'adresse IP refusée ont été données, comme indiqué ci-dessous.
8. Valider la règle de limitation du débit
Vérifiez que la règle de limite de débit est en vigueur en envoyant de nombreuses requêtes dans un court laps de temps qui dépasse le seuil défini (5 requêtes par minute).
Une fois cette opération effectuée, cliquez sur "View logs" (Afficher les journaux) dans le service Cloud Armor. Vous accédez alors à Cloud Logging, où vous pouvez filtrer les journaux en fonction de l'équilibreur de charge pour voir les journaux Cloud Armor à mesure qu'ils arrivent.
Une entrée de limitation du débit doit se présenter comme indiqué dans la capture d'écran ci-dessous. Nous pouvons vérifier que la règle de limitation du débit est bien appliquée à partir de la valeur PRIORITY de 3 000 dans l'entrée de journal et à partir de l'action configurée, c'est-à-dire que l'action "RATE BASED BAN" (BAN BASÉE SUR LE TAUX) est appliquée comme indiqué dans la règle de limitation du débit.
9. Nettoyage de l'environnement
Veillez à nettoyer l'infrastructure créée pour éviter les coûts d'exploitation 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 inexploitée sans surveillance.Cependant, supprimez les ressources individuelles à l'aide des commandes suivantes :
L'équilibreur de charge proxy TCP
gcloud compute target-tcp-proxies delete my-tcp-lb
Le 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
Cloud Armor : stratégie de sécurité
gcloud compute security-policies delete rate-limit-and-deny-tcp