Application Load Balancers - Elastic Load Balancing

Application Load Balancers

Um load balancer serve como ponto único de contato para os clientes. Os clientes enviam solicitações para o load balancer e o load balancer as envia para os destinos, como instâncias do EC2. Para configurar o load balancer, você cria grupos de destino e, em seguida, registra os destinos nesses grupos. Você também pode criar listeners para verificar a solicitações de conexão de clientes, além de regras dos listeners para rotear solicitações dos clientes para os destinos em um ou mais grupos de destino.

Para obter mais informações, consulte Como o Elastic Load Balancing funciona no Manual do usuário do Elastic Load Balancing.

Sub-redes para seu balanceador de carga

Ao criar um Application Load Balancer, você deve habilitar as zonas que contêm seus destinos. Para habilitar uma zona, especifique uma sub-rede na zona. O Elastic Load Balancing cria um nó de balanceador de carga em cada zona que você especificar.

Considerações
  • O balanceador de carga será mais eficaz se você garantir que cada zona de disponibilidade habilitada tenha ao menos um destino registrado.

  • Se você registrar destinos em uma zona, mas não habilitá-la, esses destinos registrados não receberão tráfego do balanceador de carga.

  • Se você habilitar várias zonas para seu balanceador de carga, elas precisarão ser do mesmo tipo. Por exemplo, você não pode habilitar uma zona de disponibilidade e uma zona local.

  • Você pode especificar uma sub-rede que tenha sido compartilhada com você.

Os Application Load Balancers são compatíveis com os seguintes tipos de sub-redes.

Sub-redes de zona de disponibilidade

Você deve selecionar ao menos duas sub-redes de zona de disponibilidade. As seguintes restrições são aplicáveis:

  • Cada sub-rede deve estar em uma zona de disponibilidade diferente.

  • Para garantir que o balanceador de carga possa escalar corretamente, verifique se cada sub-rede da zona de disponibilidade do balanceador de carga tem um bloco CIDR com ao menos uma bitmask /27 (por exemplo, 10.0.0.0/27) e pelo menos oito endereços IP livres por sub-rede. Esses oito endereços IP são necessários para permitir que o balanceador de carga aumente a escala horizontalmente, se for o caso. Seu load balancer usa esses endereços IP para estabelecer conexões com os destinos. Sem eles, seu Application Load Balancer pode ter dificuldades com as tentativas de substituição de nós, fazendo com que ele entre em um estado de falha.

    Obs.: se uma sub-rede do Application Load Balancer ficar sem endereços IP utilizáveis ao tentar escalar, o Application Load Balancer será executado com capacidade insuficiente. Durante esse período, os nós antigos continuarão a fornecer tráfego, mas a tentativa paralisada de escalonamento poderá causar erros 5xx ou tempos limite ao tentar estabelecer uma conexão.

Sub-redes de zona local

Você pode especificar uma ou mais sub-redes de zona local. As seguintes restrições são aplicáveis:

  • Não é possível usar o AWS WAF com o load balancer.

  • Não é possível usar uma função do Lambda como destino.

  • Você não pode usar sessões persistentes ou persistência de aplicações.

Sub-redes de Outpost

Você pode especificar uma só sub-rede de Outpost. As seguintes restrições são aplicáveis:

  • Um Outpost deve estar instalado e configurado no data center on-premises. É necessário ter uma conexão de rede confiável entre o Outpost e a região da AWS. Para obter mais informações, consulte o Guia do usuário do AWS Outposts.

  • O balanceador de carga requer duas instâncias large no Outpost para os nós do balanceador de carga. Os tipos de instância compatíveis são apresentados na tabela a seguir. O balanceador de carga escala conforme necessário, redimensionando os nós um tamanho por vez (de large para xlarge, depois de xlarge para 2xlarge e depois de 2xlarge para 4xlarge). Após escalar os nós para o maior tamanho de instância, se você precisar de capacidade adicional, o balanceador de carga adicionará instâncias 4xlarge como nós do balanceador de carga. Se você não tiver capacidade de instância suficiente ou endereços IP disponíveis para escalar o balanceador de carga, o balanceador de carga relatará um evento para o AWS Health Dashboard e o estado do balanceador de carga será active_impaired.

  • É possível registrar destinos por ID de instância ou por endereço IP. Se você registrar destinos na região da AWS para o Outpost, eles não serão usados.

  • Os seguintes recursos não estão disponíveis: funções do Lambda como destinos, integração com AWS WAF, sessões persistentes, compatibilidade com autenticação e integração com AWS Global Accelerator.

É possível implantar um Application Load Balancer em instâncias c5/c5d, m5/m5d ou r5/r5d em um Outpost. A tabela a seguir mostra o tamanho e o volume do EBS por tipo de instância que o balanceador de carga pode usar em um Outpost:

