Ejemplos de políticas de seguridad

En esta página, se describen ejemplos de configuración de políticas de seguridad para diferentes tipos de balanceadores de cargas y políticas de seguridad.

Configura políticas de seguridad para balanceadores de cargas de aplicaciones externos

A continuación, se indican los pasos de alto nivel para configurar las políticas de seguridad de Google Cloud Armor a fin de habilitar reglas que permitan o denieguen el tráfico al balanceador de cargas de aplicaciones externo global o al balanceador de cargas de aplicaciones clásico:

  1. Crea una política de seguridad de Google Cloud Armor.
  2. Agrega reglas a la política de seguridad en función de listas de direcciones IP, expresiones personalizadas o conjuntos de expresiones preconfigurados.
  3. Adjunta la política de seguridad a un servicio de backend del balanceador de cargas de aplicaciones externo global o el balanceador de cargas de aplicaciones clásico para el que deseas controlar el acceso.
  4. Actualiza la política de seguridad según sea necesario.

En el siguiente ejemplo, debes crear dos políticas de seguridad de Google Cloud Armor y aplicarlas a diferentes servicios de backend.

Ejemplo en el que dos políticas de seguridad se aplican a diferentes servicios de backend.
Ejemplo en el que se aplican dos políticas de seguridad a diferentes servicios de backend (haz clic para ampliar).

En el ejemplo, estas son las políticas de seguridad de Google Cloud Armor:

  • mobile-clients-policy se aplica a usuarios externos de tus servicios de games.
  • internal-users-policy se aplica al equipo de test-network de tu organización.

Aplica mobile-clients-policy al servicio de games, cuyo servicio de backend se llama games, y aplica internal-users-policy al servicio interno de test para el equipo de pruebas, cuyo servicio de backend correspondiente se llama test-network.

Si las instancias de backend para un servicio de backend están en varias regiones, la política de seguridad de Google Cloud Armor asociada con el servicio se aplica a las instancias en todas las regiones. En el ejemplo anterior, la política de seguridad mobile-clients-policy se aplica a las instancias 1, 2, 3 y 4 en us-central y a las instancias 5 y 6 en us-east.

Crea el ejemplo

Usa estas instrucciones para crear la configuración de ejemplo analizada en la sección anterior.

Console

Configura la política para usuarios externos:

  1. En la consola de Google Cloud, ve a la página Políticas de Google Cloud Armor.

    Ir a las políticas de Google Cloud Armor

  2. Haz clic en Crear políticas.

  3. En el campo Nombre, ingresa mobile-clients-policy.

  4. En el campo Descripción, ingresa Policy for external users.

  5. En Acción de la regla predeterminada, selecciona Rechazar.

  6. En Estado de rechazo, selecciona 404 (No encontrado).

  7. Haga clic en Siguiente paso.

Agrega más reglas:

  1. Haga clic en Agregar regla.
  2. En el campo Descripción, ingresa allow traffic from 192.0.2.0/24.
  3. En Modo, selecciona Modo básico (solo direcciones IP o rangos de IP).
  4. En el campo Coincidencia, ingresa 192.0.2.0/24.
  5. En Acción, selecciona Permitir.
  6. En el campo Prioridad, ingresa 1000.
  7. Haz clic en Listo.
  8. Haga clic en Siguiente paso.

Aplica políticas a los objetivos:

  1. Haga clic en Agregar destino.
  2. En la lista Destino, selecciona un objetivo.
  3. Haz clic en Listo.
  4. Haz clic en Crear política.

De manera opcional, habilita la protección adaptable de Google Cloud Armor:

  1. Para habilitar la protección adaptable, marca la casilla de verificación Habilitar.

Configura la política para usuarios internos:

  1. Haz clic en Crear políticas.
  2. En el campo Nombre, ingresa internal-users-policy.
  3. En el campo Descripción, ingresa Policy for internal test users.
  4. En Acción de la regla predeterminada, selecciona Rechazar.
  5. En Estado de rechazo, selecciona 502 (puerta de enlace incorrecta).
  6. Haga clic en Siguiente paso.

Agrega más reglas:

  1. Haga clic en Agregar regla.
  2. En el campo Descripción, ingresa allow traffic from 198.51.100.0/24.
  3. En Modo, selecciona Modo básico (solo direcciones IP o rangos de IP).
  4. En el campo Coincidencia, ingresa 198.51.100.0/24.
  5. En Acción, selecciona Permitir.
  6. En Solo vista previa, selecciona la casilla de verificación Habilitar.
  7. En el campo Prioridad, ingresa 1000.
  8. Haz clic en Listo.
  9. Haga clic en Siguiente paso.

