Usa mTLS de frontend con Secure Web Proxy

Puedes configurar la autenticación mutua de TLS (mTLS) de frontend en Secure Web Proxy para mejorar la seguridad de tus cargas de trabajo, como los agentes de IA. Secure Web Proxy usa mTLS de frontend para verificar las identidades de los clientes a través de certificados.

Esta integración te permite usar identidades de cliente validadas en las políticas de autorización de Secure Web Proxy para aplicar un control de acceso detallado al tráfico saliente.

Cómo funciona

En los siguientes pasos, se explica cómo Secure Web Proxy usa mTLS de frontend para proteger el tráfico saliente:

  • Conexión de proxy explícita: Puedes configurar el cliente para que use Secure Web Proxy como su proxy explícito. El cliente inicia una solicitud HTTPS CONNECT al frontend del Secure Web Proxy, en lugar de conectarse directamente a Internet.

  • Protocolo de enlace TLS mutuo: Durante la configuración de la conexión, Secure Web Proxy y el cliente realizan un protocolo de enlace mTLS en el frontend del proxy. El proxy usa un recurso TrustConfig configurado para validar el certificado del cliente, mientras que el cliente valida el certificado del servidor del proxy.

  • Extracción de identidad: Después de un protocolo de enlace exitoso, Secure Web Proxy extrae atributos de identidad únicos, como URI_SAN, directamente del certificado de cliente validado.

  • Autorización basada en la identidad: Secure Web Proxy evalúa la solicitud saliente según las políticas de autorización configuradas. Para determinar si la solicitud está autorizada, el proxy usa la identidad del cliente, que se verificó de forma criptográfica durante el protocolo de enlace mTLS.

  • Tráfico saliente seguro: Una vez autorizado y si hay una regla coincidente para un destino externo, Secure Web Proxy cumple con la solicitud al destino.

Ventajas clave

Configurar mTLS de frontend en Secure Web Proxy proporciona los siguientes beneficios operativos y de seguridad:

  • Seguridad mejorada: Logra un acceso de confianza cero, ya que se requiere la autenticación mTLS de frontend para todo el tráfico saliente. Esto garantiza que solo las cargas de trabajo con una identidad verificada puedan establecer una conexión con el proxy para acceder a servicios externos.

  • Configuración simplificada de la carga de trabajo: Usa el modo de enrutamiento de proxy explícito para Secure Web Proxy y aprovecha la capacidad del proxy de interceptar y autenticar solicitudes.

  • Control detallado: Aplica políticas detalladas y basadas en la identidad para determinar a qué servicios externos puede acceder cada carga de trabajo específica.

Ejemplo de caso de uso: Valida la identidad de tus cargas de trabajo

En las industrias reguladas y con un alto nivel de cumplimiento, como el sector bancario, verificar la ubicación de red de una solicitud no es suficiente para evitar el acceso no autorizado a los datos. Si configuran mTLS de frontend en Secure Web Proxy, las organizaciones pueden adoptar un modelo de identidad verificado de forma criptográfica. Esto garantiza que cada carga de trabajo, ya sea una instancia de máquina virtual (VM) o un agente de IA, debe demostrar su identidad específica con un certificado de confianza.

Este enfoque permite que los administradores apliquen medidas de protección basadas en la identidad que protegen las rutas sensibles salientes. Por ejemplo, un banco puede garantizar que solo una carga de trabajo específica de procesamiento de pagos autenticada pueda acceder a una puerta de enlace financiera externa.

Configura la autenticación de mTLS del frontend para Secure Web Proxy

En esta sección, se describen los pasos para configurar la autenticación de mTLS del frontend para tu instancia de Secure Web Proxy.

Antes de comenzar

Crea los certificados raíz e intermedio

En esta sección, se muestra cómo usar OpenSSL para generar un certificado de autoridad de certificación raíz (el ancla de confianza) y un certificado de la AC intermedio opcional. Secure Web Proxy usa estos certificados para verificar los certificados de cliente que presentan las cargas de trabajo durante el proceso de protocolo de enlace mTLS de frontend. Este proceso manual está diseñado para entornos de prueba y desarrollo, y proporciona el ancla de confianza que Secure Web Proxy necesita para verificar los certificados de cliente.

Un certificado raíz se encuentra en la parte superior de la cadena de certificados, mientras que un certificado intermedio actúa como un puente en la cadena de confianza hacia la raíz. El certificado intermedio tiene una firma criptográfica del certificado raíz. Cuando Secure Web Proxy recibe un certificado de cliente, valida la identidad estableciendo una cadena de confianza desde el certificado de cliente hasta el ancla de confianza configurada.

