Application Load Balancers - Elastic Load Balancing

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Application Load Balancers

Un équilibreur de charge constitue le point de contact unique pour les clients. Les clients envoient les demandes à l'équilibreur de charge, lequel les envoie aux cibles,telles que les instances EC2, par exemple. Pour configurer votre équilibreur de charge, vous créez des groupes cible et vous enregistrez ensuite les cibles auprès de vos groupes cible. Vous créez également des écouteurs pour rechercher les demandes de connexion des clients, et des règles d'écouteur pour acheminer les demandes des clients vers les cibles dans un ou plusieurs groupes cible.

Pour de plus amples informations, consultez la section Fonctionnement d'Elastic Load Balancing, dans le Guide de l'utilisateur Elastic Load Balancing.

Sous-réseaux pour votre équilibreur de charge

Lorsque vous créez un Application Load Balancer, vous devez activer les zones contenant vos cibles. Pour activer une zone, spécifiez un sous-réseau dans la zone. Elastic Load Balancing crée un nœud d'équilibreur de charge dans chaque zone que vous spécifiez.

Considérations
  • Votre équilibreur de charge est plus efficace si vous vous assurez que chaque zone activée contient au moins une cible enregistrée.

  • Si vous enregistrez des cibles dans une zone mais que vous n'activez pas la zone, ces cibles enregistrées ne reçoivent pas le trafic de l'équilibreur de charge.

  • Si vous activez plusieurs zones pour votre équilibreur de charge, les zones doivent être du même type. Par exemple, vous ne pouvez pas activer à la fois une zone de disponibilité et une zone locale.

  • Vous pouvez spécifier un sous-réseau qui a été partagé avec vous.

Application Load Balancers prennent en charge les types de sous-réseaux suivants.

Sous-réseaux de la zone de disponibilité

Vous devez sélectionner au moins deux sous-réseaux de zone de disponibilité. Les restrictions suivantes s'appliquent :

  • Chaque sous-réseau doit appartenir à une zone de disponibilité différente.

  • Pour que votre équilibreur de charge puisse évoluer correctement, vérifiez que chaque sous-réseau de zone de disponibilité de votre équilibreur de charge dispose d'un bloc d'adresses CIDR avec au moins un masque de bits /27 (par exemple, 10.0.0.0/27) et au moins huit adresses IP libres par sous-réseau. Ces huit adresses IP sont nécessaires pour permettre à l'équilibreur de charge de monter en puissance si nécessaire. Votre équilibreur de charge utilise ces adresses IP pour établir des connexions avec les cibles. Sans eux, votre Application Load Balancer pourrait rencontrer des difficultés lors des tentatives de remplacement de nœuds, ce qui le ferait entrer dans un état d'échec.

    Remarque : si le sous-réseau d'un Application Load Balancers manque d'adresses IP utilisables lors d'une tentative de mise à l'échelle, l'Application Load Balancer fonctionnera avec une capacité insuffisante. Pendant cette période, les anciens nœuds continueront à desservir le trafic, mais la tentative de mise à l'échelle bloquée peut provoquer des erreurs ou des délais d'attente de 5xx lors de la tentative d'établissement d'une connexion.

Sous-réseaux de zone locale

Vous pouvez spécifier un ou plusieurs sous-réseaux de zone locale. Les restrictions suivantes s'appliquent :

  • Vous ne pouvez pas l'utiliser AWS WAF avec l'équilibreur de charge.

  • Vous ne pouvez pas utiliser une fonction Lambda comme cible.

  • Vous ne pouvez pas utiliser les sessions rémanentes ou l'adhérence des applications.

Sous-réseaux Outpost

