Puedes configurar políticas de seguridad de Google Cloud Armor para proteger tus servicios de ataques web y de denegación de servicio (DoS). Estas políticas usan la infraestructura global de Google para proteger tus aplicaciones y controlar el tráfico que fluye a través de los balanceadores de cargas.
En este documento, se proporcionan ejemplos de configuraciones de políticas de seguridad para varios tipos de balanceadores de cargas.
Configura políticas de seguridad para balanceadores de cargas de aplicaciones externos
Para configurar las políticas de seguridad de Google Cloud Armor para permitir o rechazar el tráfico a un balanceador de cargas de aplicaciones externo global o a uno clásico, haz lo siguiente :
- Crea una política de seguridad de Cloud Armor.
- Agrega reglas basadas en direcciones IP, expresiones personalizadas o conjuntos de expresiones preconfigurados.
- Vincula la política de seguridad a un servicio de backend.
- Actualiza la política de seguridad según sea necesario.
En este ejemplo, crearás dos políticas de seguridad de Cloud Armor y las aplicarás a diferentes servicios de backend.
En el ejemplo, estas son las políticas de seguridad de Cloud Armor:
mobile-clients-policyse aplica a usuarios externos de tus servicios degames.internal-users-policyse aplica al equipo detest-networkde 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 se aplica a las instancias en todas las regiones. En este ejemplo, 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
Sigue los pasos de esta sección para crear la configuración de ejemplo analizada en la sección anterior.
Console
Configura la política para usuarios externos:
En la consola de Google Cloud , ve a la página Políticas de Cloud Armor.
Haz clic en Crear políticas.
En el campo Nombre, ingresa
mobile-clients-policy.En el campo Descripción, ingresa
Policy for external users.En Acción de la regla predeterminada, selecciona Rechazar.
En Estado de rechazo, selecciona 404 (No encontrado).
Haga clic en Siguiente paso.
Agrega más reglas:
- Haga clic en Agregar regla.
- En el campo Descripción, ingresa
allow traffic from 192.0.2.0/24. - En Modo, selecciona Modo básico (solo direcciones IP o rangos de IP).
- En el campo Coincidencia, ingresa
192.0.2.0/24. - En Acción, selecciona Permitir.
- En el campo Prioridad, ingresa
1000. - Haga clic en Listo.
- Haga clic en Siguiente paso.
Aplica políticas a los objetivos:
- Haga clic en Agregar destino.
- En la lista Destino, selecciona un objetivo.
- Haga clic en Listo.
- Haz clic en Crear política.
De manera opcional, habilita la Protección adaptable de Google Cloud Armor:
- Para habilitar la Protección adaptable, selecciona Habilitar.
Configura la política para usuarios internos:
- Haz clic en Crear políticas.
- En el campo Nombre, ingresa
internal-users-policy. - En el campo Descripción, ingresa
Policy for internal test users. - En Acción de la regla predeterminada, selecciona Rechazar.
- En Estado de rechazo, selecciona 502 (puerta de enlace incorrecta).
- Haga clic en Siguiente paso.
Agrega más reglas:
- Haga clic en Agregar regla.
- En el campo Descripción, ingresa
allow traffic from 198.51.100.0/24. - En Modo, selecciona Modo básico (solo direcciones IP o rangos de IP).
- En el campo Coincidencia, ingresa
198.51.100.0/24. - En Acción, selecciona Permitir.
- En Solo vista previa, selecciona la casilla de verificación Habilitar.
- En el campo Prioridad, ingresa
1000. - Haga clic en Listo.
- Haga clic en Siguiente paso.
Aplica políticas a los objetivos:
- Haga clic en Agregar destino.
- En la lista Destino, selecciona un objetivo.
- Haga clic en Listo.
- Haz clic en Crear política.
gcloud
Crea las políticas de seguridad de 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"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"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"Adjunta las políticas de seguridad a los servicios de backend:
gcloud compute backend-services update games \ --security-policy mobile-clients-policygcloud compute backend-services update test-network \ --security-policy internal-users-policyDe manera opcional, habilita la protección adaptable:
gcloud compute security-policies update mobile-clients-policy \ --enable-layer7-ddos-defensegcloud compute security-policies update internal-users-policy \ --enable-layer7-ddos-defense
Crear políticas de seguridad
Usa la Google Cloud consola o gcloud CLI para crear políticas de seguridad. En estas instrucciones, se supone que configuras políticas para un balanceador de cargas y un servicio de backend existentes. Para ver un ejemplo, consulta Crea el ejemplo.
Console
Para crear reglas y vincular una política de seguridad a un servicio de backend, haz lo siguiente:
En la consola de Google Cloud , ve a la página Políticas de Cloud Armor.
Haz clic en Crear políticas.
En el campo Nombre, ingresa el nombre de tu política.
Ingresa una descripción de la política (opcional).
En Tipo de política, elige Política de seguridad de backend o Política de seguridad perimetral.
En Acción de la regla predeterminada, selecciona Permitir para permitir el acceso de forma predeterminada o selecciona Rechazar para rechazar el acceso de forma predeterminada.
La regla predeterminada es la de menor prioridad que tiene efecto solo si no se aplica ninguna otra regla.
Si configuras una regla de rechazo, selecciona un código de respuesta de rechazo. Cloud Armor devuelve este código de estado si se rechaza una solicitud.
Haz clic en Próximo paso.
Agrega más reglas:
- Haga clic en Agregar regla.
- Ingresa una descripción para la regla (opcional).
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.
En el campo Coincidencia, especifica las condiciones a las que 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 para evaluar las solicitudes entrantes. Consulta los atributos del lenguaje de reglas personalizadas.
En Acción, selecciona Permitir o Rechazar.
Para habilitar el modo de vista previa, selecciona Habilitar. En el modo de vista previa, Cloud Armor registra el efecto de la regla sin aplicarla.
Ingresa la Prioridad de la regla (de 0 a 2,147,483,646). Consulta Orden de evaluación de la regla.
Haz clic en Listo.
Para agregar más reglas, haz clic en Agregar regla. De lo contrario, haz clic en Siguiente paso.
Aplica políticas a los objetivos:
- Haga clic en Agregar destino.
- En la lista Destino, selecciona un objetivo.
- Para agregar más destinos, haz clic en Agregar destino.
- Haga clic en Listo.
- Haz clic en Crear política.
gcloud
Para crear una política de seguridad de Cloud Armor, usa el comando
gcloud compute security-policies create.Usa la marca
--typepara especificarCLOUD_ARMOR(backend) oCLOUD_ARMOR_EDGE(borde). Si omites la marca, Cloud Armor crea una política de seguridad de backend: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: El nombre de la política de seguridadFILE_FORMAT: Es el formato del archivo especificado en--file-name. Especificayamlojson.DESCRIPTION: La descripción de la política de seguridadFILE_NAME: Es el nombre de un archivo que contiene una exportación en formato YAML o JSON de la política de seguridad.
Con el siguiente comando, se actualiza una política, 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=VERBOSEPara 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 lo siguiente:
PRIORITY: Es la prioridad de la regla. Consulta Orden de evaluación de reglas.POLICY_NAME: El nombre de tu política de seguridadDESCRIPTION: una descripción de la reglaIP_RANGE,...: Es una lista separada por comas de rangos de direcciones IP.EXPRESSION: Una expresión del lenguaje de reglas de Cloud Armor
Por ejemplo, el siguiente comando agrega una regla para bloquear el tráfico de
192.0.2.0/24y198.51.100.0/24. La regla tiene una prioridad de 1,000: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
--previewagregada, la regla se agrega a la política, pero no se aplica, y cualquier tráfico que active 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" \ --previewUsa la marca
--expressionpara especificar una condición personalizada. Consulta los atributos del lenguaje de reglas personalizadas. El siguiente comando agrega una regla para permitir el tráfico desde la dirección IP1.2.3.4que contiene la cadenaexampleen el encabezadoUser-Agent:gcloud 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
AUque 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('/example_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-idcontiene 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 "evaluatePreconfiguredWaf('sqli-v422-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 "evaluatePreconfiguredWaf('sourceiplist-fastly')" \ --action "allow"
Configura políticas de seguridad para balanceadores de cargas de aplicaciones externos regionales
Sigue los pasos de esta sección para configurar políticas de seguridad de Cloud Armor con alcance regional para los balanceadores de cargas de aplicaciones externos regionales.
Protege las cargas de trabajo con balanceo de cargas regional
Sigue los pasos de esta sección para configurar una política de seguridad para un servicio de backend con alcance regional:
Crea una política de seguridad con alcance regional.
gcloud compute security-policies create POLICY_NAME \ --type=CLOUD_ARMOR \ --region=REGIONReemplaza lo siguiente:
POLICY_NAME: El nombre de la política de seguridadREGION: la región en la que se creará la política de seguridad
Vincula la política de seguridad con alcance regional a un servicio de backend con alcance regional. Reemplaza
BACKEND_NAMEpor el nombre de tu servicio de backend existente con alcance regional.gcloud compute backend-services update BACKEND_NAME \ --security-policy=POLICY_NAME \ --region=REGION
Ejemplo: Aplica una política de seguridad con alcance regional
En este ejemplo, como administrador de seguridad, deseas satisfacer un requisito de residencia que exige que todas las cargas de trabajo de backend y las reglas del WAF se implementen en una región específica. Supongamos que ya cumpliste con las siguientes condiciones:
- Creaste servicios de backend con carga balanceada y alcance regional en la región.
- Inhabilitaste las políticas de seguridad existentes con alcance global en tu implementación.
- 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 del WAF y otras reglas avanzadas a tu política con los siguientes comandos:
Agrega una regla del WAF a la política:
gcloud compute security-policies rules create 1000 --action=deny-404 \ --expression="evaluatePreconfiguredWaf('xss-v422-stable', ['owasp-crs-v042200-id941100-xss', 'owasp-crs-v042200-id941160-xss'])" \ --security-policy=POLICY_NAME \ --region=REGIONReemplaza lo siguiente:
POLICY_NAME: El nombre de la política de seguridadREGION: La región de la política de seguridad
Agrega una regla avanzada a la política:
gcloud compute security-policies rules create 1000 --action=allow \ --expression="has(request.headers['cookie']) && request.headers['cookie'].contains('80=EXAMPLE')" \ --security-policy=POLICY_NAME \ --region=REGIONAgrega una regla de límite de frecuencia a la política:
gcloud 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=REGIONReemplaza lo siguiente:
POLICY_NAME: El nombre de la política de seguridadREGION: La región de la política de seguridad
¿Qué sigue?
- Crea y visualiza políticas de seguridad de Cloud Armor
- Obtén más información sobre la limitación de frecuencia.