Aplica políticas a los objetivos:

  1. Haga clic en Agregar destino.
  2. En la lista Destino, selecciona un objetivo.
  3. Haz clic en Listo.
  4. Haz clic en Crear política.

gcloud

  1. Crea las políticas de seguridad de Google Cloud Armor:

    gcloud compute security-policies create mobile-clients-policy \
        --description "policy for external users"
    
    gcloud compute security-policies create internal-users-policy \
        --description "policy for internal test users"
    
  2. Actualiza las reglas predeterminadas de las políticas de seguridad para rechazar el tráfico:

    gcloud compute security-policies rules update 2147483647 \
        --security-policy mobile-clients-policy \
        --action "deny-404"
    
    gcloud compute security-policies rules update 2147483647 \
        --security-policy internal-users-policy \
        --action "deny-502"
    
  3. Agrega reglas a las políticas de seguridad:

    gcloud compute security-policies rules create 1000 \
        --security-policy mobile-clients-policy \
        --description "allow traffic from 192.0.2.0/24" \
        --src-ip-ranges "192.0.2.0/24" \
        --action "allow"
    
    gcloud compute security-policies rules create 1000 \
        --security-policy internal-users-policy \
        --description "allow traffic from 198.51.100.0/24" \
        --src-ip-ranges "198.51.100.0/24" \
        --action "allow"
    
  4. Adjunta las políticas de seguridad a los servicios de backend:

    gcloud compute backend-services update games \
        --security-policy mobile-clients-policy
    
    gcloud compute backend-services update test-network \
        --security-policy internal-users-policy
    
  5. De manera opcional, habilita la protección adaptable:

    gcloud compute security-policies update mobile-clients-policy \
        --enable-layer7-ddos-defense
    
    gcloud compute security-policies update internal-users-policy \
        --enable-layer7-ddos-defense
    

Crea políticas de seguridad

Puedes usar la consola de Google Cloud o gcloud CLI para crear políticas de seguridad. En las instrucciones de esta sección, se supone que configuras políticas de seguridad para aplicarlas a un balanceador de cargas de aplicaciones externo global existente o a un balanceador de cargas de aplicaciones clásico y a un servicio de backend. Para ver un ejemplo de cómo completar los campos, consulta Crea el ejemplo.

Console

Crea reglas y políticas de seguridad de Google Cloud Armor y vincula una política de seguridad a un servicio de backend:

  1. En la consola de Google Cloud, ve a la página Políticas de Google Cloud Armor.

    Ir a las políticas de Google Cloud Armor

  2. Haz clic en Crear políticas.

  3. En el campo Nombre, ingresa el nombre de tu política.

  4. Ingresa una descripción de la política (opcional).

  5. En Tipo de política, elige Política de seguridad de backend o Política de seguridad perimetral.

  6. En Acción de la regla predeterminada, selecciona Permitir para una regla predeterminada que permite el acceso o selecciona Denegar para una regla predeterminada que prohíbe el acceso a una dirección IP o a un rango de direcciones IP.

    La regla predeterminada es la de menor prioridad que tiene efecto solo si no se aplica ninguna otra regla.

  7. Si configuras una regla para rechazar, selecciona un mensaje Rechazar estado. Este es el mensaje de error que muestra Google Cloud Armor si un usuario sin acceso intenta acceder.

  8. Sin importar el tipo de regla que crees, haz clic en Siguiente paso.

Agrega más reglas:

  1. Haga clic en Agregar regla.
  2. Ingresa una descripción para la regla (opcional).
  3. Selecciona el modo:

    • Modo básico: permite o rechaza el tráfico en función de los rangos o las direcciones IP.
    • Modo avanzado: permite o rechaza el tráfico según las expresiones de reglas.
  4. En el campo Coincidencia, especifica las condiciones bajo las cuales se aplica la regla:

    • Modo básico: ingresa las direcciones IP o los rangos de IP para que coincidan con la regla.
    • Modo avanzado: ingresa una expresión o subexpresiones que se deben evaluar en las solicitudes entrantes. Para obtener información sobre cómo escribir las expresiones, consulta Configura atributos de lenguaje de reglas personalizadas.
  5. En Acción, selecciona Permitir o Rechazar para permitir o denegar el tráfico si la regla coincide.

  6. Para habilitar el modo de vista previa, selecciona la casilla de verificación Habilitar. En el modo de vista previa, puedes ver cómo se comporta la regla, pero esta no está habilitada.

  7. Ingresa la Prioridad de la regla. Puede ser cualquier número entero positivo entre 0 y 2,147,483,646 inclusive. Para obtener más información sobre el orden de evaluación, consulta Orden de evaluación de la regla.

  8. Haz clic en Listo.

  9. Para agregar más reglas, haz clic en Agregar regla y repite los pasos anteriores. De lo contrario, haz clic en Siguiente paso.