Vous pouvez spécifier un seul sous-réseau Outpost. Les restrictions suivantes s'appliquent :

  • Vous devez avoir installé et configuré un Outpost dans votre centre de données sur site. Vous devez avoir une connexion réseau fiable entre votre Outpost et sa région AWS . Pour plus d’informations, consultez le Guide de l’utilisateur AWS Outposts.

  • L'équilibreur de charge nécessite deux instances large sur l'Outpost pour les nœuds de l'équilibreur de charge. Les types d'instance pris en charge sont indiqués dans le tableau suivant. L'équilibreur de charge se met à l'échelle selon les besoins, en redimensionnant les nœuds taille par taille (de large à xlarge, puis xlarge à 2xlarge, puis 2xlarge à 4xlarge). Après avoir redimensionné les nœuds à la plus grande taille d'instance, si vous avez besoin de capacité supplémentaire, l'équilibreur de charge ajoute des instances 4xlarge en tant que nœuds d'équilibreur de charge. Si vous ne disposez pas d'une capacité d'instance suffisante ou d'adresses IP disponibles pour mettre à l'échelle l'équilibreur de charge, celui-ci signale un événement à AWS Health Dashboard et l'état de l'équilibreur de charge est active_impaired.

  • Vous pouvez enregistrer des cibles par ID d'instance ou par adresse IP. Si vous enregistrez des cibles dans la AWS région pour l'avant-poste, elles ne sont pas utilisées.

  • Les fonctionnalités suivantes ne sont pas disponibles : fonctions Lambda en tant que cibles, intégration AWS WAF , sessions permanentes, support d'authentification et intégration avec AWS Global Accelerator.

Un Application Load Balancer peut être déployé sur des instances c5/c5d, m5/m5d ou r5/r5d d'un Outpost. Le tableau suivant indique la taille et le volume EBS par type d'instance que l'équilibreur de charge peut utiliser sur un Outpost :

Type et taille de l'instance Volume EBS (Go)
c5/c5d
large 50
xlarge 50
2xlarge 50
4xlarge 100
m5/m5d
large 50
xlarge 50
2xlarge 100
4xlarge 100
r5/r5d
large 50
xlarge 100
2xlarge 100
4xlarge 100

Groupes de sécurité d'équilibreur de charge

Un groupe de sécurité sert de pare-feu pour contrôler le trafic autorisé vers et depuis votre équilibreur de charge. Vous pouvez choisir les ports et protocoles pour autoriser à la fois le trafic entrant et sortant.

Les règles des groupes de sécurité associés à votre équilibreur de charge doivent autoriser le trafic dans les deux sens sur les ports d'écouteur et de surveillance de l'état. Chaque fois que vous ajoutez un écouteur à un équilibreur de charge ou que vous mettez à jour le port de vérification de l'état d'un groupe cible, vous devez passer en revue vos règles de groupe de sécurité pour vérifier qu'elles autorisent le trafic sur le nouveau port dans les deux sens. Pour plus d’informations, consultez Règles recommandées.

États d'un équilibreur de charge

Un équilibreur de charge peut avoir l'un des états suivants :

provisioning

L'équilibreur de charge est en cours de mise en place.

active

L'équilibreur de charge est entièrement mis en place et prêt à acheminer le trafic.

active_impaired

L'équilibreur de charge achemine le trafic mais ne dispose pas des ressources dont il a besoin pour se mettre à l'échelle.

failed

L'équilibreur de charge n'a pas pu être configuré.

Attributs de l'équilibreur de charge

Les attributs de l'équilibreur de charge sont les suivants :

access_logs.s3.enabled

Indique si les journaux d'accès stockés dans Amazon S3 sont activés. L’argument par défaut est false.

access_logs.s3.bucket

Le nom du compartiment Amazon S3 pour les journaux d'accès. Cet attribut est obligatoire si les journaux d'accès sont activés. Pour plus d’informations, consultez Activer les journaux d'accès.

access_logs.s3.prefix

Le préfixe pour l'emplacement dans le compartiment Amazon S3.

client_keep_alive.seconds

La valeur keepalive du client, en secondes. La valeur par défaut est de 3 600 secondes.

deletion_protection.enabled

Indique si la protection contre la suppression est activée. L’argument par défaut est false.

idle_timeout.timeout_seconds

Valeur de délai d'inactivité, en secondes. Le durée par défaut est 60 secondes.

ipv6.deny_all_igw_traffic

Bloque l'accès de la passerelle Internet (IGW) à l'équilibreur de charge, empêchant les accès non prévus à votre équilibreur de charge interne via une passerelle Internet. Il est défini sur false pour les équilibreurs de charge accessibles sur Internet et sur true pour les équilibreurs de charge internes. Cet attribut n'empêche pas l'accès à Internet hors IGW (par exemple, via le peering, AWS Direct Connect Transit Gateway ou). AWS VPN

routing.http.desync_mitigation_mode