Tipo e tamanho de instância Volume do EBS (GB)
c5/c5d
grande 50
xlarge 50
2xlarge 50
4xlarge 100
m5/m5d
grande 50
xlarge 50
2xlarge 100
4xlarge 100
r5/r5d
grande 50
xlarge 100
2xlarge 100
4xlarge 100

Grupos de segurança do balanceador de carga

Um security group atua como um firewall que controla o tráfego permitido de e para o load balancer. Você pode escolher as portas e os protocolos para permitir tráfego tanto de entrada quanto de saída.

As regras para os grupos de segurança que estão associados ao balanceador de carga devem permitir tráfego em ambas as direções tanto no receptor quanto nas portas de verificação de integridade. Sempre que você adicionar um listener a um load balancer ou atualizar a porta de verificação de integridade de um grupo de destino, será necessário revisar as regras do security group para garantir que elas permitam tráfego na nova porta em ambas as direções. Para ter mais informações, consulte Regras recomendadas.

Estado do load balancer

O load balancer pode estar em um dos seguintes estados:

provisioning

O load balancer está sendo configurado.

active

O load balancer está totalmente configurado e pronto para rotear o tráfego.

active_impaired

O balanceador de carga está roteando o tráfego, mas não tem os recursos necessários para escalar.

failed

O load balancer não pôde ser configurado.

Atributos do load balancer

Você pode configurar seu Application Load Balancer editando os atributos. Para ter mais informações, consulte Editar atributos do balanceador de carga.

A seguir estão os atributos do load balancer:

access_logs.s3.enabled

Indica se os logs de acesso armazenados no Amazon S3 estão habilitados. O padrão é false.

access_logs.s3.bucket

O nome do bucket do Amazon S3 para os logs de acesso. Esse atributo é necessário se os logs de acesso estiverem habilitados. Para ter mais informações, consulte Habilitar logs de acesso.

access_logs.s3.prefix

O prefixo para o local no bucket do Amazon S3.

client_keep_alive.seconds

O valor da manutenção de atividade do cliente, em segundos. O padrão é 3.600 segundos.

deletion_protection.enabled

Indica se a proteção contra exclusão está habilitada. O padrão é false.

idle_timeout.timeout_seconds

O valor de tempo limite de inatividade, em segundos. O padrão é 60 segundos.

ipv6.deny_all_igw_traffic

Bloqueia o acesso do gateway da Internet (IGW) ao balanceador de carga, impedindo o acesso não intencional ao balanceador de carga interno por meio de um gateway da Internet. Ele está configurado como false para balanceadores de carga voltados para a Internet e true para balanceadores de carga internos. Esse atributo não impede o acesso à Internet não IGW (por exemplo, por meio de emparelhamento, do gateway de trânsito, do AWS Direct Connect ou da AWS VPN).

routing.http.desync_mitigation_mode

Determina como o balanceador de carga processa solicitações que possam representar risco de segurança para a sua aplicação. Os valores possíveis são monitor, defensive e strictest. O padrão é defensive.

routing.http.drop_invalid_header_fields.enabled

Indica se os cabeçalhos HTTP com campos de cabeçalho que não sejam válidos serão removidos pelo balanceador de carga (true) ou roteados para destinos (false). O padrão é false. O Elastic Load Balancing exige que os nomes de cabeçalhos HTTP válidos estejam em conformidade com a expressão regular'[-A-Za-z0-9]+, conforme descrito no Registro de nomes de campos HTTP. Cada nome consiste em caracteres alfanuméricos ou hifens. Selecione true se quiser que os cabeçalhos HTTP que não estejam em conformidade com esse padrão sejam removidos das solicitações.

routing.http.preserve_host_header.enabled

Indica se o Application Load Balancer deve preservar o cabeçalho Host na solicitação HTTP e enviá-lo para o destino sem nenhuma alteração. Os valores possíveis são true e false. O padrão é false.

routing.http.x_amzn_tls_version_and_cipher_suite.enabled

Indica se os dois cabeçalhos (x-amzn-tls-version e x-amzn-tls-cipher-suite), que contêm informações sobre a versão negociada do TLS e o conjunto de cifras, serão adicionados à solicitação do cliente antes de enviá-la ao destino. O cabeçalho x-amzn-tls-version tem informações sobre a versão do protocolo TLS negociada com o cliente e o cabeçalho x-amzn-tls-cipher-suite tem informações sobre o pacote de criptografia negociado com o cliente. Ambos os cabeçalhos estão no formato OpenSSL. Os valores possíveis para o atributo são true e false. O padrão é false.

routing.http.xff_client_port.enabled

Indica se o cabeçalho X-Forwarded-For deve preservar a porta de origem que o cliente usou para se conectar ao balanceador de carga. Os valores possíveis são true e false. O padrão é false.

