API Gateway - ALB: имя хоста / IP не совпадает с альтернативными именами сертификатов - PullRequest
0 голосов
/ 26 августа 2018

Моя настройка в настоящее время выглядит следующим образом:

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

У меня также есть настраиваемое доменное имя, установленное на шлюзе API (ОБНОВЛЕНИЕ: я использовал ссылку на шлюз API по умолчанию и получил ту же проблему, я не думаю,это проблема пользовательского домена)

Когда одна служба в кластере ECS вызывает другую службу через шлюз API, я получаю

Имя хоста / IP не совпадает с альтернативными именами сертификатов: "Хост:someid.ap-southeast-1.elb.amazonaws.com. не входит в альтернативные имена сертификата: DNS: *. execute-api.ap-southeast-1.amazonaws.com "

Почемуэтот?

ОБНОВЛЕНИЕ

При запуске локального сервера, вызывающего шлюз API, я замечаю похожую ошибку:

{
    "error": "Hostname/IP doesn't match certificate's altnames: \"Host: localhost. is not in the cert's altnames: DNS:*.execute-api.ap-southeast-1.amazonaws.com\""
}

И если япопробуйте отключить проверку 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 // <<=== HERE!
  })
})

Вместо этого я получаю ...

{
    "message": "Forbidden"
}

Когда я вызываю базовый URL-адрес шлюза API непосредственно в Postman, он работает ... каким-то образомнапоминает мне о CORS, где сервер, кажется, блокирует мой сервер или локальный хост или ECS / ELB от доступа к моему шлюзу API?


Это может быть довольно запутанным, поэтому краткое изложение того, что я пробовал:

  • В существующей установке службы внутри ECS могут вызывать другую через шлюз API.Когда это происходит, происходит сбой из-за ошибки HTTPS
  • . Чтобы устранить ее, я задаю rejectUnauthorized: false, но шлюз API возвращает HTTP 403
  • При работе на локальном хосте ошибка аналогична
  • Я попытался вызвать ELB вместо шлюза API, он работает ...

1 Ответ

0 голосов
/ 04 сентября 2018

Существуют различные обходные пути, которые вводят последствия для безопасности вместо предоставления правильного решения. чтобы исправить это, необходимо добавить запись CNAME для someid.ap-southeast-1.elb.amazonaws.com. в DNS (эта запись может уже существовать), а также в один сертификат SSL, аналогично тому, как это описано в документации AWS для Добавление альтернативное доменное имя . это можно сделать с помощью консоли CloudFront и ACM . Дело в том, что с текущим сертификатом это альтернативное (внутреннее !!) имя хоста никогда не будет соответствовать сертификату, который может охватывать только один IP-адрес - поэтому это гораздо больше инфраструктурной проблемы, чем проблемы кода .

при повторном рассмотрении ... вместо расширения SSL-сертификата общедоступного интерфейса - лучшим решением может быть использование отдельного SSL-сертификата для связи между шлюзом API и ALB, в соответствии с это гид ; в этом случае возможна даже самозаверяющая подпись, поскольку к этому сертификату никогда не будет обращен ни один внешний клиент.

относительно этого HTTP403 документы читать:

Вы настроили список управления веб-доступом AWS WAF (веб-ACL) для отслеживания запросов к вашему балансировщику нагрузки приложений, и он заблокировал запрос.

надеюсь, что это поможет настроить сквозное шифрование ... в то время как только одному общедоступному интерфейсу шлюза API требуется сертификат CA, для любой внутренней связи достаточно самоподписанного.

эта статья о разнице между ELB и ALB - хотя это может стоить рассмотрения, если бы действительно был выбран наиболее подходящий балансировщик нагрузки для данного сценария. в случае, если не требуется маршрутизация на основе контента, может быть полезным сокращение бесполезной сложности. это избавит от необходимости определять правила маршрутизации ... которые вы также должны пересмотреть один раз, в случае соблюдения ALB. Я имею в виду, что вопросы показывают только базовый сценарий и некоторый код, который не работает, но не правила маршрутизации.

...