Détermine la manière dont l'équilibreur de charge gère les demandes susceptibles de présenter un risque pour la sécurité de votre application. Les valeurs possibles sont monitor, defensive et strictest. L’argument par défaut est defensive.

routing.http.drop_invalid_header_fields.enabled

Indique si les en-têtes HTTP avec des champs d'en-tête non valides sont supprimés par l'équilibreur de charge (true), ou acheminés vers des cibles (false). L’argument par défaut est false. Elastic Load Balancing exige que les noms d'en-têtes HTTP valides soient conformes à l'expression régulière[-A-Za-z0-9]+, comme décrit dans le registre des noms de champs HTTP. Chaque nom est composé de caractères alphanumériques ou traits d'union. Sélectionnez true si vous voulez que les en-têtes HTTP non conformes à ce modèle soient supprimés des demandes.

routing.http.preserve_host_header.enabled

Indique si l'Application Load Balancer doit préserver l'en-tête Host dans la demande HTTP et l'envoyer aux cibles sans aucune modification. Les valeurs possibles sont true et false. La valeur par défaut est false.

routing.http.x_amzn_tls_version_and_cipher_suite.enabled

Indique si les deux en-têtes (x-amzn-tls-version et x-amzn-tls-cipher-suite), qui contiennent des informations sur la version et la suite de chiffrement TLS négociées, sont ajoutés à la requête du client avant de l'envoyer à la cible. L'en-tête x-amzn-tls-version contient des informations sur la version du protocole TLS négociée avec le client, et l'en-tête x-amzn-tls-cipher-suite contient des informations sur la suite de chiffrement négociée avec le client. Les deux en-têtes sont au format OpenSSL. Les valeurs possibles pour l'attribut sont true et false. L’argument par défaut est false.

routing.http.xff_client_port.enabled

Indique si l'en-tête X-Forwarded-For doit conserver le port source utilisé par le client pour se connecter à l'équilibreur de charge. Les valeurs possibles sont true et false. La valeur par défaut est false.

routing.http.xff_header_processing.mode

Vous permet de modifier, de conserver ou de supprimer l'en-tête X-Forward-For dans la requête HTTP avant que l'Application Load Balancer ne l'envoie à la cible. Les valeurs possibles sont append, preserve et remove. L’argument par défaut est append.

  • Si la valeur est append, l'Application Load Balancer ajoute l'adresse IP du client (du dernier saut) à l'en-tête X-Forward-For dans la requête HTTP avant de l'envoyer aux cibles.

  • Si la valeur est preserve, l'Application Load Balancer conserve l'en-tête X-Forward-For dans la requête HTTP et l'envoie aux cibles sans aucune modification.

  • Si la valeur est remove, l'Application Load Balancer supprime l'en-tête X-Forward-For dans la requête HTTP avant de l'envoyer aux cibles.

routing.http2.enabled

Indique si HTTP/2 est activée. L’argument par défaut est true.

waf.fail_open.enabled

Indique s'il faut autoriser un équilibreur de charge AWS WAF activé à acheminer les demandes vers des cibles s'il n'est pas en mesure de les transmettre à. AWS WAF Les valeurs possibles sont true et false. La valeur par défaut est false.

Note

L'attribut routing.http.drop_invalid_header_fields.enabled a été introduit pour offrir une protection contre la désynchronisation HTTP. L'attribut routing.http.desync_mitigation_mode a été ajouté pour fournir une protection plus complète contre la désynchronisation HTTP pour vos applications. Vous n'êtes pas obligé d'utiliser les deux attributs et vous pouvez choisir l'un ou l'autre, en fonction des exigences de votre application.

Type d’adresse IP

Vous pouvez définir les types d'adresses IP que les clients peuvent utiliser pour accéder à vos équilibreurs de charge internes et connectés à Internet.

Les équilibreurs de charge d'application prennent en charge les types d'adresses IP suivants :

ipv4

Les clients doivent se connecter à l'équilibreur de charge à l'aide d'adresses IPv4 (par exemple, 192.0.2.1)

dualstack

Les clients peuvent se connecter à l'équilibreur de charge à l'aide d'adresses IPv4 (par exemple, 192.0.2.1) et d'adresses  Pv6 (par exemple, 2001:0db8:85a3:0:0:8a2e:0370:7334).

