Restringir el acceso a Application Load Balancer - Amazon CloudFront

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Restringir el acceso a Application Load Balancer

En el caso de una aplicación web u otro contenido ofrecido por un Application Load Balancer en Elastic Load Balancing, CloudFront puedes almacenar objetos en caché y proporcionarlos directamente a los usuarios (espectadores), lo que reduce la carga de tu Application Load Balancer. CloudFronttambién puede ayudar a reducir la latencia e incluso a absorber algunos ataques de denegación de servicio distribuido (DDoS). Sin embargo, si los usuarios pueden omitir tu Application Load Balancer CloudFront y acceder directamente a él, no obtendrás estas ventajas. Sin embargo, puedes configurar Amazon CloudFront y tu Application Load Balancer para impedir que los usuarios accedan directamente al Application Load Balancer. Esto permite a los usuarios acceder al Application Load Balancer únicamente a través de él CloudFront, lo que garantiza que usted obtenga las ventajas de su uso. CloudFront

Para evitar que los usuarios accedan directamente a un Application Load Balancer y permitir el acceso solo a través de él CloudFront, complete estos pasos de alto nivel:

  1. Configure CloudFront para agregar un encabezado HTTP personalizado a las solicitudes que envía a Application Load Balancer.

  2. Configure el balanceador de carga de aplicaciones para que solo reenvíe solicitudes que contengan el encabezado HTTP personalizado.

  3. (Opcional) Requiera HTTPS para mejorar la seguridad de esta solución.

Para obtener más información, consulte los siguientes temas. Tras completar estos pasos, los usuarios solo podrán acceder a su Application Load Balancer a través de él. CloudFront

Configuración CloudFront para añadir un encabezado HTTP personalizado a las solicitudes

Puede configurarlo CloudFront para añadir un encabezado HTTP personalizado a las solicitudes que envíe a su origen (en este caso, un Application Load Balancer).

importante

Este caso de uso se basa en mantener el nombre del encabezado personalizado y el valor en secreto. Si el nombre y el valor del encabezado no son secretos, otros clientes HTTP podrían incluirlos en las solicitudes que envían directamente al balanceador de carga de aplicaciones. Esto puede provocar que Application Load Balancer se comporte como si las solicitudes vinieran de donde CloudFront no procedían. Para evitar esto, mantenga el nombre del encabezado personalizado y el valor en secreto.

Puedes configurarlo CloudFront para añadir un encabezado HTTP personalizado a las solicitudes de origen con la CloudFront consola o la CloudFront API. AWS CloudFormation

Para añadir un encabezado HTTP personalizado (CloudFront consola)

En la CloudFront consola, usa el ajuste de encabezados personalizados de Origin en los ajustes de Origin. escriba el nombre del encabezado y su valor, como se muestra en el siguiente ejemplo.

nota

El nombre del encabezado y el valor de este ejemplo son solo para demostración. En producción, use valores generados aleatoriamente. Trate el nombre y el valor del encabezado como una credencial segura, como un nombre de usuario y una contraseña.


                            Campos de encabezados personalizados de Origin en la  CloudFront consola.

Puede editar la configuración de los encabezados personalizados de Origin al crear o editar un origen para una CloudFront distribución existente y al crear una distribución nueva. Para obtener más información, consulte Actualización de una distribución y Creación de una distribución.

Para agregar un encabezado HTTP personalizado (AWS CloudFormation)

En una plantilla de AWS CloudFormation, utilice la propiedad OriginCustomHeaders, como se muestra en el siguiente ejemplo.

nota

El nombre del encabezado y el valor de este ejemplo son solo para demostración. En producción, use valores generados aleatoriamente. Trate el nombre y el valor del encabezado como una credencial segura, como un nombre de usuario y una contraseña.

