Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

570
Views
¿Cómo agregar encabezados a la respuesta de CloudFront?

Pruebo mi sitio web usando https://observatory.mozilla.org/analyze y obtuve una calificación F.

Las razones son:

 Content Security Policy (CSP) header not implemented X-XSS-Protection header not implemented X-Frame-Options (XFO) header not implemented ...

Sirvo mi sitio web usando CloudFront.

¿Dónde pongo esos encabezados que faltan en CloudFront?

ingrese la descripción de la imagen aquí

over 4 years ago · Santiago Trujillo
3 answers
Answer question

0

Actualización 23 junio 2021

Acabo de descubrir que si bien la solución a continuación parece excelente, puede que no sea lo suficientemente buena, especialmente para agregar encabezados de seguridad porque si Cloudfront recibe un error desde el origen, la función no se invocará.

Códigos de estado HTTP CloudFront no invoca funciones perimetrales para eventos de respuesta del espectador cuando el origen devuelve el código de estado HTTP 400 o superior.

https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/edge-functions-restrictions.html


A partir de mayo de 2021, parece que la mejor opción serían las funciones de Cloudfront recientemente introducidas, que tienen un precio de 1/6 del precio de Lambda@Edge según esta entrada de blog https://aws.amazon.com/blogs/aws/introducing -cloudfront-functions-ejecuta-tu-código-en-el-borde-con-baja-latencia-a-cualquier-escala/

Un ejemplo de la documentación en https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/example-function-add-security-headers.html

 function handler(event) { var response = event.response; var headers = response.headers; // Set HTTP security headers // Since JavaScript doesn't allow for hyphens in variable names, we use the dict["key"] notation headers['strict-transport-security'] = { value: 'max-age=63072000; includeSubdomains; preload'}; headers['content-security-policy'] = { value: "default-src 'none'; img-src 'self'; script-src 'self'; style-src 'self'; object-src 'none'"}; headers['x-content-type-options'] = { value: 'nosniff'}; headers['x-frame-options'] = {value: 'DENY'}; headers['x-xss-protection'] = {value: '1; mode=block'}; // Return the response to viewers return response; }
over 4 years ago · Santiago Trujillo Report

0

Si está implementando esto ahora, entonces está de suerte. Es mucho más simple a partir de noviembre de 2021. Amazon ha agregado un encabezado de seguridad de forma nativa a través de políticas de encabezado de respuesta, es decir, no tenemos que crear un lambda solo para agregar encabezados de respuesta a la aplicación. Detalles https://aws.amazon.com/blogs/networking-and-content-delivery/amazon-cloudfront-introduces-response-headers-policies/ .

El proveedor de Terraform AWS comenzó a admitir aws_cloudfront_response_headers_policy desde 3.64.0 https://github.com/hashicorp/terraform-provider-aws/blob/main/CHANGELOG.md#3640-november-04-2021 .

Este es un ejemplo para agregar encabezados de seguridad a la respuesta de aws cloudfront a través del proveedor terraform aws.

 resource "aws_cloudfront_response_headers_policy" "security_headers_policy" { name = "my-security-headers-policy" security_headers_config { content_type_options { override = true } frame_options { frame_option = "DENY" override = true } referrer_policy { referrer_policy = "same-origin" override = true } xss_protection { mode_block = true protection = true override = true } strict_transport_security { access_control_max_age_sec = "31536000" include_subdomains = true preload = true override = true } content_security_policy { content_security_policy = "frame-ancestors 'none'; default-src 'none'; img-src 'self'; script-src 'self'; style-src 'self'; object-src 'none'" override = true } } }
over 4 years ago · Santiago Trujillo Report

0

Recomendaría usar Lambda@Edge para agregar cualquier encabezado que esté buscando a su respuesta de origen antes de que se devuelva al espectador.

Se puede hacer de manera tan simple como el siguiente ejemplo cuando se agrega como un evento de respuesta de origen.

 import json def lambda_handler(event, context): response = event["Records"][0]["cf"]["response"] headers = response["headers"] headers['strict-transport-security'] = [{key: 'Strict-Transport-Security', value: 'max-age=63072000; includeSubdomains; preload'}]; headers['content-security-policy'] = [{key: 'Content-Security-Policy', value: "default-src 'none'; img-src 'self'; script-src 'self'; style-src 'self'; object-src 'none'"}]; headers['x-content-type-options'] = [{key: 'X-Content-Type-Options', value: 'nosniff'}]; headers['x-frame-options'] = [{key: 'X-Frame-Options', value: 'DENY'}]; headers['x-xss-protection'] = [{key: 'X-XSS-Protection', value: '1; mode=block'}]; headers['referrer-policy'] = [{key: 'Referrer-Policy', value: 'same-origin'}]; response['headers'] = headers return response

Para obtener más información, consulte la publicación de blog Adición de encabezados de seguridad HTTP mediante Lambda@Edge y Amazon CloudFront .

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!