Usa los siguientes comandos para crear los certificados raíz e intermedio. Si bien el certificado intermedio es opcional, esta configuración lo usa para firmar el certificado del cliente y mostrar una jerarquía de certificados de varios niveles.

  1. Crea un archivo de configuración de OpenSSL.

    cat > example.cnf << EOF
    [req]
    distinguished_name = empty_distinguished_name
    
    [empty_distinguished_name]
    # Kept empty to allow setting via -subj command-line argument.
    
    [ca_exts]
    basicConstraints=critical,CA:TRUE
    keyUsage=keyCertSign
    extendedKeyUsage=clientAuth
    EOF
    
  2. Crea un certificado raíz X.509 autofirmado (root.cert) y una clave privada (root.key).

    openssl req -x509 \
        -new -sha256 -newkey rsa:2048 -nodes \
        -days 3650 -subj '/CN=root' \
        -config example.cnf \
        -extensions ca_exts \
        -keyout root.key -out root.cert
    
  3. Crea la solicitud de firma de certificado (int.req) para el certificado intermedio.

    openssl req -new \
        -sha256 -newkey rsa:2048 -nodes \
        -subj '/CN=int' \
        -config example.cnf \
        -extensions ca_exts \
        -keyout int.key -out int.req
    
  4. Firma la solicitud de firma de certificado (CSR) para crear el certificado intermedio X.509 (int.cert).

    openssl x509 -req \
        -CAkey root.key -CA root.cert \
        -set_serial 1 \
        -days 3650 \
        -extfile example.cnf \
        -extensions ca_exts \
        -in int.req -out int.cert
    

Crea un certificado de cliente para realizar pruebas

Crea un certificado de hoja y una clave privada para la carga de trabajo del cliente de prueba. Durante el proceso de protocolo de enlace mTLS con tu instancia de Secure Web Proxy, el cliente proporciona este certificado de hoja para demostrar su identidad.

En el siguiente ejemplo, se usa OpenSSL para generar una clave de cliente y una CSR, y, luego, se firma la CSR con la clave de la CA intermedia que creaste en la sección Crea los certificados raíz e intermedio.

  1. Ejecuta el siguiente comando de OpenSSL para generar una clave privada RSA llamada client.key:

    openssl genpkey -algorithm RSA -out client.key
    
  2. Crea un archivo de configuración llamado client.cnf que especifique un nombre de DNS para el nombre alternativo del sujeto (SAN). Esto ayuda a garantizar que el certificado sea compatible con los requisitos de seguridad modernos.

    cat > client.cnf << EOF
    [req]
    distinguished_name = req_distinguished_name
    req_extensions = v3_req
    prompt = no
    
    [req_distinguished_name]
    CN = my-client.example.com
    
    [v3_req]
    keyUsage = critical, digitalSignature, keyEncipherment
    extendedKeyUsage = clientAuth
    subjectAltName = @alt_names
    
    [alt_names]
    DNS.1 = my-client.example.com
    
    EOF
    

    Puedes modificar los valores de CN y DNS.1 según sea necesario para las pruebas.

  3. Ejecuta el comando de solicitud de OpenSSL con la clave privada y el archivo de configuración que creaste para generar un archivo client.req.

    openssl req -new -key client.key -out client.req -config client.cnf
    
  4. Usa el comando x509 de OpenSSL para firmar la solicitud con tu certificado (int.cert) y clave (int.key) intermedios. Establece un período de validez, como 365 días, y asegúrate de que las extensiones de tu archivo de configuración se apliquen al archivo client.cert generado.

    openssl x509 -req -in client.req -CA int.cert -CAkey int.key \
      -set_serial 02 -days 365 -out client.cert \
      -extfile client.cnf -extensions v3_req
    

    Este proceso crea el archivo client.cert. Registra el valor que se usa en el SAN de DNS (por ejemplo, my-client.example.com) como la identidad del cliente. Puedes usar este valor para identificar la carga de trabajo cuando crees tus políticas de autorización de Secure Web Proxy.

Da formato a los certificados

Da formato a los certificados raíz e intermedios en variables de entorno para usarlos en el archivo trust_config.yaml.

  export ROOT_CERT=$(cat root.cert | sed 's/^[ ]*//g' | tr '\n' $ | sed 's/\$/\\n/g')
  export INTERMEDIATE_CERT=$(cat int.cert | sed 's/^[ ]*//g' | tr '\n' $ | sed 's/\$/\\n/g')

Crea un recurso de configuración de confianza

Una configuración de confianza representa tu infraestructura de clave pública (PKI) en el Administrador de certificados. La configuración de confianza indica a tu instancia de Secure Web Proxy en qué certificados de la autoridad certificadora (AC) confiar cuando se verifican los certificados del cliente que se presentan durante un handshake de mTLS de frontend.

Este recurso de configuración de confianza de ejemplo contiene un almacén de confianza con un solo almacén de confianza con un ancla de confianza (CA raíz) y una CA intermedia. Usa el contenido del certificado de las variables de entorno que creaste en la sección anterior Da formato a los certificados.

  1. Crea un archivo trust_config.yaml.

    cat << EOF > trust_config.yaml
    trustStores:
      TRUST_CONFIG_NAME:
        trustAnchors:
          - pemCertificate: |
            -----BEGIN CERTIFICATE-----
            <certificate content>
            -----END CERTIFICATE-----
        intermediateCAs:
          - pemCertificate: |
            -----BEGIN CERTIFICATE-----
            <certificate content>
            -----END CERTIFICATE-----
    
    EOF
    

    Reemplaza TRUST_CONFIG_NAME por el nombre de tu recurso de configuración de confianza.

  2. Importa el archivo trust config.yaml con el comando gcloud certificate-manager trust-configs import.

    gcloud certificate-manager trust-configs import TRUST_CONFIG_NAME\
      --source=trust_config.yaml \
      --location=LOCATION
    

    Reemplaza lo siguiente:

    • TRUST_CONFIG_NAME: Es el nombre de tu recurso de configuración de confianza.

    • LOCATION: Es la región en la que se almacena tu recurso de configuración de confianza.