Considérations
  • L'équilibreur de charge communique avec les cibles en fonction du type d'adresse IP du groupe cible.

  • Lorsque vous activez le mode double pile pour l'équilibreur de charge, Elastic Load Balancing fournit un enregistrement DNS AAAA pour l'équilibreur de charge. Les clients qui communiquent avec l'équilibreur de charge à l'aide d'adresses IPv4 résolvent l'enregistrement DNS A. Les clients qui communiquent avec l'équilibreur de charge à l'aide d'adresses IPv6 résolvent l'enregistrement DNS AAAA.

  • L'accès à vos équilibreurs de charge internes à double pile via la passerelle Internet est bloqué pour empêcher tout accès Internet non prévu. Toutefois, cela n'empêche pas l'accès à Internet hors IGW (par exemple via le peering, Transit Gateway ou). AWS Direct Connect AWS VPN

dualstack-without-public-ipv4

Les clients doivent se connecter à l'équilibreur de charge à l'aide d'adresses IPv6 (par exemple, 2001:0 db 8:85 a 3:0:0:8 a2e : 0370:7334).

Considérations
  • L'authentification Application Load Balancer prend uniquement en charge l'IPv4 lors de la connexion à un fournisseur d'identité (IdP) ou à un point de terminaison Amazon Cognito. Sans adresse IPv4 publique, l'équilibreur de charge ne peut pas terminer le processus d'authentification, ce qui entraîne des erreurs HTTP 500.

Pour plus d'informations sur les types d'adresses IP, consultezTypes d'adresses IP de votre Application Load Balancer.

Carte des ressources de l'Application Load Balancer

La carte des ressources Application Load Balancer fournit un affichage interactif de l'architecture de votre équilibreur de charge, y compris ses écouteurs, règles, groupes cibles et cibles associés. La carte des ressources met également en évidence les relations et les chemins de routage entre toutes les ressources, produisant ainsi une représentation visuelle de la configuration de votre équilibreur de charge.

Pour afficher la carte des ressources de votre équilibreur de charge d'application à l'aide de la console
  1. Ouvrez la console Amazon EC2 à l’adresse https://console.aws.amazon.com/ec2/.

  2. Dans le volet de navigation, choisissez Load Balancers (Équilibreurs de charge).

  3. Sélectionnez l'équilibreur de charge.

  4. Choisissez l'onglet Carte des ressources pour afficher la carte des ressources de l'équilibreur de charge.

Composants de la carte des ressources

Vues cartographiques

Deux vues sont disponibles dans la carte des ressources Application Load Balancer : Overview et Unhealthy Target Map. L'option Vue d'ensemble est sélectionnée par défaut et affiche toutes les ressources de votre équilibreur de charge. La sélection de la vue Carte des cibles malsaines n'affichera que les cibles malsaines et les ressources qui leur sont associées.

La vue Malhealthy Target Map peut être utilisée pour dépanner les cibles dont les tests de santé échouent. Pour plus d’informations, consultez Résoudre les problèmes liés aux cibles défectueuses à l'aide de la carte des ressources.

Groupes de ressources

La carte des ressources Application Load Balancer contient quatre groupes de ressources, un pour chaque type de ressource. Les groupes de ressources sont les suivants : Listeners, Rules, Target groups et Targets.

Tuiles de ressources

Chaque ressource d'un groupe possède sa propre vignette, qui affiche les détails relatifs à cette ressource spécifique.

  • Le survol d'une vignette de ressources permet de mettre en évidence les relations entre celle-ci et les autres ressources.

  • La sélection d'une vignette de ressources met en évidence les relations entre celle-ci et les autres ressources et affiche des informations supplémentaires sur cette ressource.

    • conditions de règle : les conditions de chaque règle.

    • résumé de l'état de santé du groupe cible : nombre de cibles enregistrées pour chaque état de santé.

    • état de santé cible L'état de santé actuel de la cible et sa description.

    Note

    Vous pouvez désactiver l'option Afficher les détails des ressources pour masquer des détails supplémentaires dans la carte des ressources.

  • Chaque vignette de ressource contient un lien qui, lorsqu'il est sélectionné, permet d'accéder à la page de détails de cette ressource.

    • Écouteurs ‐ Sélectionnez le protocole des écouteurs : port. Par exemple, HTTP:80

    • Règles ‐ Sélectionnez l'action des règles. Par exemple, Forward to target group

    • Groupes cibles ‐ Sélectionnez le nom du groupe cible. Par exemple, my-target-group

    • Cibles ‐ Sélectionnez l'ID des cibles. Par exemple, i-1234567890abcdef0

