Como faço para configurar HTTPS para meu ambiente do Elastic Beanstalk?

7 minuto de leitura
0

Quero configurar HTTPS para meu ambiente AWS Elastic Beanstalk para criptografar dados do meu balanceador de carga para minha instância do Amazon Elastic Compute Cloud (Amazon EC2).

Breve descrição

Se você configurou um nome de domínio personalizado para seu ambiente do Elastic Beanstalk, pode usar HTTPS para permitir que os usuários se conectem ao seu site com segurança. Se você não tiver um nome de domínio, ainda poderá usar HTTPS com um certificado autoassinado para fins de desenvolvimento e teste.

Para ambientes de instância única, você deve criar localmente a chave privada e o certificado. Em seguida, faça o upload do certificado para o AWS Identity and Access Management (IAM).

É uma prática recomendada usar o AWS Certificate Manager (ACM) para provisionar, gerenciar e implantar programaticamente seus certificados de servidor. Você também pode usar a AWS Command Line Interface (AWS CLI) para fazer upload de um certificado e uma chave privada de terceiros ou autoassinados para o IAM. Se o ACM não estiver disponível na sua região da AWS, use a AWS CLI.

Observação: se você receber erros ao executar comandos da AWS Command Line Interface (AWS CLI), consulte Solucionar erros da AWS CLI. Além disso, verifique se você está usando a versão mais recente da AWS CLI.

Resolução

Preparar seu ambiente do Elastic Beanstalk

  1. Para direcionar o tráfego para seu ambiente do Elastic Beanstalk, use Amazon Route 53 para registrar um novo domínio ou outro provedor de domínio.
  2. Se o URL do seu ambiente incluir uma região, crie um nome de alias. Crie um registro CNAME se o URL do seu ambiente não incluir uma região.
    Importante: você pode usar registros CNAME para ambientes criados antes de 2016. Não é possível usar um registro CNAME com um domínio ápex da zona, também conhecido como domínio raiz ou domínio nu. Para obter mais informações, consulte Como escolher entre registros de alias e sem alias.
  3. Crie um certificado no ACM ou faça o upload de um certificado e uma chave privada autoassinados ou de terceiros para o IAM.

Adicionar receptores aos seus balanceadores de carga

  1. Abra o console do Elastic Beanstalk e selecione seu ambiente.
  2. No painel de navegação, escolha Configuração.
  3. Na categoria Balanceador de carga, escolha Modificar.
  4. Para adicionar o receptor à porta 443, realize as etapas do balanceador de carga que está em seu ambiente do Elastic Beanstalk.

Classic Load Balancer

Realize as seguintes etapas:

  1. Escolha Adicionar receptor.
  2. Em Porta, insira a porta de tráfego de entrada, normalmente 443.
  3. Em Protocolo, escolha HTTPS.
  4. Em Porta da instância, insira 80.
  5. Em Protocolo da instância, escolha HTTP.
  6. Em Certificado SSL, escolha seu certificado e, em seguida, escolha a Política do SSL na lista suspensa.
  7. Escolha Adicionar e, em seguida, escolha Aplicar.

Application Load Balancer

Realize as seguintes etapas:

  1. Escolha Adicionar receptor.
  2. Em Porta, insira a porta de tráfego de entrada, normalmente 443.
  3. Em Protocolo, escolha HTTPS.
  4. Em Certificado SSL, escolha seu certificado e, em seguida, escolha a Política do SSL na lista suspensa.
  5. Escolha Adicionar e, em seguida, escolha Aplicar.

Network Load Balancer

Realize as seguintes etapas:

  1. Escolha Adicionar receptor.
  2. Em Porta, insira a porta de tráfego de entrada, normalmente 443.
  3. Escolha Adicionar e, em seguida, escolha Aplicar.

Configurar suas instâncias para encerrar conexões HTTPS

Para configurar suas instâncias para encerrar conexões HTTPS, você deve usar arquivos de configuração para modificar o software em execução nas instâncias. Além disso, use arquivos de configuração para modificar grupos de segurança para que eles permitam conexões seguras.

