Asociación de una función de conexión de CloudFront - Amazon CloudFront

Asociación de una función de conexión de CloudFront

Las funciones de conexión de CloudFront permiten implementar una lógica de validación de certificados personalizada durante los establecimientos de comunicación de TLS, lo que amplía las capacidades de autenticación mTLS integradas.

¿Qué son las funciones de conexión?

Las funciones de conexión son funciones de JavaScript que se ejecutan durante el establecimiento de comunicación de TLS después de que se hayan validado los certificados de cliente. El certificado de cliente validado se pasa a la función de conexión, momento en el que la función de conexión puede tomar una decisión adicional sobre si conceder o no el acceso. Para obtener información detallada sobre las funciones de conexión, consulte Personalización en la periferia con CloudFront Functions.

Cómo funcionan las funciones de conexión con mTLS

Cuando un cliente intenta establecer una conexión de mTLS con la distribución de CloudFront, se produce la siguiente secuencia:

  1. El cliente inicia el establecimiento de comunicación de TLS con la ubicación periférica de CloudFront.

  2. CloudFront solicita y recibe el certificado de cliente.

  3. CloudFront realiza una validación de certificados estándar en un almacén de confianza.

  4. Si el certificado pasa la validación estándar, CloudFront invoca la función de conexión. Si IgnoreCertificateExpiry está activado en ViewerMtlsConfig, los certificados vencidos (pero válidos por lo demás) también se transfieren a la función de conexión. Si los certificados de cliente no son válidos, no se invocarán las funciones de conexión.

  5. La función de conexión recibe la información del certificado analizada y los detalles de la conexión.

  6. La función toma una decisión de permitir o denegar en función de una lógica personalizada.

  7. CloudFront completa o finaliza la conexión de TLS en función de su decisión.

Las funciones de conexión se invocan tanto en el modo de verificación como en el modo opcional (cuando los clientes presentan certificados).

Solicitud de un aumento de la cuota de la función de conexión

Solicite un aumento de la cuota de la función de conexión para la Cuenta de AWS.

Solicitud de un aumento de la cuota de la función de conexión
  1. Inicie sesión en Consola de administración de AWS y abra la consola de CloudFront en https://console.aws.amazon.com/cloudfront/v4/home.

  2. Seleccione Funciones en el panel de navegación.

  3. Elija la pestaña Funciones de conexión.

  4. En Solicitar, elija el enlace para ponerse en contacto con el departamento de ingeniería de soporte de CloudFront.

  5. Los ingenieros de soporte de CloudFront revisan su solicitud. El proceso de revisión puede tardar hasta dos días.

Una vez aprobada la solicitud, puede crear una función de conexión en la cuenta y asociarla a una o varias distribuciones mediante TLS mutua.

Creación de una función de conexión

Puede crear funciones de conexión mediante la consola de CloudFront o la CLI de AWS.

Creación de una función de conexión (consola)

  1. Inicie sesión en Consola de administración de AWS y abra la consola de CloudFront en https://console.aws.amazon.com/cloudfront/v4/home.

  2. Seleccione Funciones en el panel de navegación.

  3. Elija la pestaña Funciones de conexión y, a continuación, elija Crear función de conexión.

  4. Ingrese un nombre de función que sea exclusivo dentro de la cuenta de AWS.

  5. Elija Continuar.

  6. En el editor de funciones, escriba el código de JavaScript para la validación del certificado. El controlador de funciones debe llamar a permitir o rechazar.

  7. Opcional: se puede asociar un almacén KeyValue a la función de conexión para implementar el control de revocación.

  8. Seleccione Save changes (Guardar cambios).

Creación de una función de conexión (CLI de AWS)

En el siguiente ejemplo, se muestra cómo crear una función de conexión:

Escriba el código de la función en un archivo independiente, por ejemplo, code.js:

function connectionHandler(connection) { connection.allow(); }
aws cloudfront create-connection-function \ --name "certificate-validator" \ --connection-function-config '{ "Comment": "Client certificate validation function", "Runtime": "cloudfront-js-2.0" }' \ --connection-function-code fileb://code.js

Estructura de código de la función de conexión

Las funciones de conexión implementan la función connectionHandler que recibe un objeto de conexión que contiene el certificado y la información de conexión. La función debe utilizar una de las dos opciones, connection.allow() o connection.deny(), para tomar una decisión sobre la conexión.

Ejemplo de función de conexión básica

En el siguiente ejemplo, se muestra una función de conexión sencilla que verifica el campo de asunto de los certificados de cliente:

