Saltar al contenido

¿Cómo envío encabezados de seguridad personalizados a través de API Gateway para integraciones con proxy o sin proxy de Lambda?

4 minutos de lectura
0

Quiero enviar encabezados de seguridad personalizados a través de Amazon API Gateway para integraciones con o sin proxy de AWS Lambda.

Resolución

Para agregar encabezados de seguridad personalizados en las respuestas de API Gateway, sigue el método para tu tipo de integración.

Nota: La siguiente resolución se aplica solo a las API de REST de API Gateway. Las API HTTP no admiten asignaciones de respuestas de integración ni respuestas de métodos.

Integraciones de proxy de Lambda

Para las integraciones de proxy de Lambda, API Gateway envía la solicitud y la respuesta entre el cliente y la función de Lambda integrada sin modificaciones. Para enviar encabezados de seguridad personalizados desde una API de API Gateway a una función de Lambda, debes modificar el código fuente de la función.

Sigue estos pasos:

  1. Abre la consola de API Gateway.

  2. En el panel de navegación, selecciona API y, a continuación, selecciona tu API de REST.

  3. Selecciona Crear método.

  4. En el panel Crear método, realiza las siguientes acciones:
    En Tipo de método, selecciona tu tipo de método.
    Para Tipo de integración, selecciona Función de Lambda.
    Confirma que has activado la integración de proxy de Lambda.
    En Función de Lambda, selecciona tu función de Lambda.
    Selecciona Crear método.

  5. En el panel Solicitud de integración, selecciona la función de Lambda.

  6. En Código fuente, sustituye el código de la función por el siguiente código Python o Node.js en el editor de código.
    Python 3.14 y versiones posteriores:

    def lambda_handler(event, context):
    return {
        'statusCode': 200,
        'headers': {
            "Strict-Transport-Security": "max-age=100000",
            "X-Frame-Options": "DENY",
            "X-Content-Type-Options": "nosniff",
            "Content-Security-Policy": "default-src 'self'"
         },
        'body': json.dumps("Hello from Lambda with security headers!")
    }

    Node.js 14 y versiones posteriores:

    exports.handler = async (event) => {
        const response = {
            statusCode: 200,
            headers: {
                'Strict-Transport-Security': 'max-age=31536000; includeSubDomains',
                'Content-Security-Policy': "default-src 'self'",
                'X-Frame-Options': 'DENY',
                'X-Content-Type-Options': 'nosniff'
            },
            body: JSON.stringify('Hello from Lambda with security headers!')
        };
        return response;
    };
  7. Selecciona Desplegar.

Integraciones que no son de proxy

Para enviar encabezados de seguridad personalizados a través de integraciones personalizadas o sin proxy, como los tipos de integración de HTTP y de servicio de AWS, crea una plantilla de asignación o una respuesta de método.

Cómo crear de una plantilla de asignación

Sigue estos pasos:

  1. Abre la consola de API Gateway.

  2. En el panel de navegación, selecciona API y, a continuación, selecciona tu API de REST.

  3. En el panel Crear método, introduce el tipo de método y el tipo de integración y, a continuación, selecciona Crear método.

  4. En el panel Solicitud de integración, selecciona Editar.

  5. Expande Plantillas de asignación y, a continuación, selecciona Agregar plantilla de asignación.

  6. En Tipo de contenido, introduce tu tipo de contenido. Por ejemplo, application/json.

  7. En el editor Cuerpo de la plantilla, introduce la siguiente plantilla de asignación:

    #set($headersToReturn = {  
      "Strict-Transport-Security": "max-age=31536000; includeSubDomains"  
    })#foreach($header in $headersToReturn.keySet())  #set($context.responseOverride.header[$header] = $headersToReturn[$header])#end
  8. Selecciona Guardar.

  9. Selecciona Desplegar API.

Cómo crear una respuesta de método

Sigue estos pasos:

  1. Abre la consola de API Gateway.
  2. En el panel de navegación, selecciona API y, a continuación, selecciona tu API de REST.
  3. En el panel de Respuesta de método, selecciona Editar.
  4. En Nombre de encabezado, selecciona Agregar encabezado.
  5. Introduce el nombre del encabezado personalizado que deseas devolver, por ejemplo, Strict-Transport-Security.
  6. Selecciona Agregar encabezado para agregar otro encabezado que desees devolver, por ejemplo, Content-Security-Policy.
  7. Selecciona Guardar.
  8. En el panel Solicitud de integración, selecciona Editar.
  9. En Asignaciones de encabezados, introduce los valores de asignación de los encabezados, por ejemplo, max-age=100000 y self.
  10. Selecciona Guardar y, a continuación, selecciona Desplegar la API.

Prueba de configuración

Para confirmar que los encabezados personalizados de seguridad están incluidos en la respuesta, ejecuta el siguiente comando curl para invocar tu API de REST:

curl -v https://your-api-id.execute-api.your-region.amazonaws.com/your-stage-name

Nota: Sustituye your-api-id por tu API de REST, your-region por tu región de AWS y your-stage-name por el nombre de tu etapa.

Información relacionada

¿Cómo envío los encabezados personalizados a través de API Gateway a una función de Lambda con integración personalizada de Lambda (sin proxy)?

Asignación de las transformaciones de plantillas para las API de REST en API Gateway

¿Cómo puedo solucionar los errores HTTP 502 de las API de REST de API Gateway con la integración de proxy de Lambda?

Tutorial: Cómo crear una API de REST con una integración no de proxy de Lambda

Sin comentarios

Contenido relevante