routing.http.xff_header_processing.mode

Permite que você modifique, preserve ou remova o cabeçalho X-Forward-For na solicitação HTTP antes que o Application Load Balancer envie a solicitação ao destino. Os valores possíveis são append, preserve e remove. O padrão é append.

  • Se o valor for append, o Application Load Balancer adicionará o endereço IP do cliente (do último salto) ao cabeçalho X-Forward-For na solicitação HTTP antes de enviá-la aos destinos.

  • Se o valor for preserve, o Application Load Balancer deverá preservar o cabeçalho X-Forward-For na solicitação HTTP e enviá-lo para o destino sem nenhuma alteração.

  • Se o valor for remove, o Application Load Balancer removerá o cabeçalho X-Forward-For na solicitação HTTP e o enviará para o destino sem nenhuma alteração.

routing.http2.enabled

Indica se HTTP/2 está habilitado. O padrão é true.

waf.fail_open.enabled

Indica se um balanceador de carga habilitado para AWS WAF pode ou não encaminhar solicitações para destinos se ele não conseguir encaminhar a solicitação para o AWS WAF. Os valores possíveis são true e false. O padrão é false.

nota

O atributo routing.http.drop_invalid_header_fields.enabled foi introduzido para oferecer proteção contra a dessincronização HTTP. O atributo routing.http.desync_mitigation_mode foi adicionado para fornecer uma proteção mais abrangente contra a dessincronização HTTP para suas aplicações. Você não precisa usar os dois atributos e pode escolher qualquer um deles de acordo com os requisitos da sua aplicação.

Tipo de endereço IP

É possível definir os tipos de endereços IP que os clientes podem usar para acessar seus balanceadores de carga internos e voltados para a Internet.

Os Application Load Balancers são compatíveis com os seguintes tipos de endereços IP:

ipv4

Os clientes devem se conectar ao load balancer usando endereços IPv4 (por exemplo, 192.0.2.1)

dualstack

Os clientes podem se conectar ao load balancer usando endereços IPv4 (por exemplo, 192.0.2.1) e endereços IPv6 (por exemplo, 2001:0db8:85a3:0:0:8a2e:0370:7334).

Considerações
  • O balanceador de carga se comunica com os destinos com base no tipo de endereço IP do grupo de destino.

  • Quando você habilita o modo dualstack para o balanceador de carga, o Elastic Load Balancing fornece um registro DNS AAAA para o balanceador de carga. Os clientes que se comunicam com o load balancer usando endereços IPv4 resolvem o registro DNS A. Os clientes que se comunicam com o load balancer usando endereços IPv6 resolvem o registro DNS AAAA.

  • O acesso aos balanceadores de carga dualstack internos por meio do gateway da Internet é bloqueado para impedir o acesso não intencional à Internet. No entanto, isso não impede o acesso à Internet que não seja IGW (por exemplo, por meio de emparelhamento, do gateway de trânsito, do AWS Direct Connect ou da AWS VPN).

dualstack-without-public-ipv4

Os clientes devem se conectar ao balanceador de carga usando endereços IPv6 (por exemplo, 2001:0db8:85a3:0:0:8a2e:0370:7334).

Considerações
  • A autenticação do Application Load Balancer só oferece suporte a IPv4 ao se conectar a um provedor de identidades (IdP) ou endpoint do Amazon Cognito. Sem um endereço IPv4 público, o balanceador de carga não pode concluir o processo de autenticação, resultando em erros HTTP 500.

Para obter mais informações sobre endereços IP, consulte Atualizar os tipos de endereço IP para o Application Load Balancer.

Conexões do balanceador de carga

Ao processar uma solicitação, o balanceador de carga mantém duas conexões: uma com o cliente e outra com o destino. A conexão entre o balanceador de carga e o cliente também é chamada de conexão frontend. A conexão entre o balanceador de carga e o destino também é chamada de conexão de backend.

Balanceamento de carga entre zonas

Com os Application Load Balancers, o balanceamento de carga entre zonas é habilitado por padrão e não pode ser alterado por balanceador de carga. Para mais informações, consulte a seção Balanceamento de carga entre zonas no Guia do usuário do Elastic Load Balancing.

É possível desativar o balanceamento de carga entre zonas por grupo de destino. Para ter mais informações, consulte Desativar o balanceamento de carga entre zonas.

Application Load Balancers e AWS WAF

Você pode usar o AWS WAF com seu Application Load Balancer para permitir ou bloquear solicitações com base nas regras de uma lista de controle de acesso da Web (ACL Web). Para obter mais informações, consulte Como trabalhar com ACLs Web no Guia do usuário do AWS WAF.