Exporter la carte des ressources

En sélectionnant Exporter, vous avez la possibilité d'exporter la vue actuelle de la carte des ressources de votre application Load Balancer au format PDF.

Connexions de l'équilibreur de charge

Lors du traitement d'une demande, l'équilibreur de charge maintient deux connexions : une connexion avec le client et une connexion avec une cible. La connexion entre l'équilibreur de charge et le client est également appelée connexion frontale. La connexion entre l'équilibreur de charge et la cible est également appelée connexion principale.

Délai d'inactivité des connexions

Le délai d'inactivité de la connexion est la période pendant laquelle une connexion client ou cible existante peut rester inactive, sans qu'aucune donnée ne soit envoyée ou reçue, avant que l'équilibreur de charge ne ferme la connexion.

Pour garantir que les opérations longues telles que le téléchargement de fichiers aient le temps de se terminer, envoyez au moins 1 octet de données avant la fin de chaque période d'inactivité et augmentez la durée de la période d'inactivité selon les besoins. Nous vous recommandons également de configurer le délai d'inactivité de votre application afin qu'il soit supérieur au délai d'inactivité configuré pour l'équilibreur de charge. Sinon, si l'application ferme la connexion TCP à l'équilibreur de charge de manière inappropriée, celui-ci peut envoyer une demande à l'application avant qu'elle ne reçoive le paquet indiquant que la connexion est fermée. Si tel est le cas, l'équilibreur de charge envoie une erreur HTTP 502 Bad Gateway au client.

Par défaut, Elastic Load Balancing définit le délai d'inactivité de votre équilibreur de charge à 60 secondes, soit 1 minute. Utilisez la procédure suivante pour définir une valeur de délai d'inactivité différente.

Pour mettre à jour la valeur du délai d'inactivité de la connexion à l'aide de la console
  1. Ouvrez la console Amazon EC2 à l’adresse https://console.aws.amazon.com/ec2/.

  2. Dans le volet de navigation, choisissez Load Balancers (Équilibreurs de charge).

  3. Sélectionnez l'équilibreur de charge.

  4. Dans l'onglet Attributes, choisissez Edit.

  5. Sous Configuration du trafic, entrez une valeur pour le délai d'inactivité de la connexion. La plage valide est comprise entre 1 et 4 000 secondes.

  6. Sélectionnez Enregistrer les modifications.

Pour mettre à jour la valeur du délai d'inactivité à l'aide du AWS CLI

Utilisez la commande modify-load-balancer-attributes avec l'attribut idle_timeout.timeout_seconds.

Durée de conservation du client HTTP

La durée de conservation du client HTTP est la durée maximale pendant laquelle un Application Load Balancer peut maintenir une connexion HTTP persistante avec un client. Une fois la durée de conservation du client HTTP configurée expirée, l'Application Load Balancer accepte une demande et renvoie une réponse qui ferme la connexion en douceur.

Le type de réponse envoyée par l'équilibreur de charge dépend de la version HTTP utilisée par la connexion client. Pour les clients connectés via HTTP 1.x, l'équilibreur de charge envoie un en-tête HTTP contenant le champ. Connection: close Pour les clients connectés via HTTP/2, l'équilibreur de charge envoie une GOAWAY trame.

Par défaut, les équilibreurs de charge d'application définissent la durée de conservation du client HTTP sur 3 600 secondes, soit 1 heure. La durée de conservation du client HTTP ne peut pas être désactivée ou définie en dessous du minimum de 60 secondes, mais vous pouvez augmenter la durée de conservation du client HTTP jusqu'à un maximum de 604 800 secondes, soit 7 jours. L'Application Load Balancer commence la période de conservation du client HTTP lorsqu'une connexion HTTP est initialement établie avec un client. La durée continue de courir lorsqu'il n'y a pas de trafic et n'est pas réinitialisée tant qu'une nouvelle connexion n'est pas établie.

Note

Lorsque vous changez le type d'adresse IP de votre Application Load Balancer en un autre, dualstack-without-public-ipv4 l'équilibreur de charge attend que toutes les connexions actives soient terminées. Pour réduire le temps nécessaire pour changer le type d'adresse IP de vos équilibreurs de charge d'application, pensez à réduire la durée de conservation du client HTTP.

