11 votes

API Gateway - ALB: Le nom d'hôte / l'adresse IP ne correspond pas aux altnames du certificat

Mon installation actuelle ressemble à ceci :

API Gateway --- ALB --- Cluster ECS --- Applications NodeJS
             |    
             -- Lambda

J'ai également défini un nom de domaine personnalisé sur l'API Gateway (MISE À JOUR : j'ai utilisé le lien par défaut de l'API Gateway et j'ai rencontré le même problème, je ne pense pas que ce soit un problème de domaine personnalisé)

Lorsqu'un service dans le cluster ECS appelle un autre service via l'API Gateway, j'obtiens

Le nom d'hôte/l'IP ne correspond pas aux altNames du certificat : "Host: someid.ap-southeast-1.elb.amazonaws.com. n'est pas dans les altNames du certificat : DNS:*.execute-api.ap-southeast-1.amazonaws.com"

Pourquoi cela ?

MISE À JOUR

Je remarque que lorsque je démarre un serveur local qui appelle l'API Gateway, je reçois une erreur similaire :

{
    "error": "Le nom d'hôte/l'IP ne correspond pas aux altNames du certificat : \"Host: localhost. n'est pas dans les altNames du certificat : DNS:*.execute-api.ap-southeast-1.amazonaws.com\""
}

Et si j'essaie de désactiver la vérification HTTPS :

const response = await axios({
  method: req.method,
  url,
  baseURL,
  params: req.params,
  query: req.query,
  data: body || req.body,
  headers: req.headers,
  httpsAgent: new https.Agent({
   : false // <<=== ICI!
  })
})

Je reçois ceci à la place ...

{
    "message": "Interdit"
}

Lorsque j'appelle directement l'URL sous-jacente de l'API Gateway sur Postman, ça fonctionne ... d'une certaine manière cela me rappelle CORS, où le serveur semble bloquer mon serveur, que ce soit localhost ou ECS/ELB, d'accéder à mon API Gateway ?


Cela peut être assez déroutant, donc un résumé de ce que j'ai essayé :

  • Dans la configuration actuelle, les services à l'intérieur d'ECS peuvent appeler un autre via l'API Gateway. Lorsque cela se produit, cela échoue en raison de l'erreur HTTPS
  • Pour résoudre cela, j'ai défini rejectUnauthorized: false, mais l'API Gateway renvoie un HTTP 403
  • Lors de l'exécution en local, l'erreur est similaire
  • J'ai essayé d'appeler ELB au lieu de l'API Gateway, cela fonctionne ...

3voto

syslogic Points 749

Il existe diverses solutions de contournement, qui introduisent des implications de sécurité, au lieu de fournir une solution appropriée. pour corriger cela, vous devez ajouter une entrée CNAME pour someid.ap-southeast-1.elb.amazonaws.com. au DNS (cette entrée pourrait déjà exister) ainsi qu'un certificat SSL, comme décrit dans la documentation AWS pour Ajout d'un nom de domaine alternatif. cela peut être fait avec la console CloudFront & ACM. le point, c'est qu'avec le certificat actuel, ce nom d'hôte alternatif (interne !!) ne correspondra jamais au certificat, qui ne peut couvrir qu'une seule IP - il s'agit donc davantage d'un problème d'infrastructure que d'un problème de code.

lors de la révision... au lieu d'étendre le certificat SSL de l'interface publique - une meilleure solution pourrait être d'utiliser un certificat SSL séparé, pour la communication entre l'API Gateway et l'ALB, selon ce guide; même un auto-signé est possible dans ce cas, car le certificat ne serait jamais accédé par un client externe.

au sujet de ce HTTP403 les docs indiquent:

vous avez configuré une liste de contrôle d'accès web (web ACL) AWS WAF pour surveiller les requêtes vers votre Application Load Balancer et elle a bloqué une requête.

espérons que cela vous aide à configurer le chiffrement de bout en bout... alors que seule l'interface publique de l'API Gateway a besoin d'un certificat CA, pour toute communication interne, un auto-signé devrait suffire.

cet article concerne la différence entre les ELB et ALB - il pourrait être utile de le prendre en considération, si effectivement le load balancer le plus adapté à la situation donnée a été choisi. dans le cas où aucun routage basé sur le contenu n'est requis, réduire la complexité inutile pourrait être bénéfique. cela éliminerait le besoin de définir les règles de routage ...que vous devriez également revoir une fois, si vous optez pour ALB. je veux dire, les questions ne montrent que le scénario de base et un code qui échoue, mais pas les règles de routage.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X