En-têtes HTTP et 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.

En-têtes HTTP et Application Load Balancers

Les demandes HTTP et les réponses HTTP utilisent des champs d'en-tête pour envoyer des informations concernant les messages HTTP. Les en-têtes HTTP sont ajoutés automatiquement. Les champs d'en-tête sont des paires nom-valeur dont les noms et les valeurs sont séparés par un signe deux points, et qui sont séparées entre elles par un retour chariot (CR) et un saut de ligne (LF). Un ensemble standard de champs d'en-tête HTTP est défini dans la section du RFC 2616 concernant les en-têtes de message. Il existe également des en-têtes HTTP non standard qui sont automatiquement ajoutés et largement utilisés par les applications. Certains des en-têtes HTTP non standard ont un préfixe X-Forwarded. Les Application Load Balancers prennent en charge les en-têtes X-Forwarded suivants.

Pour plus d'informations sur les connexions HTTP, consultez la section Demande de routage dans le Guide de l'utilisateur Elastic Load Balancing.

X-Forwarded-For

L'en-tête de demande X-Forwarded-For vous aide à identifier l'adresse IP d'un client lorsque vous utilisez un équilibreur de charge HTTP ou HTTPS. Comme les équilibreurs de charge interceptent le trafic entre les clients et les serveurs, vos journaux d'accès au serveur ne contiennent que l'adresse IP de l'équilibreur de charge. Pour voir l'adresse IP du client, utilisez l'attribut routing.http.xff_header_processing.mode. Cet attribut vous permet de modifier, de préserver ou de supprimer l'en-tête X-Forwarded-For dans la demande HTTP avant que l'Application Load Balancer n'envoie la demande à la cible. Les valeurs possibles pour cet attribut sont append, preserve et remove. La valeur par défaut de cet attribut est append.

Important

L'X-Forwarded-Foren-tête doit être utilisé avec prudence en raison des risques de sécurité potentiels. Les entrées ne peuvent être considérées comme fiables que si elles sont ajoutées par des systèmes correctement sécurisés au sein du réseau.

Ajout

Par défaut, l'Application Load Balancer stocke l'adresse IP du client dans l'en-tête de demande X-Forwarded-For et transmet l'en-tête à votre serveur. Si l'en-tête de demande X-Forwarded-For n'est pas inclus dans la demande d'origine, l'équilibreur de charge en crée un avec l'adresse IP du client comme valeur de la demande. Sinon, l'équilibreur de charge ajoute l'adresse IP du client à l'en-tête existant, puis transmet l'en-tête à votre serveur. L'en-tête de demande X-Forwarded-For peut contenir plusieurs adresses IP séparées par des virgules.

L'en-tête de demande X-Forwarded-For a le format suivant :

X-Forwarded-For: client-ip-address

Voici un exemple d'en-tête de demande X-Forwarded-For pour un client avec l'adresse IP 203.0.113.7.

X-Forwarded-For: 203.0.113.7

Voici un exemple d'en-tête de X-Forwarded-For demande pour un client dont l' IPv6 adresse est2001:DB8::21f:5bff:febf:ce22:8a2e.

X-Forwarded-For: 2001:DB8::21f:5bff:febf:ce22:8a2e

Lorsque l'attribut de préservation du port client (routing.http.xff_client_port.enabled) est activé sur l'équilibreur de charge, l'en-tête de la demande X-Forwarded-For inclut client-port-number ajouté à client-ip-address, séparés par deux points. L'en-tête prend alors la forme suivante :

IPv4 -- X-Forwarded-For: client-ip-address:client-port-number
IPv6 -- X-Forwarded-For: [client-ip-address]:client-port-number

Notez IPv6 en effet que lorsque l'équilibreur de charge ajoute le client-ip-address à l'en-tête existant, il place l'adresse entre crochets.

Voici un exemple d'en-tête de X-Forwarded-For demande pour un client dont l' IPv4 adresse 12.34.56.78 et le numéro de port sont8080.

X-Forwarded-For: 12.34.56.78:8080

Voici un exemple d'en-tête de X-Forwarded-For demande pour un client dont l' IPv6 adresse 2001:db8:85a3:8d3:1319:8a2e:370:7348 et le numéro de port sont8080.

X-Forwarded-For: [2001:db8:85a3:8d3:1319:8a2e:370:7348]:8080

Préserver

Le mode preserve de l'attribut garantit que l'en-tête X-Forwarded-For de la demande HTTP n'est en aucun cas modifié avant son envoi aux cibles.

Remove (suppression)