L'Application Load Balancer affecte la durée de conservation du client HTTP une seule fois lors de la connexion initiale. Lors de la mise à jour de la durée de conservation du client HTTP, cela peut entraîner des connexions simultanées avec différentes valeurs de durée de conservation du client HTTP. Les connexions existantes conserveront la valeur de durée keepalive du client HTTP appliquée lors de sa connexion initiale, tandis que toute nouvelle connexion recevra la valeur de durée keepalive mise à jour du client HTTP.

Pour mettre à jour la valeur de durée de conservation du client à l'aide de la console
  1. Ouvrez la console Amazon EC2 à l’adresse https://console.aws.amazon.com/ec2/.

  2. Dans le volet de navigation, choisissez Load Balancers (Équilibreurs de charge).

  3. Sélectionnez l'équilibreur de charge.

  4. Dans l'onglet Attributes, choisissez Edit.

  5. Sous Configuration du trafic, entrez une valeur pour la durée de conservation du client HTTP. La plage valide est comprise entre 60 et 604 800 secondes.

  6. Sélectionnez Enregistrer les modifications.

Pour mettre à jour la valeur de la durée de conservation du client à l'aide du AWS CLI

Utilisez la commande modify-load-balancer-attributes avec l'attribut client_keep_alive.seconds.

Equilibrage de charge entre zones

Avec les Application Load Balancers, la répartition de charge entre zones est activé par défaut et ne peut pas être modifié au niveau de l'équilibreur de charge. Pour plus d'informations, consultez Équilibrage de charge entre zones dans le Guide de l'utilisateur Elastic Load Balancing.

Il est possible de désactiver la répartition de charge entre zones au niveau du groupe cible. Pour plus d’informations, consultez Désactiver la répartition de charge entre zones.

Deletion protection (Protection contre la suppression)

Pour éviter la suppression accidentelle de votre équilibreur de charge, vous pouvez activer la protection contre la suppression. Par défaut, la protection contre la suppression est désactivée pour votre équilibreur de charge.

Si vous activez la protection contre la suppression de votre équilibreur de charge, vous devez la désactiver pour pouvoir supprimer l'équilibreur de charge.

Pour activer la protection contre la suppression à l'aide de la console
  1. Ouvrez la console Amazon EC2 à l’adresse https://console.aws.amazon.com/ec2/.

  2. Dans le volet de navigation, choisissez Load Balancers (Équilibreurs de charge).

  3. Sélectionnez l'équilibreur de charge.

  4. Dans l'onglet Attributes, choisissez Edit.

  5. Sous Configuration, activez la Protection contre la suppression.

  6. Sélectionnez Enregistrer les modifications.

Pour désactiver la protection contre la suppression à l'aide de la console
  1. Ouvrez la console Amazon EC2 à l’adresse https://console.aws.amazon.com/ec2/.

  2. Dans le volet de navigation, choisissez Load Balancers (Équilibreurs de charge).

  3. Sélectionnez l'équilibreur de charge.

  4. Dans l'onglet Attributes, choisissez Edit.

  5. Sous la page Configuration, désactivez la Protection contre la suppression.

  6. Sélectionnez Enregistrer les modifications.

Pour activer ou désactiver la protection contre la suppression à l'aide du AWS CLI

Utilisez la commande modify-load-balancer-attributes avec l'attribut deletion_protection.enabled.

Mode d'atténuation de désynchronisation

Le mode d'atténuation de désynchronisation protège votre application contre les problèmes dus à la désynchronisation HTTP. L'équilibreur de charge classe chaque demande en fonction de son niveau de menace, autorise les demandes sécurisées, puis atténue les risques comme spécifié par le mode d'atténuation que vous spécifiez. Les modes d'atténuation de désynchronisation sont Moniteur, Défensif et Le plus strict. La valeur par défaut est le mode Défensif, qui fournit une atténuation durable contre la désynchronisation HTTP tout en maintenant la disponibilité de votre application. Vous pouvez passer au mode Le plus strict pour vous assurer que votre application reçoit uniquement les requêtes conformes à la RFC 7230.

La bibliothèque http_desync_guardian analyse les requêtes HTTP pour empêcher les attaques HTTP par désynchronisation. Pour plus d'informations, consultez HTTP Desync Guardian sur. GitHub