Por padrão, se o balanceador de carga não conseguir obter uma resposta do AWS WAF, ele retornará um erro HTTP 500 e não encaminhará a solicitação. Se precisar que seu balanceador de carga encaminhe solicitações aos destinos, mesmo que ele não consiga entrar em contato com o AWS WAF, você poderá habilitar a falha de abertura do AWS WAF. Para verificar se o load balancer se integra com o AWS WAF, selecione seu load balancer no AWS Management Console e selecione a guia Integrated services (Serviços integrados).

ACLs da Web predefinidas

Ao habilitar a integração do AWS WAF, você pode optar por criar automaticamente uma ACL da Web com regras predefinidas. A ACL da Web predefinida inclui três regras gerenciadas pela AWS que oferecem proteções contra as ameaças de segurança mais comuns.

  • AWSManagedRulesAmazonIpReputationList: o grupo de regras da lista de reputação de IP da Amazon bloqueia endereços IP normalmente associados a bots ou outras ameaças. Para obter mais informações, consulte o grupo de regras gerenciadas da lista de reputação de IP da Amazon no Guia do desenvolvedor do AWS WAF.

  • AWSManagedRulesCommonRuleSet: O grupo de regras do conjunto de regras principais (CRS) fornece proteção contra a exploração de uma ampla gama de vulnerabilidades, incluindo algumas das vulnerabilidades comuns e de alto risco descritas em publicações do OWASP, como OWASP Top 10. Para obter mais informações, consulte Core rule set (CRS) managed rule group no Guia do desenvolvedor do AWS WAF.

  • AWSManagedRulesKnownBadInputsRuleSet: o grupo de regras de entradas nocivas conhecidas bloqueia padrões de solicitação conhecidos como inválidos e associados à exploração ou à descoberta de vulnerabilidades. Para obter mais informações, consulte Known bad inputs managed rule group no Guia do desenvolvedor do AWS WAF.

Como habilitar o AWS WAF usando o console
  1. Abra o console do Amazon EC2 em https://console.aws.amazon.com/ec2/.

  2. No painel de navegação, selecione Balanceador de carga.

  3. Selecione o load balancer.

  4. Na guia Integrações, expanda AWS Web Application Firewall (WAF) e escolha Associar uma ACL da Web do WAF.

  5. Em ACL da Web, escolha Criar automaticamente ACL da Web predefinida ou selecione uma ACL da Web existente.

  6. Em Ação de regra, escolha Bloquear ou Contar.

  7. Selecione a opção Confirmar.

Para habilitar a falha na abertura do AWS WAF usando a AWS CLI

Use o comando modify-load-balancer-attributes com o atributo waf.fail_open.enabled definido como true.

Nome DNS

Cada Application Load Balancer recebe um nome padrão do Sistema de Nomes de Domínio (DNS) com a seguinte sintaxe: name-id.elb.region.amazonaws.com. Por exemplo, my-load-balancer-1234567890abcdef.elb.us-east-2.amazonaws.com.

Se preferir usar um nome DNS que seja mais fácil de lembrar, é possível criar um nome de domínio personalizado e associá-lo ao nome DNS do Application Load Balancer. Quando um cliente faz uma solicitação usando esse nome de domínio personalizado, o servidor de DNS a resolverá para o nome DNS do Application Load Balancer.

Primeiro, registre um nome de domínio com um registrador de nomes de domínio credenciado. Em seguida, use o serviço de DNS, como o registrador de domínios, para criar um registro de DNS e rotear solicitações ao Application Load Balancer. Para obter mais informações, consulte a documentação do serviço DNS. Por exemplo, se você usar o Amazon Route 53 como serviço de DNS, criará um registro de alias que apontará para o Application Load Balancer. Para obter mais informações, consulte Rotear tráfego para um balanceador de carga ELB no Guia do desenvolvedor do Amazon Route 53.

O Application Load Balancer tem um endereço IP por zona de disponibilidade habilitada. Esses são os endereços IP dos nós do Application Load Balancer. O nome DNS do Application Load Balancer resulta nesses endereços. Por exemplo, vamos supor que o nome de domínio personalizado do Application Load Balancer seja example.applicationloadbalancer.com. Use o comando dig ou nslookup a seguir para determinar os endereços IP dos nós do Application Load Balancer.

Linux ou Mac

$ dig +short example.applicationloadbalancer.com

Windows

C:\> nslookup example.applicationloadbalancer.com

O Application Load Balancer tem registros DNS para os nós. É possível usar nomes DNS com a seguinte sintaxe para determinar os endereços IP dos nós do Application Load Balancer: az.name-id.elb.region.amazonaws.com.

Linux ou Mac

$ dig +short us-east-2b.my-load-balancer-1234567890abcdef.elb.us-east-2.amazonaws.com

Windows

C:\> nslookup us-east-2b.my-load-balancer-1234567890abcdef.elb.us-east-2.amazonaws.com