Crea un recurso ServerTlsPolicy

Un recurso ServerTlsPolicy, también conocido como recurso de autenticación de cliente, define cómo Secure Web Proxy valida los certificados de cliente. Te permite especificar el modo de TLS del servidor y el recurso de configuración de confianza para la verificación de certificados.

El atributo clientValidationMode determina cómo se maneja la conexión cuando un cliente proporciona un certificado no válido o ningún certificado. Para obtener más información, consulta los modos de validación del cliente de mTLS de frontend.

Los valores del atributo clientValidationMode son los siguientes:

  • REJECT_INVALID: Secure Web Proxy solo permite las conexiones de los clientes que presentan un certificado válido firmado por una CA en tu configuración de confianza. Se rechazan las conexiones con certificados faltantes o no válidos.

  • ALLOW_INVALID_OR_MISSING_CLIENT_CERT: Secure Web Proxy permite la solicitud de conexión incluso si el certificado de cliente no es válido, no se puede validar con tu configuración de confianza o falta por completo.

Para crear un recurso ServerTlsPolicy, sigue estos pasos:

  1. Crea un archivo server_tls_policy.yaml. Elige una de las siguientes opciones para clientValidationMode:

    • Opción 1: ALLOW_INVALID_OR_MISSING_CLIENT_CERT
    name: SERVER_TLS_POLICY_NAME
    mtlsPolicy:
      clientValidationMode: ALLOW_INVALID_OR_MISSING_CLIENT_CERT
      clientValidationTrustConfig: projects/PROJECT_ID/locations/LOCATION/trustConfigs/TRUST_CONFIG_NAME
    
    • Opción 2: REJECT_INVALID
    name: SERVER_TLS_POLICY_NAME
    mtlsPolicy:
      clientValidationMode: REJECT_INVALID
      clientValidationTrustConfig: projects/PROJECT_ID/locations/LOCATION/trustConfigs/TRUST_CONFIG_NAME
    

    Reemplaza lo siguiente:

    • SERVER_TLS_POLICY_NAME: Nombre de tu recurso ServerTlsPolicy

    • PROJECT_ID: ID de tu proyecto de Google Cloud

    • TRUST_CONFIG_NAME: Es el nombre de tu recurso de configuración de confianza.

    • LOCATION: Es la región en la que se configuró tu instancia de Secure Web Proxy.

  2. Importa el recurso ServerTlsPolicy con el comando gcloud network-security server-tls-policies import.

    gcloud network-security server-tls-policies import SERVER_TLS_POLICY_NAME\
      --source=server_tls_policy.yaml \
      --location=LOCATION
    

    Reemplaza lo siguiente:

    • SERVER_TLS_POLICY_NAME: Nombre de tu recurso ServerTlsPolicy

    • LOCATION: Es la región en la que se configuró tu instancia de Secure Web Proxy.

  3. Opcional: Para enumerar todos tus recursos de ServerTlsPolicies, usa el comando gcloud network-security server-tls-policies list.

    gcloud network-security server-tls-policies list \
      --location=LOCATION
    

    Reemplaza LOCATION por la región en la que está configurada tu instancia de Proxy web seguro.

Asocia el recurso ServerTlsPolicy con tu instancia de Secure Web Proxy

  1. Agrega el recurso ServerTlsPolicy al archivo gateway.yaml de tu instancia de Secure Web Proxy.

    echo "serverTlsPolicy:
    //networksecurity.googleapis.com/projects/PROJECT_ID/locations/
    LOCATION/serverTlsPolicies/SERVER_TLS_POLICY_NAME"
    >> gateway.yaml
    

    Reemplaza lo siguiente:

    • PROJECT_ID: ID de tu proyecto de Google Cloud

    • LOCATION: Es la región en la que se configuró tu instancia de Secure Web Proxy.

  2. Importa la configuración de tu instancia de Secure Web Proxy desde el archivo gateway.yaml con el comando gcloud network-services gateways import.

    gcloud network-services gateways import GATEWAY_NAME\
        --source=gateway.yaml \
        --location=LOCATION
    

    Reemplaza lo siguiente:

    • GATEWAY_NAME: Es el nombre de tu instancia de Secure Web Proxy.

    • LOCATION: Es la región en la que se configuró tu instancia de Secure Web Proxy.

Configura políticas de autorización

Para obtener más información, consulta Cómo configurar políticas de autorización para el Proxy web seguro.

Logging

Para obtener más información, consulta Manejo de errores y registro de mTLS en el frontend.

Limitaciones

Para obtener más información, consulta las limitaciones de mTLS de frontend.

¿Qué sigue?