Назад | Перейти на главную страницу

Какие есть варианты, если вы должны предоставить конечную точку статического IP для своего сервиса за AWS ELB?

У меня есть веб-сервис с несколькими серверами EC2 за AWS ELB. Насколько я понимаю, конечная точка ELB не может иметь статический IP-адрес, потому что это решение для балансировки нагрузки на основе DNS, и это проектное решение, принятое командой ELB.

Однако один из сторонних партнеров, с которыми мы интегрировались, требует IP-адреса наших серверов из-за ограничений внутренней инфраструктуры (да, я знаю).

После некоторых исследований я планирую подготовить сквозной обратный прокси-сервер SSL за статическим IP-адресом и передавать запросы нашей конечной точке ELB. Этот сервер будет использоваться только этим клиентом. Я, вероятно, буду использовать HAProxy, потому что прокси-серверу необходимо динамически разрешать IP-адрес ELB.

Плюсы :

Минусы :

Это единственный способ, которым я придумал, не меняя нашу инфраструктуру. Я хотел бы услышать ваш вклад, что бы вы сделали, если бы оказались в такой ситуации?

В конце концов, я использую решение TCP SSL для сквозного обратного прокси, вот моя конфигурация HAProxy:

global
    log /dev/log local0
    log /dev/log local1 notice
    chroot /var/lib/haproxy
    stats socket /run/haproxy/admin.sock mode 660 level admin
    stats timeout 30s
    user haproxy
    group haproxy
    daemon

defaults
    timeout connect         10s
    timeout client          1m
    timeout server          1m
    option tcplog
    log-format %ci:%cp\ [%t]\ %ft\ %b/%s/%si\ %Tw/%Tc/%Tt\ %B\ %ts\ %ac/%fc/%bc/%sc/%rc\ %sq/%bq
    log global

resolvers dns
    nameserver google 8.8.8.8

# pass 80 port request to AWS ELB
listen http-proxy
    bind *:80
    mode tcp
    server elb my.elb.amazonaws.com:80 check resolvers dns

# pass 443 port request to AWS ELB
listen https-proxy
    bind *:443
    mode tcp
    server elb my.elb.amazonaws.com:443 check resolvers dns

Некоторое объяснение:

  • Прокси-сервер прослушивает соединения с портов 80 и 443, а затем передает их конечной точке ELB.
  • HAProxy будет разрешать IP динамически с указанным мной DNS
  • Используйте режим TCP, чтобы не создавать дополнительную SSL-сертификацию для прокси

Я сделал несколько тестов, и все работает хорошо.

Однако я заметил обратную сторону (или просто не знал, как ее решить)

  • Невозможно поместить реальный IP-адрес клиента в заголовок HTTP, потому что он находится в режиме TCP

Это может вызвать проблемы, если вы хотите разрешить некоторым IP-адресам доступ к определенной службе.

Если стоимость не является проблемой, клиентский контроль доступа (CAC) Akamai предлагает решения для статических IP-адресов. Это дорого, но должно хорошо работать.

Если вы хотите создать самостоятельно, вы можете создать два экземпляра с эластичными IP-адресами (и предоставить эти два IP-адреса сторонним партнерам), а затем использовать Route53 для проверки работоспособности, чтобы избежать SPoF.