¿Cómo puedo configurar HTTPS para mi entorno de Elastic Beanstalk?

8 minutos de lectura
0

Quiero configurar HTTPS para mi entorno de AWS Elastic Beanstalk y así poder cifrar los datos del equilibrador de carga en mi instancia de Amazon Elastic Compute Cloud (Amazon EC2).

Breve descripción

Si ha adquirido y configurado un nombre de dominio personalizado para su entorno de Elastic Beanstalk, puede utilizar HTTPS para permitir que los usuarios se conecten a su sitio web de forma segura. Si no tiene un nombre de dominio, puede seguir utilizando HTTPS con un certificado de autofirma para fines de desarrollo y prueba.

Para los entornos de instancia única, debe crear localmente la clave privada y el certificado. A continuación, cargue el certificado en AWS Identity and Access Management (IAM).

Se recomienda utilizar AWS Certificate Manager (ACM) para aprovisionar, administrar y desplegar sus certificados de servidor de forma programática. También puede utilizar la interfaz de la línea de comandos de AWS (AWS CLI) para cargar un certificado de terceros o autofirmado y una clave privada a IAM. Si ACM no está disponible en su región de AWS, utilice la AWS CLI.

Nota: Si se muestran errores al ejecutar comandos de la Interfaz de la línea de comandos de AWS (AWS CLI), consulte Errores de solución de problemas de la AWS CLI. Además, asegúrese de utilizar la versión más reciente de AWS CLI.

Resolución

Preparar el entorno de Elastic Beanstalk

  1. Para dirigir el tráfico a su entorno de Elastic Beanstalk, registre un nuevo dominio mediante Amazon Route 53 u otro proveedor de dominios.
  2. Si la URL de su entorno incluye una región, cree un nombre de alias. O bien, cree un registro CNAME si la URL de su entorno no incluye una región.
    Importante: Para entornos creados antes de 2016, puede utilizar registros CNAME. No puede utilizar un registro CNAME con un dominio de vértice de zona (también conocido como dominio raíz o dominio simple). Para obtener más información, consulte Elección entre registros de alias y sin alias.
  3. Cree un certificado en ACM o cargue un certificado firmado por terceros o autofirmado y una clave privada a IAM.

Añadir agentes de escucha a sus equilibradores de carga

  1. Abra la consola de Elastic Beanstalk y, a continuación, seleccione su entorno.
  2. En el panel de navegación, seleccione Configuración.
  3. En la categoría Equilibrador de carga, elija Modificar.
  4. Para agregar el agente de escucha para el puerto 443, complete los pasos del equilibrador de carga que se encuentra en su entorno de Elastic Beanstalk.

Equilibrador de carga clásico

Siga estos pasos:

  1. Seleccione Añadir un agente de escucha.
  2. En Puerto, introduzca el puerto de tráfico entrante (normalmente 443).
  3. En Protocolo, seleccione HTTPS.
  4. En Puerto de instancia, introduzca 80.
  5. En Protocolo de instancia, elija HTTP.
  6. En Certificado SSL, elija el certificado y, a continuación, seleccione la política SSL de la lista desplegable.
  7. Elija Añadir, a continuación, seleccione Aplicar.

Equilibrador de carga de aplicación

Siga estos pasos:

  1. Seleccione Añadir un agente de escucha.
  2. En Puerto, introduzca el puerto de tráfico entrante (normalmente 443).
  3. En Protocolo, seleccione HTTPS.
  4. En Certificado SSL, elija el certificado y, a continuación, seleccione la política SSL de la lista desplegable.
  5. Elija Añadir, a continuación, seleccione Aplicar.

Equilibrador de carga de red

Siga estos pasos:

  1. Seleccione Añadir un agente de escucha.
  2. En Puerto, introduzca el puerto de tráfico entrante (normalmente 443).
  3. Elija Añadir, a continuación, seleccione Aplicar.

Configurar las instancias para terminar las conexiones HTTPS

Si desea configurar las instancias para que terminen las conexiones HTTPS, debe utilizar archivos de configuración para modificar el software que se ejecuta en las instancias. También debe usar archivos de configuración para modificar los grupos de seguridad de modo que permitan conexiones seguras.

