Configurar a criptografia de ponta a ponta em um ambiente Elastic Beanstalk com balanceamento de carga - AWS Elastic Beanstalk

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á.

Configurar a criptografia de ponta a ponta em um ambiente Elastic Beanstalk com balanceamento de carga

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 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, 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 Configurar o aplicativo para encerrar conexões HTTPS na instância. Use um certificado autoassinado para as instâncias do EC2 sem problema.

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 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 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. Consulte o Valores recomendados para obter detalhes.

Na próxima tarefa, você precisa modificar o security group do load balancer para permitir tráfego. Dependendo da Amazon Virtual Private Cloud (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 seu certificado público da instância do EC2.