Restricción del acceso a Application Load Balancer
Para una aplicación web u otro contenido que proporciona un equilibrador de carga de aplicación expuesto a Internet en Elastic Load Balancing, CloudFront puede almacenar en caché objetos y proporcionárselos directamente a los usuarios (espectadores), lo que reduce la carga en el equilibrador de carga de aplicación. Un equilibrador de carga expuesto a Internet tiene un nombre de DNS que se puede resolver públicamente y direcciona las solicitudes de los clientes a través de Internet hasta los destinos.
CloudFront también puede ayudar a reducir la latencia e incluso absorber algunos ataques de denegación de servicio distribuido (DDoS).
Sin embargo, si los usuarios pueden omitir CloudFront y acceder directamente a su balanceador de carga de aplicaciones, no obtendrá estos beneficios. Pero puede configurar Amazon CloudFront y el balanceador de carga de aplicaciones para evitar que los usuarios accedan directamente al balanceador de carga de aplicaciones. Esto permite a los usuarios acceder al balanceador de carga de aplicaciones solo a través de CloudFront, lo que garantiza que obtenga los beneficios de utilizar CloudFront.
Para evitar que los usuarios accedan directamente a un balanceador de carga de aplicaciones y permitir el acceso solo a través de CloudFront, siga estos pasos de alto nivel:
-
Configure CloudFront para agregar un encabezado HTTP personalizado a las solicitudes que envía al balanceador de carga de aplicaciones.
-
Configure el balanceador de carga de aplicaciones para que solo reenvíe solicitudes que contengan el encabezado HTTP personalizado.
-
(Opcional) Requiera HTTPS para mejorar la seguridad de esta solución.
Para obtener más información, consulte los siguientes temas. Después de completar estos pasos, los usuarios solo pueden acceder a su balanceador de carga de aplicaciones a través de CloudFront.
Temas
- Configuración de CloudFront para agregar un encabezado HTTP personalizado a solicitudes
- Configuración de un equilibrador de carga de aplicaciones para que solo reenvíe solicitudes que contengan un encabezado específico
- (Opcional) Mejore la seguridad de esta solución
- (Opcional) Limitación del acceso al origen mediante la lista de prefijos administrados por AWS para CloudFront
Configuración de CloudFront para agregar un encabezado HTTP personalizado a solicitudes
Puede configurar CloudFront para agregar un encabezado HTTP personalizado a las solicitudes que envía a su origen (en este caso, un balanceador de carga de aplicaciones).
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 hacer que el balanceador de carga de aplicaciones se comporte como si las solicitudes vinieran de CloudFront cuando no lo hacen. Para evitar esto, mantenga el nombre del encabezado personalizado y el valor en secreto.
Puede configurar CloudFront para agregar un encabezado HTTP personalizado a las solicitudes de origen con la consola de CloudFront, AWS CloudFormation o la API de CloudFront.
- Para agregar un encabezado HTTP personalizado (consola de CloudFront)
-
En la consola de CloudFront, utilice la configuración Origin Custom Headers (Encabezados personalizados de origen) Origin Settings (Configuración de origen). Introduzca el Nombre del encabezado y el Valor.
nota
En producción, use nombres de encabezado y valores generados aleatoriamente. Trate los nombres y valores de los encabezados como credenciales seguras, como nombres de usuario y contraseñas.
Puede editar la configuración Origin Custom Headers (Encabezados personalizados de origen) cuando crea o edita un origen para una distribución existente de CloudFront y crea una distribución nueva. Para obtener más información, consulte Actualizar 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, consulte las propiedades Origin y OriginCustomHeader en la Guía del usuario de AWS CloudFormation.
- Para agregar un encabezado HTTP personalizado (API de CloudFront)
-
En la API de CloudFront, utilice el
CustomHeaders
objeto interiorOrigin
. Para obtener más información, consulte CreateDistribution and UpdateDistribution en la Referencia de la API de Amazon CloudFront y la documentación del 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 CloudFront no puede agregar a solicitudes de origen.
Configuración de un equilibrador 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 al balanceador de carga de aplicaciones (consulte la sección anterior), puede configurar el balanceador de carga para que solo reenvíe 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
-
Agregue una nueva regla. Siga las instrucciones de Agregar una regla, con las siguientes modificaciones:
Agregue la regla al equilibrador de carga que es el origen de la distribución de CloudFront.
Para Agregar condición, elija Encabezado Http. Especifique el nombre del encabezado HTTP y el valor que agregó como encabezado personalizado de origen en CloudFront.
Para Agregar acción, elija Reenviar a. Elija el grupo de destino al que desea reenviar las solicitudes.
-
Edite la regla predeterminada en el oyente del equilibrador de carga. Siga las instrucciones de Editar una regla, con las siguientes modificaciones:
Edite la regla predeterminada del equilibrador de carga que es el origen de la distribución de CloudFront.
Elimine la acción predeterminada y, a continuación, en Agregar acción, elija Devolver respuesta fija.
En Response code (Código de respuesta), escriba
403
.En Response body (Cuerpo de respuesta), escriba
Access denied
.
Después de completar estos pasos, el oyente del equilibrador de carga tiene dos reglas. Una regla reenvía las solicitudes que contienen el encabezado HTTP (solicitudes que provienen de CloudFront). La otra regla envía una respuesta fija a todas las demás solicitudes (solicitudes que no provienen de CloudFront).
Puede verificar que la solución funcione si envía una solicitud a su distribución de CloudFront y una a su balanceador de carga de aplicaciones. La solicitud a CloudFront devuelve su aplicación web o contenido y la que se envía directamente al balanceador de carga de aplicaciones devuelve una respuesta 403
con el 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 distribución de CloudFront para que utilice siempre HTTPS cuando envíe solicitudes a su balanceador de carga de aplicaciones. 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
Para configurar CloudFront a fin de que utilice HTTPS para solicitudes de origen, establezca la configuración Origin Protocol Policy (Política de protocolo de origen) en HTTPS Only (Solo HTTPS). Esta configuración está disponible en la consola de CloudFront, AWS CloudFormation y la API de CloudFront. Para obtener más información, consulte Protocolo (solo orígenes personalizados).
Lo siguiente también se aplica al configurar CloudFront con el fin de que utilice HTTPS para solicitudes de origen:
-
Debe configurar CloudFront para que reenvíe el encabezado
Host
al origen con la política de solicitud de origen. Puede utilizar la política de solicitud de origen administrada por AllViewer. -
Asegúrese de que el Equilibrador de carga de aplicación dispone de un oyente HTTPS (como se muestra en la sección anterior). 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. Utilizar un oyente HTTPS requiere disponer de un certificado SSL/TLS que coincida con el nombre de dominio enrutado al Equilibrador de carga de aplicación.
-
Los certificados SSL/TLS para CloudFront solo se pueden solicitar (o importar) en la Región de AWS de
us-east-1
en AWS Certificate Manager (ACM). Como CloudFront es un servicio global, distribuye automáticamente el certificado de la región deus-east-1
a todas las regiones asociadas a la distribución de CloudFront.-
Por ejemplo, si tiene un Equilibrador de carga de aplicación (ALB) en la región de
ap-southeast-2
, debe configurar certificados SSL/TLS tanto en la región deap-southeast-2
(para utilizar HTTPS entre CloudFront y el origen de ALB) como en la región deus-east-1
(para utilizar HTTPS entre los lectores y CloudFront). Ambos certificados deben coincidir con el nombre de dominio que se enruta al Equilibrador de carga de aplicación. Para obtener más información, consulte Región de AWS para AWS Certificate Manager.
-
-
Si los usuarios finales (también conocidos como lectoreso clientes) de su aplicación web pueden usar HTTPS, también puede configurar CloudFront para que prefiera (o incluso requiera) 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 consola de CloudFront, AWS CloudFormation y la API de CloudFront. 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:
-
Configure CloudFront para agregar un encabezado HTTP personalizado adicional a las solicitudes que envía al balanceador de carga de aplicaciones.
-
Actualice la regla del agente de escucha del balanceador de carga de aplicaciones para reenviar solicitudes que contengan este encabezado HTTP personalizado adicional.
-
Configure CloudFront para dejar de agregar el encabezado HTTP personalizado original a las solicitudes que envía al balanceador de carga de aplicaciones.
-
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.
(Opcional) Limitación del acceso al origen mediante la lista de prefijos administrados por AWS para CloudFront
Para restringir aún más el acceso al Equilibrador de carga de aplicación, puede configurar el grupo de seguridad asociado a él para que solo acepte tráfico de CloudFront cuando el servicio utilice una lista de prefijos administrados por AWS. Esto evita que el tráfico que no se origina en CloudFront llegue al Equilibrador de carga de aplicación en la capa de red (capa 3) o en la capa de transporte (capa 4).
Para obtener más información, consulte la entrada de blog Limit access to your origins using the AWS-managed prefix list for Amazon CloudFront