1. Introduction
L'équilibrage de charge HTTP(S) 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 HTTP(S) 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 HTTP 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).
Dans cet atelier, vous allez configurer un équilibreur de charge HTTP avec des backends à travers le monde, comme illustré dans le schéma ci-dessous. Vous effectuerez ensuite un test de contrainte sur l'équilibreur de charge et ajouterez une règle de limitation du débit Cloud Armor afin de limiter le trafic arrivant sur vos ressources backend.
Points abordés
- Configurer un équilibreur de charge HTTP avec des vérifications d'état appropriées
- Créer une règle de limitation du débit Cloud Armor
- Comment vérifier que la règle de limitation du débit bloque le trafic lors de l'exécution d'un test de contrainte à partir d'une VM.
Prérequis
- Connaissances de base sur la mise en réseau et le protocole HTTP
- Connaissances de base de la ligne de commande Unix/Linux
2. Préparation
Configuration de l'environnement au rythme de chacun
- Connectez-vous à la console Google 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.)
- Le nom du projet est le nom à afficher pour les participants au projet. Il s'agit d'une chaîne de caractères qui n'est pas utilisée par les API Google, et que vous pouvez modifier à tout moment.
- L'ID du projet doit être unique sur l'ensemble des projets Google Cloud et doit être immuable (vous ne pouvez pas le modifier une fois que vous l'avez défini). Cloud Console génère automatiquement une chaîne unique dont la composition importe peu, en général. Dans la plupart des ateliers de programmation, vous devrez référencer l'ID du projet (généralement identifié comme
PROJECT_ID
), donc s'il ne vous convient pas, générez-en un autre au hasard ou définissez le vôtre, puis vérifiez s'il est disponible. Il est ensuite "gelé" une fois le projet créé. - La troisième valeur est le numéro de projet, utilisé par certaines API. Pour en savoir plus sur ces trois valeurs, consultez la documentation.
- Vous devez ensuite activer la facturation dans Cloud Console afin d'utiliser les ressources/API Cloud. L'exécution de cet atelier de programmation est très peu coûteuse, voire sans frais. Pour arrêter les ressources afin d'éviter qu'elles ne vous soient facturées après ce tutoriel, suivez les instructions de nettoyage indiquées à la fin de l'atelier. Les nouveaux utilisateurs de Google Cloud peuvent participer au programme d'essai gratuit 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. Configurer des règles de pare-feu pour autoriser le trafic HTTP vers les backends
Configurez des règles de pare-feu pour autoriser le trafic HTTP vers les backends à partir des vérifications d'état de Google Cloud et de l'équilibreur de charge.
Nous utiliserons le réseau VPC default (par défaut) créé dans votre projet. Créez une règle de pare-feu pour autoriser le trafic HTTP vers les backends. Les vérifications de l'état déterminent les instances d'un équilibreur de charge qui peuvent recevoir de nouvelles connexions. Pour l'équilibrage de charge HTTP, les vérifications de l'état portant sur vos instances à équilibrage de charge proviennent d'adresses situées dans les plages 130.211.0.0/22 et 35.191.0.0/16. Vos règles de pare-feu VPC doivent autoriser ces connexions. De plus, les équilibreurs de charge communiquent avec le backend sur la même plage d'adresses IP.
- Dans la console Cloud, accédez au menu de navigation ( ) > Réseau VPC > Pare-feu.
- Notez la présence de règles de pare-feu ICMP, internes, RDP et SSH existantes.Chaque projet Google Cloud commence avec le réseau par défaut et ces règles de pare-feu.
- Cliquez sur Créer une règle de pare-feu.
- Indiquez les valeurs suivantes et conservez les valeurs par défaut des autres paramètres :
Propriété | Valeur (saisissez la valeur ou sélectionnez l'option spécifiée) |
Nom | default-allow-health-check |
Réseau | par défaut |
Cibles | Tags cibles spécifiés |
Tags cibles | http-server |
Source filter (Filtre source) | IP Ranges (Plages d'adresses IP) |
Source IP ranges (Plages d'adresses IP sources) | 130.211.0.0/22, 35.191.0.0/16 |
Protocoles et ports | Protocoles et ports spécifiés, puis cochez tcp |
- Cliquez sur Créer.
Si vous utilisez la ligne de commande gcloud, Voici la commande :
gcloud compute firewall-rules create default-allow-health-check --direction=INGRESS --priority=1000 --network=default --action=ALLOW --rules=tcp --source-ranges=130.211.0.0/22,35.191.0.0/16 --target-tags=http-server
4. Configurer des modèles d'instance et créer des groupes d'instances gérés
Un groupe d'instances géré crée un groupe d'instances identiques à l'aide d'un modèle d'instance. Utilisez ces instances pour créer les backends de l'équilibreur de charge HTTP.
Configurer les modèles d'instances
Un modèle d'instance est une ressource API qui vous permet de créer des instances de VM et des groupes d'instances gérés. Les modèles d'instance définissent le type de machine, l'image de disque de démarrage, le sous-réseau, les libellés et d'autres propriétés d'instance. Créez un modèle d'instance pour us-east1 et un autre pour europe-west1.
- Dans la console Cloud, accédez au menu de navigation ( ) > Compute Engine > Modèles d'instance, puis cliquez sur Créer un modèle d'instance.
- Dans le champ Name (Nom), saisissez us-east1-template.
- Dans Série, sélectionnez N1.
- Cliquez sur Mise en réseau, disques, sécurité, gestion , location unique.
- Accédez à la section Gestion.
- Sous Métadonnées, cliquez sur Ajouter un élément et spécifiez les valeurs suivantes:
Clé | Value (Valeur) |
startup-script-url | gs://cloud-training/gcpnet/httplb/startup.sh |
- Cliquez sur Mise en réseau.
- Indiquez les valeurs suivantes et conservez les valeurs par défaut des autres paramètres :
Propriété | Valeur (saisissez la valeur ou sélectionnez l'option spécifiée) |
Réseau (sous Interfaces réseau) | par défaut |
Sous-réseau (sous Interfaces réseau) | default (Sous-réseau par défaut) (us-east1) |
Network tags (Tags réseau) | http-server |
- Cliquez sur Créer.
- Attendez que le modèle d'instance soit créé.
Créez ensuite un autre modèle d'instance pour le sous-réseausubnet-b en copiant us-east1-template :
- Cliquez sur us-east1-template, puis sur l'option Copier en haut de la page.
- Dans le champ Name (Nom), saisissez europe-west1-template.
- Cliquez sur Mise en réseau, disques, sécurité, gestion , location unique.
- Cliquez sur Mise en réseau.
- Sous Interfaces réseau,modifiez l'interface par défaut. Dans le champ Sous-réseau, sélectionnez par défaut (europe-west1).
- Cliquez sur Créer.
Créer les groupes d'instances gérés
Créez un groupe d'instances géré dans us-east1 et un dans europe-west1.
- Toujours dans Compute Engine, accédez au menu de gauche et cliquez sur Groupes d'instances.
- Cliquez sur Créer un groupe d'instances. Sélectionnez Nouveau groupe d'instances géré (sans état).
- Indiquez les valeurs suivantes et conservez les valeurs par défaut des autres paramètres :
Propriété | Valeur (saisissez la valeur ou sélectionnez l'option spécifiée) |
Name (Nom) | us-east1-mig |
Location (Emplacement) | Plusieurs zones |
Region (Région) | us-east1 |
Instance template (Modèle d'instance) | us-east1-template |
Autoscaling > Règle d'autoscaling > Cliquez sur l'icône en forme de crayon > Type de métrique | Utilisation du processeur |
Objectif d'utilisation du processeur | 80, cliquez sur "OK". |
Intervalle entre chaque autoscaling | 45 |
Nombre minimal d'instances | 1 |
Nombre maximal d'instances | 5 |
- Cliquez sur Créer.
Effectuez ensuite la même procédure pour créer un second groupe d'instances pour europe-west1-mig dans europe-west1 :
- Cliquez sur Créer un groupe d'instances.
- Indiquez les valeurs suivantes et conservez les valeurs par défaut des autres paramètres :
Propriété | Valeur (saisissez la valeur ou sélectionnez l'option spécifiée) |
Nom | europe-west1-mig |
Emplacement | Plusieurs zones |
Région | europe-west1 |
Modèle d'instance | europe-west1-template |
Autoscaling > Règle d'autoscaling > Cliquez sur l'icône en forme de crayon > Type de métrique | Utilisation du processeur |
Objectif d'utilisation du processeur | 80, cliquez sur "OK". |
Intervalle entre chaque autoscaling | 45 |
Nombre minimal d'instances | 1 |
Nombre maximal d'instances | 5 |
- Cliquez sur Créer.
5. Configurer l'équilibreur de charge HTTP
Configurez l'équilibreur de charge HTTP pour équilibrer le trafic entre les deux backends (us-east1-mig dans us-east1 et europe-west1-mig dans europe-west1), comme illustré dans le schéma réseau suivant :
Démarrer la configuration
- Dans la console Cloud, cliquez sur le menu de navigation ( ) > cliquez sur Services réseau > Équilibrage de charge, puis cliquez sur Créer un équilibreur de charge.
- Sous Équilibrage de charge HTTP(S), cliquez sur Démarrer la configuration.
- Sélectionnez D'Internet vers mes VM, Équilibreur de charge HTTP(S) classique, puis cliquez sur Continuer.
- Définissez le paramètre Nom sur http-lb.
Configurer le backend
Les services de backend dirigent le trafic entrant vers un ou plusieurs backends associés. Chaque backend est composé d'un groupe d'instances et de métadonnées sur sa capacité de livraison supplémentaire.
- Cliquez sur Configuration du backend.
- Pour Services de backend et buckets backend, cliquez sur Créer un service de backend.
- Indiquez les valeurs suivantes et conservez les valeurs par défaut des autres paramètres :
Propriété | Valeur (sélectionnez l'option spécifiée) |
Nom | http-backend |
Instance group (Groupe d'instances) | us-east1-mig |
Port numbers (Numéros de ports) | 80 |
Mode d'équilibrage | Fréquence |
Nombre maximal de RPS | 50 (par instance) |
Capacité | 100 |
- Cliquez sur OK.
- Cliquez sur Ajouter un backend.
- Indiquez les valeurs suivantes et conservez les valeurs par défaut des autres paramètres :
Propriété | Valeur (sélectionnez l'option spécifiée) |
Groupe d'instances | europe-west1-mig |
Numéros de ports | 80 |
Mode d'équilibrage | Utilisation |
Utilisation maximale du backend | 80 |
Capacité | 100 |
- Cliquez sur OK.
- Dans le champ Vérification d'état, sélectionnez Créer une vérification d'état.
- Indiquez les valeurs suivantes et conservez les valeurs par défaut des autres paramètres :
Propriété | Valeur (sélectionnez l'option spécifiée) |
Nom | http-health-check |
Protocole | TCP |
Port | 80 |
- Cliquez sur Enregistrer.
- Cochez la case Activer la journalisation.
- Définissez le taux d'échantillonnage sur 1:
- Cliquez sur Créer pour créer le service de backend.
Configurer l'interface
Les règles d'hôte et de chemin d'accès déterminent la manière dont le trafic est dirigé. Par exemple, vous pouvez diriger le trafic vidéo vers un backend et le trafic statique vers un autre backend. Toutefois, vous n'apprendrez pas à configurer les règles d'hôte et de chemin d'accès dans cet atelier.
- Cliquez sur Configuration de l'interface.
- Spécifiez les paramètres suivants et conservez les valeurs par défaut des autres paramètres :
Propriété | Valeur (saisissez la valeur ou sélectionnez l'option spécifiée) |
Protocole | HTTP |
Version IP | IPv4 |
Adresse IP | Éphémère |
Port | 80 |
- Cliquez sur OK.
- Cliquez sur Ajouter un IP et port frontend.
- Spécifiez les paramètres suivants et conservez les valeurs par défaut des autres paramètres :
Propriété | Valeur (saisissez la valeur ou sélectionnez l'option spécifiée) |
Protocole | HTTP |
Version IP | IPv6 |
Adresse IP | Éphémère |
Port | 80 |
- Cliquez sur OK.
Examiner et créer l'équilibreur de charge HTTP
- Cliquez sur Vérifier et finaliser.
- Vérifiez les services de backend et l'interface.
- Cliquez sur Créer.
- Attendez jusqu'à ce que l'équilibreur de charge soit créé.
- Cliquez sur le nom de l'équilibreur de charge (http-lb).
- Notez les adresses IPv4 et IPv6 de l'équilibreur de charge pour la prochaine tâche. Elles seront appelées respectivement [LB_IP_v4] et [LB_IP_v6].
6. Tester l'équilibreur de charge HTTP
Maintenant que vous avez créé l'équilibreur de charge HTTP pour vos backends, vérifiez que le trafic est transféré au service backend.
Accéder à l'équilibreur de charge HTTP
Pour tester l'accès IPv4 à l'équilibreur de charge HTTP, ouvrez un nouvel onglet dans votre navigateur et accédez à http://[LB_IP_v4]. Veillez à remplacer [LB_IP_v4] par l'adresse IPv4 de l'équilibreur de charge.
Si vous disposez d'une adresse IPv6 locale, testez l'adresse IPv6 de l'équilibreur de charge HTTP en accédant à http://[LB_IP_v6]. Veillez à remplacer [LB_IP_v6] par l'adresse IPv6 de l'équilibreur de charge.
Effectuer un test de contrainte sur l'équilibreur de charge HTTP
Créez une VM pour simuler une charge sur l'équilibreur de charge HTTP à l'aide de siege. Déterminez ensuite si le trafic est équilibré sur les deux backends lorsque la charge est élevée.
- Dans la console, accédez au menu de navigation ( ) > Compute Engine > Instances de VM :
- Cliquez sur Créer une instance.
- Indiquez les valeurs suivantes et conservez les valeurs par défaut des autres paramètres :
Propriété | Valeur (saisissez la valeur ou sélectionnez l'option spécifiée) |
Nom | siege-vm |
Région | us-west1 |
Zone | us-west1-c |
Série | N1 |
- Cliquez sur Create (Créer).
- Attendez que l'instance siege-vm soit créée.
- Dans le champ siege-vm, cliquez sur SSH pour lancer un terminal et vous y connecter.
- Exécutez la commande suivante pour installer siege :
sudo apt-get -y install siege
- Pour stocker l'adresse IPv4 de l'équilibreur de charge HTTP dans une variable d'environnement, exécutez la commande suivante, en remplaçant [LB_IP_v4] par l'adresse IPv4:
export LB_IP=[LB_IP_v4]
- Pour simuler une charge, exécutez la commande suivante :
siege -c 250 http://$LB_IP
Vous devriez obtenir le résultat suivant (ne copiez pas cet exemple) :
New configuration template added to /home/student/.siege Run siege -C to view the current settings in that file ** SIEGE 4.0.4 ** Preparing 250 concurrent users for battle. The server is now under siege...
- Dans la console Cloud, cliquez sur le menu de navigation ( ), puis sur Services réseau > Équilibrage de charge :
- Cliquez sur http-lb.
- Cliquez sur l'onglet Surveillance. Surveillez le trafic entre l'Amérique du Nord et les deux backends pendant deux à trois minutes.
Dans un premier temps, le trafic devrait être dirigé vers us-east1-mig, mais à mesure que le RPS augmente, il sera également dirigé vers europe-west1-mig.
Cela démontre que le trafic est transmis par défaut au backend le plus proche, mais qu'il peut être réparti entre les backends si la charge est très élevée.
- Revenez au terminal SSH de siege-vm.
- Appuyez sur CTRL+C pour arrêter siege.
7. Créer une règle de limitation du débit Cloud Armor
Dans cette section, vous allez utiliser Cloud Armor pour empêcher siege-vm d'accéder à l'équilibreur de charge HTTP en définissant une règle de limitation du débit.
- Dans Cloud Shell(pour savoir comment utiliser Cloud Shell, consultez la section Démarrer Cloud Shell sous Configuration et conditions requises), créez une règle de sécurité via gcloud:
gcloud compute security-policies create rate-limit-siege \ --description "policy for rate limiting"
- Ajoutez ensuite une règle de limitation du débit:
gcloud beta compute security-policies rules create 100 \ --security-policy=rate-limit-siege \ --expression="true" \ --action=rate-based-ban \ --rate-limit-threshold-count=50 \ --rate-limit-threshold-interval-sec=120 \ --ban-duration-sec=300 \ --conform-action=allow \ --exceed-action=deny-404 \ --enforce-on-key=IP
- Associez la stratégie de sécurité au service de backend http-backend:
gcloud compute backend-services update http-backend \ --security-policy rate-limit-siege –-global
- Dans la console, accédez au menu de navigation > Sécurité du réseau > Cloud Armor :
- Click rate-limit-siege. La règle doit se présenter comme suit:
Vérifier la règle de sécurité
- Revenez au terminal SSH de siege-vm.
- Exécutez une commande curl sur l'adresse IP de l'équilibreur de charge pour vérifier que vous pouvez toujours vous y connecter et que vous devriez recevoir une réponse 200.
curl http://$LB_IP
- Pour simuler une charge, exécutez la commande suivante dans le terminal SSH de siege-vm:
siege -c 250 http://$LB_IP
Vous devriez obtenir le résultat suivant (ne copiez pas cet exemple):
** SIEGE 4.0.4 ** Preparing 250 concurrent users for battle. The server is now under siege...
- Explorez les journaux de la stratégie de sécurité pour déterminer si ce trafic est également bloqué.
- Dans la console, accédez à Menu de navigation > Sécurité du réseau > Cloud Armor.
- Cliquez sur rate-limit-siege.
- Cliquez sur Logs (Journaux).
- Cliquez sur Afficher les journaux de stratégie.
- Sur la page "Journalisation", veillez à effacer tout le texte dans l'aperçu de la requête.
- Sélectionnez la ressource Cloud HTTP Load Balancer > http-lb-forwarding-rule > http-lb, puis cliquez sur Ajouter. Vous trouverez ci-dessous la requête MQL(Monitoring Query Language), que vous pouvez copier et coller dans l'éditeur de requête :
resource.type="http_load_balancer" resource.labels.forwarding_rule_name="http-lb-forwarding-rule" resource.labels.url_map_name="http-lb"
- À présent, cliquez sur Exécuter la requête.
- Développez une entrée de journal dans les résultats de la requête.
- Développez httpRequest. La requête doit provenir de l'adresse IP siege-vm. Si ce n'est pas le cas, développez une autre entrée de journal.
- Développez "jsonPayload".
- Développer la stratégie "activéeSecurityPolicy".
Notez que la valeur setupAction est définie sur RATE_BASED_BAN et que le nom est rate-limit-siege.
- Vous pouvez également effectuer une vérification supplémentaire en accédant au menu de navigation ( ), puis en cliquant sur Services réseau > Équilibrage de charge : Cliquez sur http-lb. Cliquez sur l'onglet Surveillance.
Vous pouvez voir le trafic siege dans les graphiques. Vous remarquerez également que le trafic à débit limité n'atteint pas le backend et est bloqué par la règle Cloud Armor.
Félicitations ! Vous avez terminé cet atelier sur la limitation du débit avec Cloud Armor.
©2020 Google LLC Tous droits réservés. Google et le logo Google sont des marques de Google LLC. Tous les autres noms de société et de produit peuvent être des marques des sociétés auxquelles ils sont associés.
8. Nettoyage de l'atelier
- Accédez à Sécurité du réseau >> Cloud Armor >> %POLICY NAME%, puis sélectionnez "Delete" (Supprimer).
- Accédez à Mise en réseau >> Services réseau >> Équilibrage de charge. Sélectionnez l'équilibreur de charge que vous avez créé et cliquez sur "Supprimer".
Sélectionnez le service de backend et la vérification d'état comme ressources supplémentaires à supprimer :
- Accédez au menu de navigation ( ) > Compute Engine > Groupes d'instances. Sélectionnez les deux groupes d'instances gérés, puis cliquez sur "Supprimer".
Confirmez la suppression en saisissant "delete" dans la zone de texte.
Attendez que les groupes d'instances gérés soient supprimés. Cette action supprime également les instances du groupe. Vous ne pouvez supprimer les modèles qu'après la suppression du groupe d'instances.
- Accédez à Modèles d'instance dans le volet de gauche**.** Sélectionnez les deux modèles d'instances, puis cliquez sur "Supprimer".
- Accédez à Instances de VM depuis le volet de gauche**.** Sélectionnez les points de suspension à côté de l'instance siege-vm et cliquez sur "Supprimer".
- Accédez au menu de navigation ( ) > Réseau VPC > Pare-feu. Sélectionnez "default-allow-health-check" et cliquez sur "Delete" (Supprimer).
9. Félicitations !
Vous avez implémenté la limitation du débit avec Cloud Armor. Vous avez configuré un équilibreur de charge HTTP avec des backends dans les régions us-east1 et europe-west1. Vous avez ensuite effectué un test de contrainte sur l'équilibreur de charge avec une VM et ajouté l'adresse IP à la liste de blocage via la limitation du débit avec Cloud Armor. Vous avez appris comment explorer les journaux d'une stratégie de sécurité pour déterminer la cause du blocage du trafic.
Points abordés
- Configurer des modèles d'instance et créer des groupes d'instances gérés
- Configurer un équilibreur de charge HTTP
- Créer une règle de limitation du débit Cloud Armor
- Comment vérifier que la règle de limitation du débit fonctionne comme prévu
Étapes suivantes
- Essayez de configurer une règle de limitation du débit basée sur une plage d'adresses IP source. Voici un exemple de commande :
gcloud alpha compute security-policies rules create 105 \ --security-policy sec-policy \ --src-ip-ranges "1.2.3.0/24" \ --action throttle \ --rate-limit-threshold-count 100 \ --rate-limit-threshold-interval-sec 60 \ --conform-action allow \ --exceed-action deny-429 \ --enforce-on-key IP
- Essayez de configurer une règle de limitation du débit basée sur le code régional. Voici un exemple de commande :
gcloud alpha compute security-policies rules create 101 \ --security-policy sec-policy \ --expression "origin.region_code == 'US'" \ --action rate-based-ban \ --rate-limit-threshold-count 10 \ --rate-limit-threshold-interval-sec 60 \ --ban-duration-sec 300 \ --ban-threshold-count 1000 \ --ban-threshold-interval-sec 600 \ --conform-action allow \ --exceed-action deny-403 \ --enforce-on-key IP