Le mode remove de l'attribut supprime l'en-tête X-Forwarded-For de la demande HTTP avant qu'elle ne soit envoyée aux cibles.

Si vous activez l'attribut de préservation du port client (routing.http.xff_client_port.enabled) et que vous sélectionnez également preserve ou remove pour l'attribut routing.http.xff_header_processing.mode, Application Load Balancer remplace l'attribut de préservation du port client. Il conserve l'en-tête X-Forwarded-For inchangé ou le supprime selon le mode que vous sélectionnez, avant de l'envoyer aux cibles.

Le tableau suivant présente des exemples d'en-tête X-Forwarded-For que la cible reçoit lorsque vous sélectionnez le mode append, preserve ou remove. Dans cet exemple, l'adresse IP du dernier saut est 127.0.0.1.

Description de la demande Exemple de demande append preserve remove
La demande est envoyée sans en-tête XFF GET /index.html HTTP/1.1 Host: example.com X-Forwarded-For: 127.0.0.1 Absent Absent
La demande est envoyée avec un en-tête XFF et une adresse IP du client. GET /index.html HTTP/1.1 Host: example.com X-Forwarded-For: 127.0.0.4 X-Forwarded-For: 127.0.0.4, 127.0.0.1 X-Forwarded-For: 127.0.0.4 Absent
La demande est envoyée avec un en-tête XFF avec plusieurs adresses IP de clients. GET /index.html HTTP/1.1 Host: example.com X-Forwarded-For: 127.0.0.4, 127.0.0.8 X-Forwarded-For: 127.0.0.4, 127.0.0.8, 127.0.0.1 X-Forwarded-For: 127.0.0.4, 127.0.0.8 Absent
Console
Pour gérer l'X-Forwarded-Foren-tête
  1. Ouvrez la EC2 console Amazon à 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. Dans la section Configuration du trafic, sous Gestion des paquets, pour l'X-Forwarded-For en-tête, choisissez Ajouter (par défaut), Préserver ou Supprimer.

  6. Sélectionnez Enregistrer les modifications.

AWS CLI
Pour gérer l'X-Forwarded-Foren-tête

Utilisez la modify-load-balancer-attributescommande avec l'routing.http.xff_header_processing.modeattribut. Les valeurs possibles sont append, preserve et remove. L’argument par défaut est append.

aws elbv2 modify-load-balancer-attributes \ --load-balancer-arn load-balancer-arn \ --attributes "Key=routing.http.xff_header_processing.mode,Value=preserve"
CloudFormation
Pour gérer l'X-Forwarded-Foren-tête

Mettez à jour la AWS::ElasticLoadBalancingV2::LoadBalancerressource pour inclure l'routing.http.xff_header_processing.modeattribut. Les valeurs possibles sont append, preserve et remove. L’argument par défaut est append.

Resources: myLoadBalancer: Type: AWS::ElasticLoadBalancingV2::LoadBalancer Properties: Name: my-alb Type: application Scheme: internal Subnets: - !Ref subnet-AZ1 - !Ref subnet-AZ2 SecurityGroups: - !Ref mySecurityGroup LoadBalancerAttributes: - Key: "routing.http.xff_header_processing.mode" Value: "preserve"

X-Forwarded-Proto

L'en-tête de demande X-Forwarded-Proto vous permet d'identifier le protocole (HTTP ou HTTPS) utilisé par un client pour se connecter à votre équilibreur de charge. Les journaux d'accès de votre serveur contiennent uniquement le protocole utilisé entre le serveur et l'équilibreur de charge ; ils ne comportent aucune information sur le protocole utilisé entre le client et l'équilibreur de charge. Pour déterminer le protocole utilisé entre le client et l'équilibreur de charge, utilisez l'en-tête de demande X-Forwarded-Proto. Elastic Load Balancing stocke le protocole utilisé entre le client et l'équilibreur de charge dans l'en-tête de demande X-Forwarded-Proto et transmet en même temps l'en-tête à votre serveur.

Votre application ou site web peut utiliser le protocole stocké dans l'en-tête de demande X-Forwarded-Proto pour générer une réponse qui effectue une redirection vers l'URL appropriée.

L'en-tête de demande X-Forwarded-Proto a le format suivant :

X-Forwarded-Proto: originatingProtocol

L'exemple suivant contient un en-tête de demande X-Forwarded-Proto pour une demande provenant du client en tant que demande HTTPS :

X-Forwarded-Proto: https

X-Forwarded-Port

L'en-tête de demande X-Forwarded-Port vous permet d'identifier le port de destination utilisé par le client pour se connecter à l'équilibreur de charge.