

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Configurando a end-to-end criptografia em um ambiente Elastic Beanstalk com balanceamento de carga
<a name="configuring-https-endtoend"></a>

O encerramento de conexões seguras no load balancer e o uso de HTTP no back-end podem ser suficientes para seu aplicativo. O tráfego de rede entre os recursos da AWS pode não ser escutado por instâncias que não façam parte da conexão, mesmo que elas estejam em execução na mesma conta.

No entanto, se você está desenvolvendo um aplicativo que precisa estar em conformidade com as rigorosas normas externas, pode ser necessário proteger todas as conexões de rede. É possível usar o console do Elastic Beanstalk ou os [arquivos de configuração](ebextensions.md) para fazer o balanceador de carga do ambiente do Elastic Beanstalk se conectar a instâncias de back-end com segurança a fim de atender a esses requisitos. O procedimento a seguir se concentra nos arquivos de configuração.

Primeiro, [adicione um listener seguro ao seu load balancer](configuring-https-elb.md), caso ainda não o tenha feito.

Você também deve configurar as instâncias do ambiente para escutar na porta segura e encerrar conexões HTTPS. A configuração varia de acordo com a plataforma. Para obter instruções, consulte [Configuração da terminação de HTTPS na instância](https-singleinstance.md). Você pode usar um [certificado autoassinado](configuring-https-ssl.md) para as EC2 instâncias sem problemas.

Em seguida, configure o listener para encaminhar o tráfego usando HTTPS na porta segura usada pelo seu aplicativo. Use um dos seguintes arquivos de configuração, com base no tipo de load balancer que seu ambiente utiliza.

**`.ebextensions/https-reencrypt-clb.config`**

Use este arquivo de configuração com um Classic Load Balancer. Além de configurar o load balancer, o arquivo de configuração também altera a verificação de integridade padrão para usar a porta 443 e HTTPS, garantindo que o load balancer possa se conectar com segurança.

```
option_settings:
  aws:elb:listener:443:
    InstancePort: 443
    InstanceProtocol: HTTPS
  aws:elasticbeanstalk:application:
    Application Healthcheck URL: HTTPS:443/
```

**`.ebextensions/https-reencrypt-alb.config`**

Use este arquivo de configuração com um Application Load Balancer.

```
option_settings:
  aws:elbv2:listener:443:
    DefaultProcess: https
    ListenerEnabled: 'true'
    Protocol: HTTPS
  aws:elasticbeanstalk:environment:process:https:
    Port: '443'
    Protocol: HTTPS
```

**`.ebextensions/https-reencrypt-nlb.config`**

Use este arquivo de configuração com um Network Load Balancer.

```
option_settings:
  aws:elbv2:listener:443:
    DefaultProcess: https
    ListenerEnabled: 'true'
  aws:elasticbeanstalk:environment:process:https:
    Port: '443'
```

A opção `DefaultProcess` recebe esse nome em virtude do Application Load Balancers, que podem ter listeners não padrão na mesma porta para o tráfego de caminhos específicos (consulte [Application Load Balancer](environments-cfg-alb.md) para obter detalhes). Para um Network Load Balancer, a opção especifica o único processo de destino para esse listener.

Neste exemplo, chamamos o processo de `https` porque ele faz o listening do tráfego seguro (HTTPS). O listener envia o tráfego para o processo na porta designada usando o protocolo TCP, pois o Network Load Balancer funciona apenas com TCP. Isso está correto, porque o tráfego de rede para HTTP e HTTPS é implementado na parte superior do TCP.