Aplica políticas a los objetivos:

  1. Haga clic en Agregar destino.
  2. En la lista Destino, selecciona un objetivo.
  3. Para agregar más destinos, haz clic en Agregar destino.
  4. Haga clic en Listo.
  5. Haz clic en Crear política.

gcloud

  1. Para crear una política de seguridad de Google Cloud Armor nueva, usa el comando gcloud compute security-policies create.

    En el campo type, usa CLOUD_ARMOR para crear una política de seguridad de backend o CLOUD_ARMOR_EDGE para crear una política de seguridad perimetral. La marca type es opcional. Si no se especifica ningún tipo, se crea una política de seguridad de backend de forma predeterminada:

    gcloud compute security-policies create NAME \
       [--type=CLOUD_ARMOR|CLOUD_ARMOR_EDGE] \
       [--file-format=FILE_FORMAT | --description=DESCRIPTION] \
       [--file-name=FILE_NAME]
    
    

    Reemplaza lo siguiente:

    • NAME: Es el nombre de la política de seguridad.
    • DESCRIPTION: Es la descripción de la política de seguridad.

    Con el siguiente comando, se actualiza la política que creaste antes, se activa el análisis de JSON y se cambia el nivel de registro a VERBOSE:

    gcloud compute security-policies update my-policy \
        --json-parsing=STANDARD \
        --log-level=VERBOSE
    
  2. Para agregar reglas a una política de seguridad, usa el comando gcloud compute security-policies rules create PRIORITY.

    gcloud compute security-policies rules create PRIORITY  \
        [--security-policy POLICY_NAME] \
        [--description DESCRIPTION] \
        --src-ip-ranges IP_RANGE,... | --expression EXPRESSION \
        --action=[ allow | deny-403 | deny-404 | deny-502 ] \
        [--preview]
    

    Reemplaza PRIORITY por la prioridad asignada a la regla en la política. Para obtener información sobre cómo funciona la prioridad de las reglas, consulta Orden de evaluación de reglas.

    Por ejemplo, con el siguiente comando, se agrega una regla para bloquear el tráfico de los rangos de direcciones IP 192.0.2.0/24 y 198.51.100.0/24. La regla tiene una prioridad de 1, 000 y es una regla en una política llamada my-policy.

    gcloud compute security-policies rules create 1000 \
        --security-policy my-policy \
        --description "block traffic from 192.0.2.0/24 and 198.51.100.0/24" \
        --src-ip-ranges "192.0.2.0/24","198.51.100.0/24" \
        --action "deny-403"
    

    Con la marca --preview agregada, la regla se agrega a la política, pero no se aplica, y el tráfico que activa la regla solo se registra.

    gcloud compute security-policies rules create 1000 \
        --security-policy my-policy \
        --description "block traffic from 192.0.2.0/24 and 198.51.100.0/24" \
        --src-ip-ranges "192.0.2.0/24","198.51.100.0/24" \
        --action "deny-403" \
        --preview
    

    Usa la marca --expression para especificar una condición personalizada. Para obtener más información, consulta Configura atributos de lenguaje de reglas personalizadas. El siguiente comando agrega una regla para permitir el tráfico desde la dirección IP 1.2.3.4 y contiene la string example en el encabezado del usuario-agente:

    gcloud beta compute security-policies rules create 1000 \
        --security-policy my-policy \
        --expression "inIpRange(origin.ip, '1.2.3.4/32') && has(request.headers['user-agent']) && request.headers['user-agent'].contains('example')" \
        --action allow \
        --description "Block User-Agent 'example'"
    

    Con el siguiente comando, se agrega una regla para bloquear solicitudes si la cookie de la solicitud contiene un valor específico:

    gcloud compute security-policies rules create 1000 \
        --security-policy my-policy \
        --expression "has(request.headers['cookie']) && request.headers['cookie'].contains('cookie_name=cookie_value')" \
        --action "deny-403" \
        --description "Cookie Block"
    

    Con el siguiente comando, se agrega una regla para bloquear solicitudes de la región AU:

    gcloud compute security-policies rules create 1000 \
        --security-policy my-policy \
        --expression "origin.region_code == 'AU'" \
        --action "deny-403" \
        --description "AU block"
    

    Con el siguiente comando, se agrega una regla para bloquear las solicitudes de la región AU que no están en el rango de IP especificado:

    gcloud compute security-policies rules create 1000 \
        --security-policy my-policy \
        --expression "origin.region_code == 'AU' && !inIpRange(origin.ip, '1.2.3.0/24')" \
        --action "deny-403" \
        --description "country and IP block"
    

    Con el siguiente comando, se agrega una regla para bloquear solicitudes con un URI que coincide con una expresión regular:

    gcloud compute security-policies rules create 1000 \
        --security-policy my-policy \
        --expression "request.path.matches('/bad_path/')" \
        --action "deny-403" \
        --description "regex block"
    

    Con el siguiente comando, se agrega una regla para bloquear solicitudes si el valor decodificado en Base64 del encabezado de user-id contiene un valor específico:

    gcloud compute security-policies rules create 1000 \
        --security-policy my-policy \
        --expression "has(request.headers['user-id']) && request.headers['user-id'].base64Decode().contains('myValue')" \
        --action "deny-403" \
        --description "country and IP block"
    

    Con el siguiente comando, se agrega una regla que usa un conjunto de expresiones preconfiguradas para mitigar los ataques de SQLi:

    gcloud compute security-policies rules create 1000 \
        --security-policy my-policy \
        --expression "evaluatePreconfiguredExpr('sqli-stable')" \
        --action "deny-403"
    

    Con el siguiente comando, se agrega una regla que usa un conjunto de expresiones preconfiguradas para permitir el acceso desde todas las direcciones IP en una lista de direcciones IP con nombre:

    gcloud compute security-policies rules create 1000 \
        --security-policy my-policy \
        --expression "evaluatePreconfiguredExpr('sourceiplist-fastly')" \
        --action "allow"
    