AWSTemplateFormatVersion: '2010-09-09' Resources: TestDistribution: Type: 'AWS::CloudFront::Distribution' Properties: DistributionConfig: Origins: - DomainName: app-load-balancer.example.com Id: Example-ALB CustomOriginConfig: OriginProtocolPolicy: https-only OriginSSLProtocols: - TLSv1.2 OriginCustomHeaders: - HeaderName: X-Custom-Header HeaderValue: random-value-1234567890 Enabled: 'true' DefaultCacheBehavior: TargetOriginId: Example-ALB ViewerProtocolPolicy: allow-all CachePolicyId: 658327ea-f89d-4fab-a63d-7e88639e58f6 PriceClass: PriceClass_All ViewerCertificate: CloudFrontDefaultCertificate: 'true'

Para obtener más información, consulta el origen y OriginCustomHeaderlas propiedades en la Guía del AWS CloudFormation usuario.

Para añadir un encabezado HTTP (CloudFront API) personalizado

En la CloudFront API, usa el CustomHeaders objeto que contieneOrigin. Para obtener más información, consulta CreateDistributionUpdateDistributionla Amazon CloudFront API Reference y la documentación de tu SDK u otro cliente de API.

Hay algunos nombres de encabezados que no se pueden especificar como encabezados personalizados de origen. Para obtener más información, consulte Encabezados personalizados que no se CloudFront pueden añadir a las solicitudes de origen.

Configuración de un balanceador de carga de aplicaciones para que solo reenvíe solicitudes que contengan un encabezado específico

Después de configurar CloudFront para agregar un encabezado HTTP personalizado a las solicitudes que envía a su Application Load Balancer (consulte la sección anterior), puede configurar el balanceador de carga para que solo reenvíe las solicitudes que contengan este encabezado personalizado. Para ello, agregue una nueva regla y modifique la regla predeterminada en el agente de escucha del balanceador de carga.

Requisitos previos

Para utilizar los siguientes procedimientos, necesita un balanceador de carga de aplicaciones con al menos un agente de escucha. Si aún no ha creado uno, consulte Crear un balanceador de carga de aplicaciones en la Guía del usuario de balanceadores de carga de aplicaciones.

Los siguientes procedimientos modifican un agente de escucha HTTPS. Puede utilizar el mismo proceso para modificar un agente de escucha HTTP.

Para actualizar las reglas en un agente de escucha del balanceador de carga de aplicaciones
  1. Abra la página de Load Balancers (Balanceadores de carga) en la consola de Amazon EC2.

  2. Elija el balanceador de cargas que sea el origen de la CloudFront distribución y, a continuación, elija la pestaña Listeners.

  3. Elija View/edit rules (Ver/Editar reglas) para el agente de escucha que está modificando.

    
                        Enlace para ver o editar las reglas de un balanceador de carga en la consola Amazon EC2.
  4. Elija el icono para agregar reglas.

    
                        Agregue reglas a un balanceador de carga en la consola de Amazon EC2.
  5. Elija Insert Rule.

    
                        Inserte la regla en un balanceador de carga en la consola de Amazon EC2.
  6. Para la nueva regla, haga lo siguiente:

    1. Elija Add condition (Agregar condición) y, a continuación, elija Http header (Encabezado Http). Especifique el nombre y el valor del encabezado HTTP que agregó como encabezado personalizado de origen. CloudFront

    2. Elija Add action (Agregar acción) y, a continuación, seleccione Forward to (Reenviar a). Elija el grupo de destino al que desea reenviar las solicitudes.

    3. Seleccione Save (Guardar) para crear la regla nueva.

    
                        Regla nueva en el balanceador de carga en la consola de Amazon EC2.
  7. Elija el icono para editar las reglas.

    
                        Edite las reglas del balanceador de carga en la consola de Amazon EC2.
  8. Elija el icono de edición de la regla predeterminada.

    
                        Edite la regla predeterminada para el balanceador de carga en la consola de Amazon EC2.
  9. Para la regla predeterminada, haga lo siguiente:

    1. Elimine la acción predeterminada.

      
                                Elimine la regla predeterminada del balanceador de carga en la consola de Amazon EC2.
    2. Elija Add action (Agregar acción) y, a continuación, elija Return fixed response (Devolver respuesta fija).

    3. En Response code (Código de respuesta), escriba 403.

    4. En Response body (Cuerpo de respuesta), escriba Access denied.

    5. Elija Update (Actualizar) para actualizar la regla predeterminada.

    
                        Actualice la regla predeterminada para el balanceador de carga en la consola de Amazon EC2.

