Configuración del cifrado integral en un entorno de Elastic Beanstalk con balanceo de carga - AWS Elastic Beanstalk

Configuración del cifrado integral en un entorno de Elastic Beanstalk con balanceo de carga

Es posible que, en el caso de su aplicación, sea suficiente terminar las conexiones seguras en el balanceador de carga y utilizar HTTP en el backend. El tráfico de red entre los recursos de AWS no lo pueden interceptar las instancias que no forman parte de la conexión, aunque se ejecuten en la misma cuenta.

Sin embargo, si está desarrollando una aplicación que debe cumplir estrictas normativas externas, es posible que necesite proteger todas las conexiones de red. Puede utilizar la consola de Elastic Beanstalk o archivos de configuración para que el balanceador de carga del entorno de Elastic Beanstalk se conecte de forma segura a las instancias del backend y cumplir así con estos requisitos. El procedimiento siguiente se centra en los archivos de configuración.

En primer lugar, agregue un agente de escucha seguro al balanceador de carga, si aún no lo ha hecho.

Asimismo, debe configurar las instancias del entorno para que reciban las solicitudes en el puerto seguro y terminen las conexiones HTTPS. La configuración varía en función de la plataforma. Consulte Configurar su aplicación para terminar las conexiones HTTPS en la instancia para obtener instrucciones. Puede utilizar un certificado autofirmado para las instancias EC2 sin problemas.

A continuación, configure el agente de escucha para que reenvíe el tráfico utilizando HTTPS en el puerto seguro que se utiliza en la aplicación. Utilice uno de los archivos de configuración siguientes, según el tipo de balanceador de carga que su entorno utiliza.

.ebextensions/https-reencrypt-clb.config

Utilice este archivo de configuración con un Classic Load Balancer. Además de configurar el balanceador de carga, el archivo de configuración también cambia la comprobación de estado predeterminada para que utilice el puerto 443 y HTTPS, garantizando así que el balanceador de carga se conecte de forma segura.

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

.ebextensions/https-reencrypt-alb.config

Utilice este archivo de configuración con un Balanceador de carga de aplicaciones.

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

Utilice este archivo de configuración con un Balanceador de carga de red.

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

La opción DefaultProcess se denomina de esta forma debido a los Application Load Balancers, que pueden tener agentes de escucha predeterminados en el mismo puerto correspondiente al tráfico a rutas específicas (consulte Balanceador de carga de aplicaciones para obtener más información). Para un Balanceador de carga de red, la opción especifica el único proceso de destino de este agente de escucha.

En este ejemplo, hemos denominado al proceso https porque escucha el tráfico seguro (HTTPS). El agente de escucha envía el tráfico al proceso en el puerto designado mediante el protocolo TCP, porque un Balanceador de carga de red solo funciona con TCP. Esto es correcto, porque el tráfico de red HTTP y HTTPS está implemento sobre TCP.

nota

La CLI de EB y la consola de Elastic Beanstalk aplican los valores recomendados a las opciones anteriores. Debe eliminar estos ajustes si desea usar archivos de configuración para configurarlos. Para obtener más información, consulte Valores recomendados.

En la siguiente tarea, debe modificar el grupo de seguridad del balanceador de carga para permitir el tráfico. En función del Amazon Virtual Private Cloud (Amazon VPC) en el que lanza su entorno (la VPC predeterminada o una VPC personalizada), el grupo de seguridad del balanceador de carga variará. En una VPC predeterminada, Elastic Load Balancing cuenta con un grupo de seguridad predeterminado que pueden utilizar todos los balanceadores de carga. En una Amazon VPC personalizada, Elastic Beanstalk crea un grupo de seguridad para que lo use el balanceador de carga.

Para admitir los dos escenarios, puede crear un grupo de seguridad e indicarle a Elastic Beanstalk que lo use. El archivo de configuración siguiente crea un grupo de seguridad y lo adjunta al balanceador de carga.

.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

Cambie el texto resaltado por el ID de la VPC predeterminada o personalizada. El ejemplo anterior incluye la entrada y salida a través del puerto 80 para permitir las conexiones HTTP. Puede eliminar estas propiedades si quiere permitir solo conexiones seguras.

Por último, agregue reglas de entrada y salida que permitan la comunicación a través del puerto 443 entre el grupo de seguridad del balanceador de carga y el grupo de seguridad de las instancias.

.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"]}

Si hace esto en una operación distinta a la creación del grupo de seguridad, podrá restringir los grupos de seguridad de origen y destino sin necesidad de crear una dependencia circular.

Después de haber completado todas las tareas anteriores, el balanceador de carga se conecta a las instancias backend de forma segura mediante HTTPS. Al balanceador de carga no le importa si el certificado de la instancia es autofirmado o lo ha emitido una autoridad de certificación de confianza; aceptará cualquier certificado que se le presente.

Puede cambiar este comportamiento agregando políticas al balanceador de carga que le indiquen que puede confiar solo en un certificado específico. El siguiente archivo de configuración crea dos políticas. Una política especifica un certificado público y la otra le indica al balanceador de carga que solo debe confiar en ese certificado para las conexiones con el puerto 443 de las instancias.

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

Cambie el texto resaltado con el contenido del certificado público de la instancia EC2.