Importante: se você usa um ambiente de instância única, ignore as etapas a seguir. Realize as etapas na seção Encerrar HTTPs na instância (HTTPS de ponta a ponta) em um ambiente de instância única.

  1. Adicione um ouvinte seguro ao seu balanceador de carga. Use um dos seguintes arquivos de configuração com base no tipo de balanceador de carga em seu ambiente Elastic Beanstalk.

    Para o Classic Load Balancer, use um arquivo .ebextensions/https-reencrypt-clb.config:

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

    Para o Application Load Balancer, use um arquivo .ebextensions/https-reencrypt-alb.config:

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

    Para o Network Load Balancer, use um arquivo .ebextensions/https-reencrypt-nlb.config:

    option_settings:
      aws:elbv2:listener:443:
        DefaultProcess: https
        ListenerEnabled: 'true'
      aws:elasticbeanstalk:environment:process:https:
    
  2. Atualize o balanceador de carga para receber tráfego na porta 443.

    Você pode criar um novo grupo de segurança e, em seguida, fazer com que o Elastic Beanstalk use esse grupo de segurança para receber tráfego na porta 443. Por exemplo, o seguinte arquivo .ebextensions/https-lbsecuritygroup.config cria um grupo de segurança e o anexa ao balanceador de carga:

    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

    **Observação:**Substitua o vPCID pelo valor para seu ambiente.

    O exemplo anterior inclui entrada e saída pela porta 80 para permitir conexões HTTP. Para permitir somente conexões seguras, remova a configuração da porta 80 na seção SecurityGroupIngress.

  3. Adicione regras de entrada e saída que permitam a comunicação pela porta 443 entre o grupo de segurança do balanceador de carga e o grupo de segurança das instâncias.

    Por exemplo, use o seguinte arquivo .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"]}

    O balanceador de carga agora usa HTTPS para se conectar com segurança às suas instâncias de back-end. O balanceador de carga aceita qualquer certificado da instância, como um certificado autoassinado ou emitido por uma autoridade de certificação confiável.

    Observação: você pode adicionar políticas ao balanceador de carga que o instruam a confiar somente em um certificado específico. Por exemplo, o seguinte arquivo .ebextensions/https-backendauth.config cria duas políticas. Uma política especifica um certificado público e a outra diz ao balanceador de carga que confie somente nesse certificado público para conexões com a porta 443.

    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-----
  4. Configure o servidor proxy executado na instância para encerrar o HTTPS.

    Observação: a configuração varia de acordo com sua pilha de soluções. O arquivo .ebextensions de qualquer pilha de soluções codifica o valor da chave privada e do certificado do servidor em .ebextensions. Para proteger ainda mais esses arquivos, você pode fazer upload do conteúdo para o Amazon Simple Storage Service (Amazon S3) e transferi-lo para o Amazon S3Auth usando o EC2.

  5. Para implantar arquivos de configuração em seu ambiente, adicione-os a um diretório denominado .ebextensions na raiz do pacote de aplicativos. Em seguida, implante o código-fonte que inclui esses arquivos de configuração.

Encerrar HTTPs na instância (HTTPS de ponta a ponta) em um ambiente de instância única

  1. Permita o tráfego de entrada na porta 443 para a instância na qual seu aplicativo Elastic Beanstalk está sendo executado.

    O exemplo a seguir usa .ebextensions para permitir o tráfego de entrada na porta 443:

    Resources:
      sslSecurityGroupIngress:
        Type: AWS::EC2::SecurityGroupIngress
        Properties:
          GroupId: {"Fn::GetAtt" : ["AWSEBSecurityGroup", "GroupId"]}
          IpProtocol: tcp
          ToPort: 443
          FromPort: 443
          CidrIp: 0.0.0.0/0
  2. Configure o servidor proxy executado na instância para encerrar o HTTPS.

    Observação: a configuração varia de acordo com sua pilha de soluções. O arquivo .ebextensions de qualquer pilha de soluções codifica o valor da chave privada e do certificado do servidor em .ebextensions. Para proteger ainda mais esses arquivos, você pode fazer upload do conteúdo para o Amazon S3 e usar o S3Auth para transferi-los para o Amazon EC2.

  3. Para implantar arquivos de configuração em seu ambiente, adicione-os a um diretório denominado .ebextensions na raiz do pacote de aplicativos. Em seguida, implante o código-fonte que inclui esses arquivos de configuração.

AWS OFICIAL
AWS OFICIALAtualizada há 4 meses