function connectionHandler(connection) { // Only process if a certificate was presented if (!connection.clientCertificate) { console.log("No certificate presented"); connection.deny(); } // Check the subject field for specific organization const subject = connection.clientCertificate.certificates.leaf.subject; if (!subject.includes("O=ExampleCorp")) { console.log("Certificate not from authorized organization"); connection.deny(); } else { // All checks passed console.log("Certificate validation passed"); connection.allow(); } }

La especificación completa de las propiedades del certificado de cliente disponibles en el objeto de conexión está disponible aquí:

{ "connectionId": "Fdb-Eb7L9gVn2cFakz7wWyBJIDAD4-oNO6g8r3vXDV132BtnIVtqDA==", // Unique identifier for this TLS connection "clientIp": "203.0.113.42", // IP address of the connecting client (IPv4 or IPv6) "clientCertificate": { "certificates": { "leaf": { "subject": "CN=client.example.com,O=Example Corp,C=US", // Distinguished Name (DN) of the certificate holder "issuer": "CN=Example Corp Intermediate CA,O=Example Corp,C=US", // Distinguished Name (DN) of the certificate authority that issued this certificate "serialNumber": "4a:3f:5c:92:d1:e8:7b:6c", // Unique serial number assigned by the issuing CA (hexadecimal) "validity": { "notBefore": "2024-01-15T00:00:00Z", // Certificate validity start date (ISO 8601 format) "notAfter": "2025-01-14T23:59:59Z" // Certificate expiration date (ISO 8601 format) }, "sha256Fingerprint": "a1b2c3d4e5f6...abc123def456", // SHA-256 hash of the certificate (64 hex characters) }, }, }, }

Asociación de una función de conexión

Tras crear la función de conexión, debe publicarla en la etapa ACTIVA y asociarla a la distribución.

Publicación y asociación de una función de conexión (consola)

  1. Inicie sesión en la Consola de administración de AWS y abra la consola de CloudFront en https://console.aws.amazon.com/cloudfront/v4/home.

  2. Seleccione Funciones en el panel de navegación

  3. Elija la pestaña Funciones de conexión y seleccione la función de conexión.

  4. Elija Publicar para moverla a la etapa ACTIVA.

  5. Elija Agregar asociación en la tabla de distribuciones asociadas situada debajo de la sección de publicación.

  6. Seleccione la distribución que desee asociar con mTLS de espectador habilitado.

Como opción alternativa, las funciones de conexión publicadas también se pueden asociar desde la página de detalles de la distribución.

  1. Diríjase a la página de inicio de la consola, donde se muestran todas las distribuciones.

  2. Seleccione la distribución que desea asociar.

  3. Elija la pestaña General.

  4. En la sección Settings (Configuración), elija Editar.

  5. En la sección Conectividad, busque la Autenticación mutua del espectador (mTLS).

  6. Para Función de conexión, seleccione la función.

  7. Seleccione Save changes (Guardar cambios).

Asociación de una función de conexión (CLI de AWS)

En el siguiente ejemplo, se muestra cómo asociar una función de conexión a una distribución:

// DistributionConfig: { ...other settings, "ConnectionFunctionAssociation": { "Id": "cf_30c2CV2elHwCoInb3LtcaUJkZeD" } }

Casos de uso para funciones de conexión

Las funciones de conexión permiten varios casos de uso avanzados de mTLS:

  • Validación de los atributos de los certificados: verifique campos específicos de los certificados de los clientes, como los requisitos de las unidades organizativas o los patrones de nombres alternativos de los temas.

  • Comprobación de la revocación de certificados: Implemente una comprobación de revocación de certificados personalizada mediante KeyValueStore para almacenar los números de serie de los certificados revocados.

  • Políticas de certificados basadas en IP: aplique diferentes políticas de certificación en función de las direcciones IP de los clientes o de las restricciones geográficas.

  • Validación multiusuario: implemente reglas de validación específicas para cada inquilino en las que se apliquen diferentes requisitos de certificación en función de los nombres de host o los atributos de certificados.

nota

Las funciones de conexión se ejecutan una vez por conexión de cliente durante el establecimiento de comunicación de TLS.

Las funciones de conexión solo pueden permitir o denegar las conexiones, no modificar las solicitudes o respuestas HTTP.

Solo las funciones de etapa ACTIVA (publicadas) se pueden asociar a las distribuciones.

Cada distribución puede tener como máximo una función de conexión.

Siguientes pasos

Tras asociar una función de conexión a la distribución de CloudFront, puede configurar los ajustes opcionales para personalizar el comportamiento de la implementación de mTLS. Para obtener instrucciones detalladas sobre cómo configurar ajustes adicionales, como un modo de validación de certificados de cliente opcional, consulte Configuración adicional.