Classifications

Les classifications sont les suivantes :

  • Conformité : la requête est conforme à la RFC 7230 et ne présente aucune menace de sécurité connue.

  • Acceptable : la requête n'est pas conforme à la RFC 7230 mais ne présente aucune menace de sécurité connue.

  • Ambiguë : la requête n'est pas conforme à la RFC 7230 mais présente un risque, car divers serveurs web et proxys pourraient la traiter différemment.

  • Sévère : la requête présente un risque de sécurité élevé. L'équilibreur de charge bloque la requête, sert une réponse 400 au client et ferme la connexion client.

Si une requête n'est pas conforme à la RFC 7230, l'équilibreur de charge incrémente la métrique DesyncMitigationMode_NonCompliant_Request_Count. Pour plus d’informations, consultez Métriques Application Load Balancer.

La classification de chaque demande est incluse dans les journaux d'accès de l'équilibreur de charge. Si la demande n'est pas conforme, les journaux d'accès incluent un code de motif de classification. Pour plus d’informations, consultez Motifs de classification.

Modes

Le tableau suivant décrit la façon dont les Application Load Balancers traitent les requêtes en fonction du mode et de la classification.

Classification Mode Moniteur Mode Défensif Mode Le plus strict
Conforme Autorisé Autorisé Autorisé
Acceptable Autorisé Autorisé Bloqué
Ambigu Autorisé Autorisé¹ Bloqué
Sévère Autorisé Bloqué Bloqué

¹ Achemine les requêtes mais ferme les connexions client et cible. Des frais supplémentaires peuvent vous être facturés si votre équilibreur de charge reçoit un grand nombre de demandes ambiguës en mode défensif. En effet, l'augmentation du nombre de nouvelles connexions par seconde contribue aux unités de capacité de l'équilibreur de charge (LCU) utilisées par heure. Vous pouvez utiliser la métrique NewConnectionCount pour comparer la manière dont votre équilibreur de charge établit de nouvelles connexions en mode moniteur et en mode défensif.

Pour mettre à jour le mode d'atténuation de désynchronisation à l'aide de la console
  1. Ouvrez la console Amazon EC2 à l’adresse https://console.aws.amazon.com/ec2/.

  2. Dans le volet de navigation, choisissez Load Balancers (Équilibreurs de charge).

  3. Sélectionnez l'équilibreur de charge.

  4. Dans l'onglet Attributes, choisissez Edit.

  5. Sous Gestion des paquets, pour Mode d'atténuation de la désynchronisation, choisissez Défensif, Plus strict ou Surveiller.

  6. Sélectionnez Enregistrer les modifications.

Pour mettre à jour le mode d'atténuation de la désynchronisation à l'aide du AWS CLI

Utilisez la commande modify-load-balancer-attributes avec l'attribut routing.http.desync_mitigation_mode défini sur monitor, defensive ou strictest.

Préservation de l'en-tête de l'hôte

Lorsque vous activez l'attribut Préserver l'en-tête de l'hôte, Application Load Balancer préserve l'en-tête Host dans la demande HTTP et envoie l'en-tête aux cibles sans aucune modification. Si Application Load Balancer reçoit plusieurs en-têtes Host, il les conserve tous. Les règles de l'écouteur ne sont appliquées qu'au premier en-tête Host reçu.

Par défaut, lorsque l'attribut Préserver l'en-tête de l'hôte n'est pas activé, Application Load Balancer modifie l'en-tête Host de la manière suivante :

Lorsque la préservation de l'en-tête de l'hôte n'est pas activée et que le port de l'écouteur n'est pas un port par défaut : lorsque vous n'utilisez pas les ports par défaut (ports 80 ou 443), nous ajoutons le numéro de port à l'en-tête de l'hôte s'il n'est pas déjà ajouté par le client. Par exemple, l'en-tête Host de la demande HTTP avec Host: www.example.com serait modifié en Host: www.example.com:8080, si le port de l'écouteur n'est pas un port par défaut, tel que 8080.

Lorsque la préservation de l'en-tête de l'hôte n'est pas activée et que le port de l'écouteur est un port par défaut (port 80 ou 443) : pour les ports de l'écouteur par défaut (port 80 ou 443), nous n'ajoutons pas le numéro de port à l'en-tête de l'hôte sortant. Tout numéro de port qui figurait déjà dans l'en-tête de l'hôte entrant est supprimé.