Importante: Si utiliza un entorno de instancia única, omita los pasos siguientes. A continuación, complete los pasos de la sección Terminar los HTTPS de la instancia (HTTPS de extremo a extremo) en un entorno de instancia única.

  1. Añada un agente de escucha seguro a su equilibrador de carga. Utilice uno de los siguientes archivos de configuración según el tipo de equilibrador de carga de su entorno de Elastic Beanstalk.

    Para un equilibrador de carga clásico, utilice un archivo .ebextensions/https-reencrypt-clb.config:

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

    Para un equilibrador de carga de aplicación, utilice el archivo .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 un equilibrador de carga de red, utilice el archivo .ebextensions/https-reencrypt-nlb.config:

    option_settings:
      aws:elbv2:listener:443:
        DefaultProcess: https
        ListenerEnabled: 'true'
      aws:elasticbeanstalk:environment:process:https:
    
  2. Actualice el equilibrador de carga para recibir tráfico en el puerto 443.

    Puede crear un grupo de seguridad nuevo y, a continuación, hacer que Elastic Beanstalk lo utilice para recibir tráfico en el puerto 443. Por ejemplo, el siguiente archivo .ebextensions/https-lbsecuritygroup.config crea un grupo de seguridad y lo adjunta al equilibrador 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

    Nota: Sustituya VpcId por el valor de su entorno.

    El ejemplo anterior incluye la entrada y la salida a través del puerto 80 para permitir las conexiones HTTP. Para permitir únicamente conexiones seguras, elimine la configuración del puerto 80 en la sección SecurityGroupIngress.

  3. Agregue reglas de entrada y salida que permitan la comunicación a través del puerto 443 entre el grupo de seguridad del equilibrador de carga y el grupo de seguridad de las instancias.

    Por ejemplo, puede utilizar el siguiente archivo .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"]}

    El equilibrador de carga ahora usa HTTPS para conectarse de forma segura a sus instancias de backend. El equilibrador de carga acepta cualquier certificado de la instancia, como un certificado autofirmado o uno emitido por una autoridad de certificación de confianza.

    Nota: Puede agregar políticas al equilibrador de carga que le indiquen que confíe solamente en un certificado específico. Por ejemplo, el siguiente archivo .ebextensions/https-backendauth.config crea dos políticas. Una política especifica un certificado público y la otra indica al equilibrador de carga que confíe únicamente en ese certificado para las conexiones al puerto 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 el servidor proxy que se ejecuta en la instancia para que termine el HTTPS.

    Nota: La configuración varía en función de su pila de soluciones. El .ebextensions para cualquier pila de soluciones codifica de forma rígida el valor de la clave privada y el certificado del servidor en el .ebextensions. Para proteger aún más estos archivos, puede cargar el contenido en Amazon Simple Storage Service (Amazon S3) y transferirlo a Amazon EC2 mediante S3Auth.

  5. Para desplegar archivos de configuración en su entorno, añada los archivos de configuración a un directorio denominado .ebextensions en la raíz del paquete de aplicaciones. A continuación, despliegue el código fuente que incluye estos archivos de configuración.

Terminar los HTTPS de la instancia (HTTPS de extremo a extremo) en un entorno de instancia única

  1. Permita el tráfico entrante en el puerto 443 a la instancia en la que se ejecuta la aplicación de Elastic Beanstalk.

    El siguiente ejemplo utiliza .ebextensions para permitir el tráfico entrante en el puerto 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 el servidor proxy que se ejecuta en la instancia para que termine el HTTPS.

    Nota: La configuración varía en función de su pila de soluciones. El .ebextensions para cualquier pila de soluciones codifica de forma rígida el valor de la clave privada y el certificado del servidor en el .ebextensions. Para proteger aún más estos archivos, puede cargar el contenido en Amazon S3 y usar S3Auth para transferirlos a Amazon EC2.

  3. Para desplegar archivos de configuración en su entorno, añada los archivos de configuración a un directorio denominado .ebextensions en la raíz del paquete de aplicaciones. A continuación, despliegue el código fuente que incluye estos archivos de configuración.

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace 5 meses