Configurando HTTPS com o Amazon AWS para manequins

2

Eu executo uma configuração do Amazon AWS para uma página da web que eu hospedo. Ele usa uma única instância do EC2 e funciona bem em HTTP. Mas recentemente eu tenho a necessidade de oferecer também HTTPS. E é aí que estou totalmente confuso. A instância do EC2 está executando o Apache, PHP e MySQL em um Linux

De alguma forma, recebo (em resumo) como o HTTPS funciona no mundo que não é da AWS. (Eu nunca fiz isso.) Mas eu entendo que essa não é a melhor maneira de fazer isso com a AWS, o que parece envolver a configuração de algo no Gerenciador de Certificados e a conexão de um Elastic Load Balancer a ele. Eu estou meio perdido.

Eu criei um certificado com sucesso no Gerenciador de certificados. Eu configurei um ELB com um grupo "alvo" que parecia estar certo, e o conectei ao certificado. Quando eu tento adicionar https: // na frente do meu host, ele diz que o servidor se recusa a se conectar. Quando eu entro no próprio ELB e acesso a URL que ele me dá para o ELB, recebo um serviço de erro 503 temporariamente disponível.

Acho que posso não entender direito, e as postagens da AWS / HTTPS aqui parecem pressupor que você sabe o que está tentando realizar. Alguém poderia me explicar como essas coisas (o certificado, o ELB, a instância do EC2 e o Apache) são todas vinculadas? Obrigado.

    
por nucleon 04.02.2017 / 15:47

2 respostas

3

Em primeiro lugar, não se sinta como se você tivesse que percorrer a rota do Amazon Certificate Manager (ACM) / Balanceador de carga. É uma boa solução, mas foi projetada para situações em que você tem alguns servidores atrás de balanceadores de carga, em vez de uma única instância independente.

Outra opção potencialmente mais barata pode ser usar o Cloudfront na frente do seu site, com um certificado ACM, ou usar o Lets Encrypt nas próprias instâncias.

Dito isto, você perguntou sobre LBs, então aqui vamos nós:

Se você é novo em balanceadores de carga na AWS, primeiro deve entender que existem dois tipos: ELB e ALB.

O ELB (Elastic Load Balancer) é o antigo balanceador de carga "estilo clássico", que basicamente retransmite a conexão por meio do balanceador, sem fazer nenhuma lógica sofisticada. Você joga isso na frente de qualquer número de instâncias e passa para um servidor aleatório no pool.

O ALB (Balanceador de Carga de Aplicativo) é um pouco mais complicado, pois eles podem fazer algum roteamento de lógica de aplicativo. Ao usar o ALB, você define os grupos-alvo, bem como as regras de roteamento, o que significa que você pode enviar tráfego para diferentes conjuntos de instâncias, dependendo do caminho de solicitação. O ALB pode ser usado de maneira semelhante ao ELB, e o AWS parece estar forçando seu uso.

Independentemente do tipo de LB que você usa, ainda está colocando um balanceador na frente da instância, o que retransmite o tráfego para as máquinas de origem.

O HTTPS / SSL complica um pouco as coisas ao falar sobre o AWS LB, pois elas são configuradas de maneiras ligeiramente diferentes.

Se você estiver usando o ELB, a guia ouvintes na interface da AWS permite configurar o mapeamento de portas. É aqui que você mapeia "o que as pessoas solicitam" para "de onde vem". Neste caso, você provavelmente iria querer 80 - > 80 e 443 - > 80. Como você quer ouvir tanto http e https, mas só se conectar a http no servidor, pois não tem https. Para uma configuração mais avançada e segura, você pode instalar um certificado auto-assinado no servidor para criptografar a conexão de ponta a ponta e, em seguida, usar 443 - > 443.

SevocêestiverusandooALB,aguialistenersmapearánovamente'oqueaspessoassolicitam'para'deondeelevem',mas,emvezdeapenasmapearasportas,elassãomapeadaspara'TargetGroups'.Namaioriadassituações,oefeitoseráomesmodoELB,vocêestácanalizandoambasasportas80e443paraumúnicogrupo-alvo.

AinterfaceALBbasicamenteextraipartedainterfaceELBparasuaprópriapágina,mastantooELBquantooALBtentamalcançaramesmacoisaaqui,definindoinstâncias/metaseverificaçõesdeintegridade.Amenosquevocêtenhametasválidaseverificaçõesdesaúde,vocêreceberá503erros.

ComoELB,vocêdefinequais'instâncias'serãoexibidas.Aguiadainstânciamostraráo"Status", que é basicamente se o ELB roteará o tráfego para ele ou não. Este deve ser 'InService', em pelo menos uma instância, ou você obtém 503. Se você obtiver qualquer outro status, tente aguardar alguns minutos para que ele se estabilize, se ele não for atualizado para o InService, você tem algo errado com suas instâncias ou você não configurou uma verificação de integridade válida.

ComoALB,osDestinossãodefinidosdamesmamaneira.Aprincipaldiferençaéquevocêdefineaportaquedesejaconectaràssuasinstâncias,alémdasinstânciasàsquaisdesejaseconectar.Amaneiramaiscomumdeconfigurarissoéapontarparaasinstânciasnaporta80,poiséissoqueamaioriadosservidoresdaWebestáexecutando,embora,comonocasoELB,paraaprimorarasegurança,talvezvocêqueirausarHTTPSnasinstânciasusandoautocertificadosassinadosparamantertudocriptografadodepontaaponta.

SemelhanteaoELB,suainformaçãomaisimportanteaquiéostatusdedestino,nestecaso,vocêdesejaver"saudável". Se você não vir isso, aguarde um pouco ou investigue suas verificações de saúde.

Tanto o ALB quanto o ELB dependem de verificações de integridade para saber se devem encaminhar o tráfego para suas instâncias. Isso geralmente é um pouco simples. A maioria das pessoas configurará as verificações de saúde para apontar para uma página bastante simples, algo no seu site ou a raiz do site que é muito rápida de carregar, pois a AWS atingirá várias vezes por minuto. Uma instância só receberá o tráfego encaminhado, se passar nas verificações de integridade. O padrão é acertar a raiz do site. Ajustar essas opções para melhor corresponder ao seu site é importante. Muitas vezes, configuro o threadshold saudável para o mínimo, para que meus servidores atendem ao tráfego o mais rápido possível e reduzem o intervalo de pesquisa a algo mais rápido.

    
por 04.02.2017 / 19:42
1

Se você executar uma única instância ec2 , não haverá necessidade de usar ELB . Se você quiser usar ELB , siga este guia .

Se você quiser se conectar diretamente à sua ec2 instance sem ELB setup https no seu Apache desta forma:

LoadModule ssl_module modules/mod_ssl.so

Listen 443
<VirtualHost *:443>
    ServerName www.example.com
    SSLEngine on
    SSLCertificateFile "/path/to/www.example.com.cert"
    SSLCertificateKeyFile "/path/to/www.example.com.key"
</VirtualHost>

Dê uma olhada na documentação para obter instruções detalhadas.

Provavelmente você configurou https errado no lado do ELB ou está tentando se conectar à sua instância por https com o IP da instância e não o ip do ELB.

    
por 04.02.2017 / 16:07