Les Network Load Balancers (NLBs) AWS sont un outil puissant pour distribuer le trafic applicatif entrant sur plusieurs cibles, telles que des instances Amazon EC2, dans une ou plusieurs zones de disponibilite. Ils offrent un debit eleve, une faible latence, et sont concus pour gerer des millions de requetes par seconde tout en maintenant des latences ultra-faibles. Cependant, une limitation des NLBs est l'impossibilite de modifier directement les en-tetes HTTP. Cet article explore diverses techniques pour contourner cette limitation, en fournissant des exemples complets pour vous aider a implementer ces solutions dans votre propre environnement AWS.

Introduction aux Network Load Balancers AWS

Les Network Load Balancers AWS operent au niveau de la connexion (Couche 4), routant les connexions vers les cibles en fonction des donnees du protocole IP. Les NLBs sont ideaux pour les applications qui necessitent des performances extremes et une faible latence, les rendant adaptes aux applications en temps reel comme les jeux, les transactions financieres ou le streaming video.

Fonctionnalites Cles des NLBs :
  1. IP Statique : Chaque NLB se voit attribuer une IP statique par zone de disponibilite (AZ) dans laquelle il opere.
  2. Elastic IP : Vous pouvez associer une ou plusieurs adresses Elastic IP a votre NLB.
  3. Terminaison TLS : Les NLBs peuvent decharger la terminaison TLS pour minimiser la charge CPU sur vos serveurs d'application.
  4. Equilibrage de Charge Inter-Zone : Distribue le trafic uniformement sur toutes les cibles dans toutes les AZs activees.
  5. Surveillance de l'Etat des Cibles : Verifie automatiquement l'etat des cibles et route le trafic uniquement vers les cibles saines.

Besoins de Modification d'En-tetes

La modification des en-tetes HTTP est souvent essentielle pour divers cas d'usage, tels que :

  • Ajouter des en-tetes de securite (ex. Content-Security-Policy).
  • Injecter des en-tetes personnalisees pour le logging ou le tracking.
  • Modifier les en-tetes User-Agent pour le traitement backend.
  • Implementer des politiques de securite basees sur les en-tetes.

Etant donne le fonctionnement en Couche 4 des NLBs, la modification directe des en-tetes n'est pas possible. Cependant, nous pouvons y parvenir en utilisant AWS Lambda, Amazon API Gateway et les Application Load Balancers (ALBs).

Solution 1 : Utiliser AWS Lambda et Amazon API Gateway

Etape 1 : Creer une Fonction AWS Lambda

D'abord, creez une fonction Lambda qui modifiera les en-tetes des requetes entrantes.

  1. Allez dans la console AWS Lambda.
  2. Creez une nouvelle fonction Lambda :
    • Choisissez "Author from scratch".
    • Entrez un nom de fonction (ex. ModifyHeadersFunction).
    • Choisissez un runtime (ex. Python 3.8).
    • Creez un role d'execution avec les permissions Lambda de base.
  3. Ecrivez le code de la fonction Lambda :

def lambda_handler(event, context):
    # Log l'evenement entrant
    print("Received event: " + json.dumps(event, indent=2))
# Modifier les en-tetes
event['headers']['X-Custom-Header'] = 'CustomHeaderValue'

return {
    'statusCode': 200,
    'headers': {
        'Content-Type': 'application/json'
    },
    'body': json.dumps({
        'message': 'En-tete modifie avec succes',
        'input': event
    })
}</code></pre>
  1. Deployez la fonction.
Etape 2 : Creer un Amazon API Gateway

Ensuite, creez un API Gateway qui routera les requetes vers la fonction Lambda.

  1. Allez dans la console Amazon API Gateway.
  2. Creez une nouvelle API :
    • Choisissez "HTTP API".
    • Configurez une nouvelle API.
  3. Integrez l'API avec la fonction Lambda :
    • Ajoutez une integration en selectionnant la fonction Lambda creee precedemment.
    • Configurez les routes et methodes (ex. POST /modify).
  4. Deployez l'API et notez l'URL de l'endpoint.
Etape 3 : Pointer le NLB vers l'API Gateway

Enfin, definissez l'URL de l'API Gateway comme cible pour votre NLB.

  1. Allez dans la console EC2.
  2. Naviguez vers Load Balancers et selectionnez votre NLB.
  3. Configurez un groupe cible pour pointer vers l'endpoint API Gateway.

Cette configuration route tout le trafic via l'API Gateway, ou la fonction Lambda modifie les en-tetes avant de transmettre les requetes a vos services backend.

Solution 2 : Utiliser AWS WAF

AWS WAF peut etre utilise pour inspecter et modifier les requetes avant qu'elles n'atteignent vos services backend, bien que cette methode soit plus axee sur le filtrage que sur la modification directe des en-tetes.

  1. Creez une Web ACL dans AWS WAF.
  2. Definissez des regles pour inspecter les en-tetes et prendre des actions (ex. bloquer, autoriser ou compter les requetes).
  3. Associez la Web ACL a votre NLB.
Exemple de Regle :
IF request.headers['User-Agent'] matches 'bad-bot'
THEN block request

Cette configuration aide a filtrer les requetes malveillantes ou a modifier les requetes en fonction de certaines conditions.

Resume

Bien que les Network Load Balancers AWS offrent des performances et une scalabilite robustes, leur nature Couche 4 limite la modification directe des en-tetes. Cependant, en utilisant AWS Lambda avec Amazon API Gateway ou AWS WAF, vous pouvez obtenir la fonctionnalite de modification d'en-tetes souhaitee.

Chaque solution a ses propres forces et convient a differents cas d'usage :

  • AWS Lambda et API Gateway : Ideal pour les manipulations d'en-tetes specifiques et complexes.
  • AWS WAF : Ideal pour les applications axees sur la securite necessitant inspection et filtrage.

En comprenant ces techniques et leurs implementations, vous pouvez gerer et modifier efficacement les en-tetes HTTP dans votre environnement AWS, en vous assurant que vos applications restent securisees, efficaces et hautement disponibles.

Si vous avez des questions ou besoin d'aide supplementaire pour implementer ces solutions, n'hesitez pas a me contacter ! Bon developpement sur AWS !