Después de completar estos pasos, el agente de escucha del balanceador de carga tiene dos reglas, como se muestra en la imagen siguiente. La primera regla reenvía las solicitudes que contienen el encabezado HTTP (las solicitudes que provienen de CloudFront). La segunda regla envía una respuesta fija a todas las demás solicitudes (solicitudes que no provienen de CloudFront).


                Reglas actualizadas para el balanceador de carga en la consola de Amazon EC2.

Puede comprobar que la solución funciona enviando una solicitud a su CloudFront distribución y otra a su Application Load Balancer. La solicitud para CloudFront devolver su aplicación web o contenido y la que se envía directamente a su Application Load Balancer devuelven una 403 respuesta con un mensaje de texto sin formato. Access denied

(Opcional) Mejore la seguridad de esta solución

Para mejorar la seguridad de esta solución, puede configurar su CloudFront distribución para que utilice siempre HTTPS al enviar solicitudes a su Application Load Balancer. Recuerde, esta solución solo funciona si mantiene el nombre del encabezado personalizado y el valor en secreto. El uso de HTTPS puede ayudar a evitar que un espía descubra el nombre y el valor del encabezado. También recomendamos cambiar periódicamente el nombre y el valor del encabezado.

Usar HTTPS para solicitudes de origen

CloudFront Para configurar el uso de HTTPS en las solicitudes de origen, establece la configuración de la política de protocolo de origen en Solo HTTPS. Esta configuración está disponible en la CloudFront consola y en la CloudFront API. AWS CloudFormation Para obtener más información, consulte Protocolo (solo orígenes personalizados).

Al configurar CloudFront el uso de HTTPS para las solicitudes de origen, debe asegurarse de que su Application Load Balancer tenga un detector HTTPS (como se muestra en la sección anterior). Esto requiere que tenga un certificado SSL/TLS que coincida con el nombre de dominio que se enruta al balanceador de carga de aplicaciones. Para obtener más información, consulte Crear un agente de escucha HTTPS en la Guía del usuario de balanceadores de carga de aplicaciones.

Si los usuarios finales (también conocidos como visores o clientes) de su aplicación web pueden usar HTTPS, también puede configurarla CloudFront para preferir (o incluso exigir) las conexiones HTTPS de los usuarios finales. Para ello, utilice la configuración Viewer Protocol Policy (Política de protocolo del lector). Puede configurarla para redirigir a los usuarios finales de HTTP a HTTPS o rechazar las solicitudes que utilizan HTTP. Esta configuración está disponible en la CloudFront consola y en la CloudFront API. AWS CloudFormation Para obtener más información, consulte Política de protocolo para lectores.

Cambiar el nombre y el valor del encabezado

Además de usar HTTPS, también recomendamos cambiar el nombre y el valor del encabezado periódicamente. Los pasos de alto nivel para hacerlo son los siguientes:

  1. Configure CloudFront para agregar un encabezado HTTP personalizado adicional a las solicitudes que envíe a Application Load Balancer.

  2. Actualice la regla del agente de escucha del balanceador de carga de aplicaciones para reenviar solicitudes que contengan este encabezado HTTP personalizado adicional.

  3. CloudFront Configúrelo para dejar de agregar el encabezado HTTP personalizado original a las solicitudes que envía a Application Load Balancer.

  4. Actualice la regla del agente de escucha del balanceador de carga de aplicaciones para detener el reenvío de solicitudes que contengan el encabezado HTTP personalizado original.

Para obtener más información sobre cómo realizar estos pasos, consulte las secciones anteriores.