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 ...