**nota**  
A CLI do EB e o console do Elastic Beanstalk aplicam os valores recomendados para as opções anteriores. Se quiser usar arquivos de configuração para definir a mesma coisa, você precisa remover essas configurações. Para mais detalhes, consulte [Valores recomendados](command-options.md#configuration-options-recommendedvalues).

Na próxima tarefa, você precisa modificar o security group do load balancer para permitir tráfego. Dependendo da [Amazon Virtual Private Cloud](https://docs.aws.amazon.com/vpc/latest/userguide/) (Amazon VPC) em que você inicia seu ambiente, a VPC padrão ou uma VPC personalizada, o grupo de segurança do balanceador de carga variará. Em uma VPC padrão, o Elastic Load Balancing fornece um grupo de segurança padrão que todos os balanceadores de carga podem usar. Em uma Amazon VPC criada, o Elastic Beanstalk cria um grupo de segurança para o balanceador de carga usar.

Para oferecer suporte aos dois cenários, crie um grupo de segurança e instrua o Elastic Beanstalk a usá-lo. O seguinte arquivo de configuração cria um security group e o anexa ao load balancer.

**`.ebextensions/https-lbsecuritygroup.config`**

```
option_settings:
  # Use the custom security group for the load balancer
  aws:elb:loadbalancer:
    SecurityGroups: '`{ "Ref" : "loadbalancersg" }`'
    ManagedSecurityGroup: '`{ "Ref" : "loadbalancersg" }`'

Resources:
  loadbalancersg:
    Type: AWS::EC2::SecurityGroup
    Properties:
      GroupDescription: load balancer security group
      VpcId: vpc-########
      SecurityGroupIngress:
        - IpProtocol: tcp
          FromPort: 443
          ToPort: 443
          CidrIp: 0.0.0.0/0
        - IpProtocol: tcp
          FromPort: 80
          ToPort: 80
          CidrIp: 0.0.0.0/0
      SecurityGroupEgress:
        - IpProtocol: tcp
          FromPort: 80
          ToPort: 80
          CidrIp: 0.0.0.0/0
```

Substitua o texto destacado pelo seu ID de VPC padrão ou personalizada. O exemplo anterior inclui entrada e saída pela porta 80 para permitir conexões HTTP. Remova essas propriedades se você deseja somente permitir conexões seguras.

Por fim, adicione regras de entrada e saída que permitam a comunicação pela porta 443, entre o security group do load balancer e o security group das instâncias.

**`.ebextensions/https-backendsecurity.config`**

```
Resources:
  # Add 443-inbound to instance security group (AWSEBSecurityGroup)
  httpsFromLoadBalancerSG: 
    Type: AWS::EC2::SecurityGroupIngress
    Properties:
      GroupId: {"Fn::GetAtt" : ["AWSEBSecurityGroup", "GroupId"]}
      IpProtocol: tcp
      ToPort: 443
      FromPort: 443
      SourceSecurityGroupId: {"Fn::GetAtt" : ["loadbalancersg", "GroupId"]}
  # Add 443-outbound to load balancer security group (loadbalancersg)
  httpsToBackendInstances: 
    Type: AWS::EC2::SecurityGroupEgress
    Properties:
      GroupId: {"Fn::GetAtt" : ["loadbalancersg", "GroupId"]}
      IpProtocol: tcp
      ToPort: 443
      FromPort: 443
      DestinationSecurityGroupId: {"Fn::GetAtt" : ["AWSEBSecurityGroup", "GroupId"]}
```

Faça isso separadamente da criação do security group para restringir os grupos de segurança de origem e destino, sem criar uma dependência circular.

Depois de concluir todas as tarefas anteriores, o load balancer se conecta a instâncias de back-end com segurança usando HTTPS. O load balancer não se importa se o certificado da instância é autoassinado ou emitido por uma autoridade de certificação confiável, e aceitará qualquer certificado apresentado.

Esse comportamento pode ser alterado adicionando políticas ao load balancer que o instrua a confiar apenas em um certificado específico. O arquivo de configuração a seguir cria duas políticas. Uma política especifica um certificado público, e o outro instrui o load balancer a confiar apenas naquele certificado para conexões com a porta 443 da instância.

**`.ebextensions/https-backendauth.config`**

```
option_settings:
  # Backend Encryption Policy
  aws:elb:policies:backendencryption:
    PublicKeyPolicyNames: backendkey
    InstancePorts:  443
  # Public Key Policy
  aws:elb:policies:backendkey:
    PublicKey: |
      -----BEGIN CERTIFICATE-----
      ################################################################
      ################################################################
      ################################################################
      ################################################################
      ################################################
      -----END CERTIFICATE-----
```

Substitua o texto destacado pelo conteúdo do certificado público da sua EC2 instância.