Fornecer um IP estático para recursos por trás do ELB (Elastic Load Balancer)

2

Eu preciso de um endereço IP estático que manipule o tráfego SSL de uma fonte conhecida (um parceiro). A razão pela qual o IP precisa ser estático é que o parceiro exige isso para manter a conformidade com o PCI.

Nossos servidores estão por trás de um ELB (Elastic Load Balancer), que não pode fornecer um endereço IP estático; muitos tópicos sobre isso aqui.

Meu pensamento é criar uma instância no EC2 cuja única finalidade na vida é ser um servidor proxy reverso com seu próprio endereço IP; aceitar solicitações HTTPS e encaminhá-las ao balanceador de carga.

Existem soluções melhores?

    
por Tom Harrison Jr 27.09.2012 / 23:16

2 respostas

4

No final, implementei o requisito do nosso parceiro da seguinte forma:

  • inicie uma instância na AWS
  • alocar e anexar um Elastic IP (EIP) a ele
  • Apache instalado
  • (no nosso caso, instalamos nosso certificado SSL)
  • Configurou o Apache como um servidor proxy reverso, encaminhando para um CNAME que apontava para o nosso ELB

Aqui está uma amostra da configuração do host virtual Apache. Eu desliguei NameVirtualHost e especifiquei o endereço do nosso EIP. Eu também desativei um host padrão. Se o parceiro desejar, adicionarei um bloco <Directory> que aceita solicitações apenas do seu intervalo de IPs.

<IfModule mod_ssl.c>
# Catch non-SSL requests and redirect to SSL
<VirtualHost 12.34.567.890:80>
  ServerName our-static-ip-a-record.example.com
  Redirect / https://our-elb-cname.example.com       
</VirtualHost>
# Handle SSL requests on the static IP
<VirtualHost 12.34.567.890:443>
  ServerAdmin [email protected]
  ServerName our-static-ip-a-record.example.com

  # SSL Configuration
  SSLEngine on
  SSLProxyEngine on
  SSLProxyCACertificateFile /etc/apache2/ssl/gd_bundle.crt
  SSLCertificateFile    /etc/apache2/ssl/example.com.crt    
  SSLCertificateKeyFile /etc/apache2/ssl/private.key
  # Additional defaults, e.g. ciphers, defined in apache's ssl.conf

  # Where the magic happens
  ProxyPass / https://our-elb-cname.example.com/
  ProxyPassReverse / https://our-elb-cname.example.com/

  # Might want this on; sets X-Forwarded-For and other useful headers
  ProxyVia off

  # This came from an example I found online, handles broken connections from IE
  BrowserMatch "MSIE [2-6]" \
    nokeepalive ssl-unclean-shutdown \
    downgrade-1.0 force-response-1.0
  # MSIE 7 and newer should be able to use keepalive
  BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown
</VirtualHost>
</IfModule>

Espero que isso economize alguém no futuro: -)

    
por 02.10.2012 / 16:54
3

Você não precisa de um endereço IP "estático" para implementar o SSL; você faz precisa de um nome no DNS, para o qual o certificado SSL será emitido.

A solução típica para isso é criar um nome no DNS e, em seguida, torná-lo um CNAME para o nome DNS fornecido para o Elastic Load Balancer .

    
por 28.09.2012 / 02:35