Configura políticas de seguridad para balanceadores de cargas de aplicaciones externos regionales

En esta sección, se incluye información sobre la configuración de las políticas de seguridad de Google Cloud Armor con alcance regional para balanceadores de cargas de aplicaciones externos regionales.

Protege las cargas de trabajo con balanceo de cargas regional

Sigue estos pasos para configurar una política de seguridad y proteger tu servicio de backend con alcance regional:

  1. Crea una política de seguridad con alcance regional.

    gcloud beta compute security-policies create POLICY_NAME \
       --type=CLOUD_ARMOR \
       --region=REGION
    
  2. Vincula la política de seguridad con alcance regional a un servicio de backend con alcance regional. Reemplaza BACKEND_NAME por el nombre de tu servicio de backend con alcance regional existente.

    gcloud beta compute backend-services update BACKEND_NAME \
       --security-policy=POLICY_NAME \
       --region=REGION
    

Aplica una política de seguridad de Google Cloud Armor con alcance regional

Considera un ejemplo en el que eres un administrador de seguridad que desea cumplir con un requisito de residencia de que todas tus cargas de trabajo de backend y reglas de WAF se implementen en una región específica. Supongamos que hiciste lo siguiente de antemano:

  1. Creaste servicios de backend con balanceo de cargas con alcance regional en la región.
  2. Inhabilitaste cualquier política de seguridad existente con alcance global en tu implementación.
  3. Creaste y adjuntaste una política de seguridad con alcance regional en la misma región (como en la sección anterior).

Puedes agregar reglas de WAF y otras reglas avanzadas a tu política y, a la vez, cumplir con el requisito con los siguientes comandos de ejemplo:

  • Agrega una regla de WAF a la política:

    gcloud beta compute security-policies rules create 1000 --action=deny-404 \
      --expression="evaluatePreconfiguredExpr('xss-v33-stable', ['owasp-crs-v030301-id941100-xss', 'owasp-crs-v030301-id941160-xss'])" \
      --security-policy=POLICY_NAME \
      --region=REGION
    
  • Agrega una regla avanzada a la política:

    gcloud beta compute security-policies rules create 1000 --action=allow \
      --expression="has(request.headers['cookie']) && request.headers['cookie'].contains('80=EXAMPLE')" \
      --security-policy=POLICY_NAME \
      --region=REGION
    
  • Agrega una regla de límite de frecuencia a la política:

    gcloud beta compute security-policies rules create 1000 --action=throttle \
      --src-ip-ranges="1.1.1.1/32" \
      --rate-limit-threshold-count=1000 \
      --rate-limit-threshold-interval-sec=120 \
      --conform-action="allow" \
      --exceed-action="deny-429" \
      --enforce-on-key=IP \
      --ban-duration-sec=999 \
      --ban-threshold-count=5000 \
      --ban-threshold-interval-sec=60 \
      --security-policy=POLICY_NAME \
      --region=REGION
    

¿Qué sigue?