Le tableau suivant présente d'autres exemples de la façon dont les Application Load Balancers traitent les en-têtes d'hôte dans la demande HTTP en fonction du port de l'écouteur.

Port de l'écouteur Exemple de demande En-têtes de l'hôte dans la demande La conservation de l'en-tête de l'hôte est désactivée (comportement par défaut) La conservation de l'en-tête de l'hôte est activée
La demande est envoyée sur l'écouteur HTTP/HTTPS par défaut. GET /index.html HTTP/1.1 Host: example.com example.com example.com example.com
La demande est envoyée sur l'écouteur HTTP par défaut et l'en-tête de l'hôte possède un port (par exemple, 80 ou 443). GET /index.html HTTP/1.1 Host: example.com:80 example.com:80 example.com example.com:80
La demande possède un chemin absolu. GET https://dns_name/index.html HTTP/1.1 Host: example.com example.com dns_name example.com
La demande est envoyée sur un port d'écoute autre que le port par défaut (par exemple, 8080) GET /index.html HTTP/1.1 Host: example.com example.com example.com:8080 example.com
La demande est envoyée sur un port d'écouteur autre que celui par défaut et l'en-tête de l'hôte possède un port (par exemple, 8080). GET /index.html HTTP/1.1 Host: example.com:8080 example.com:8080 example.com:8080 example.com:8080
Pour activer la conservation de l'en-tête de l'hôte à l'aide de la console
  1. Ouvrez la console Amazon EC2 à l'adresse https://console.aws.amazon.com/ec2/.

  2. Dans le volet de navigation, choisissez Load Balancers.

  3. Sélectionnez l'équilibreur de charge.

  4. Dans l'onglet Attributes, choisissez Edit.

  5. Sous Gestion des paquets, activez Conserver l'en-tête de l'hôte.

  6. Sélectionnez Enregistrer les modifications.

Pour activer la conservation de l'en-tête de l'hôte à l'aide du AWS CLI

Utilisez la commande modify-load-balancer-attributes avec l'attribut routing.http.preserve_host_header.enabled défini sur true.

Équilibreurs de charge des applications et AWS WAF

Vous pouvez l'utiliser AWS WAF avec votre Application Load Balancer pour autoriser ou bloquer les demandes en fonction des règles d'une liste de contrôle d'accès Web (ACL Web). Pour plus d'informations, consultez Utilisation des ACL web dans le Guide du développeur AWS WAF .

Par défaut, si l'équilibreur de charge ne parvient pas à obtenir de réponse AWS WAF, il renvoie une erreur HTTP 500 et ne transmet pas la demande. Si vous avez besoin que votre équilibreur de charge transmette les demandes aux cibles même s'il est incapable de les contacter AWS WAF, vous pouvez activer AWS WAF l'intégration. Pour vérifier si votre équilibreur de charge s'intègre à AWS WAF, sélectionnez votre équilibreur de charge dans AWS Management Console l'onglet Services intégrés.

ACL Web prédéfinies

Lorsque vous activez AWS WAF l'intégration, vous pouvez choisir de créer automatiquement une nouvelle ACL Web avec des règles prédéfinies. L'ACL Web prédéfinie inclut trois règles AWS gérées qui offrent des protections contre les menaces de sécurité les plus courantes.

Pour activer AWS WAF l'utilisation de la console
  1. Ouvrez la console Amazon EC2 à l’adresse https://console.aws.amazon.com/ec2/.

  2. Dans le volet de navigation, choisissez Load Balancers (Équilibreurs de charge).

  3. Sélectionnez l'équilibreur de charge.

  4. Dans l'onglet Intégrations, développez le AWS Web Application Firewall (WAF) et choisissez Associer une ACL Web WAF.

  5. Sous ACL Web, choisissez Créer automatiquement une ACL Web prédéfinie ou sélectionnez une ACL Web existante.

  6. Sous Action de règle, choisissez Bloquer ou Compter.

  7. Choisissez Confirmer.

Pour activer l'option AWS WAF Fail, ouvrez à l'aide du AWS CLI

Utilisez la commande modify-load-balancer-attributes avec l'attribut waf.fail_open.enabled défini sur true.