1. Introducción
El balanceo de cargas de Google Cloud se implementa en el perímetro de la red de Google, en los puntos de presencia (PoP) de Google de todo el mundo. El tráfico de usuario dirigido a un balanceador de cargas de proxy TCP ingresa al PoP que se encuentra más cerca del usuario. Luego, su carga se balancea a través de la red global de Google al backend más cercano que cuente con la capacidad disponible suficiente.
Cloud Armor es el sistema de detección de denegación de servicio distribuido y firewall de aplicación web (WAF) de Google. Cloud Armor está estrechamente acoplado con el balanceador de cargas de proxy TCP de Google Cloud y te permite interrogar el tráfico entrante en busca de solicitudes no deseadas. La función de limitación de frecuencia de este servicio te permite reducir el tráfico a los recursos del backend según el volumen de solicitudes y evita que el tráfico no deseado consuma recursos en tu red de nube privada virtual (VPC).
Los balanceadores de cargas de proxy TCP/SSL de Google Cloud te permiten usar un proxy para el tráfico de tipo TCP/ SSL entre tus servicios de backend.
En este lab, crearás un balanceador de cargas TCP/SSL con un servicio de backend y limitará el acceso al balanceador de cargas solo a un conjunto específico de clientes de usuario.
Qué aprenderás
- Cómo crear un balanceador de cargas de proxy TCP/SSL
- Cómo crear una política de seguridad de Cloud Armor
- Cómo crear una regla de lista de entidades rechazadas de IP para el balanceador de cargas de proxy TCP/SSL en Cloud Armor
- Cómo crear una regla de limitación de frecuencia para el balanceador de cargas de proxy TCP en Cloud Armor
- Cómo agregar la política de seguridad a un servicio de backend de balanceo de cargas TCP/SSL
Requisitos
- Conocimientos básicos de Google Compute Engine ( codelab)
- Conocimiento básico de redes y TCP/IP
- Conocimiento básico de la línea de comandos de Unix/Linux
- Es útil haber completado una visita por las herramientas de redes de GCP con Herramientas de redes en Google Cloud
2. Requisitos
Configuración del entorno de autoaprendizaje
- Accede a la consola de Cloud y crea un proyecto nuevo o reutiliza uno existente. Si aún no tienes una cuenta de Gmail o de Google Workspace, debes crear una.
Nota: Para acceder a la consola de Cloud con facilidad, memoriza su URL, que es console.cloud.google.com.
Recuerde el ID de proyecto, un nombre único en todos los proyectos de Google Cloud (el nombre anterior ya se encuentra en uso y no lo podrá usar). Más adelante en este codelab, se lo llamará PROJECT_ID.
Nota: Si usas una cuenta de Gmail, puedes dejar la ubicación predeterminada como Sin organización. Si usas una cuenta de Google Workspace, elige una ubicación adecuada para tu organización.
- A continuación, deberás habilitar la facturación en la consola de Cloud para usar los recursos de Google Cloud recursos.
Ejecutar este codelab no debería costar mucho, tal vez nada. Asegúrate de seguir las instrucciones de la sección “Realiza una limpieza”, en la que se indica cómo cerrar los recursos para que no se te facture más allá de este instructivo. Los usuarios nuevos de Google Cloud son aptos para participar en el programa Prueba gratuita de USD 300.
Inicia Cloud Shell
Si bien Google Cloud y Spanner se pueden operar de manera remota desde tu laptop, en este codelab usarás Google Cloud Shell, un entorno de línea de comandos que se ejecuta en la nube.
En GCP Console, haga clic en el ícono de Cloud Shell en la barra de herramientas superior derecha:
El aprovisionamiento y la conexión al entorno deberían tomar solo unos minutos. Cuando termine el proceso, debería ver algo como lo siguiente:
Esta máquina virtual está cargada con todas las herramientas de desarrollo que necesitarás. Ofrece un directorio principal persistente de 5 GB y se ejecuta en Google Cloud, lo que permite mejorar considerablemente el rendimiento de la red y la autenticación. Puedes realizar todo tu trabajo en este lab usando simplemente un navegador.
Antes de comenzar
En Cloud Shell, asegúrate de que tu ID del proyecto esté configurado.
gcloud config list project gcloud config set project [YOUR-PROJECT-NAME] PROJECT_ID=[YOUR-PROJECT-NAME] echo $PROJECT_ID
Habilita las APIs
Habilita todos los servicios necesarios
gcloud services enable compute.googleapis.com gcloud services enable logging.googleapis.com gcloud services enable monitoring.googleapis.com
3. Crea servicios de backend
Crea 2 instancias de la siguiente manera: Crea instance1-b1 en la zona us-central1-b.
gcloud compute instances create vm-1-b1 \ --image-family debian-9 \ --image-project debian-cloud \ --tags tcp-lb \ --zone us-central1-b \ --metadata startup-script="#! /bin/bash sudo apt-get update sudo apt-get install apache2 -y sudo sed -i '/Listen 80/c\Listen 110' /etc/apache2/ports.conf sudo service apache2 restart echo '<!doctype html><html><body><h1>This is VM1-b1 in central1-b</h1></body></html>' | tee /var/www/html/index.html EOF"
Crea la instancia 1-b2 en la zona us-central1-b.
gcloud compute instances create vm-1-b2 \ --image-family debian-9 \ --image-project debian-cloud \ --tags tcp-lb \ --zone us-central1-b \ --metadata startup-script="#! /bin/bash sudo apt-get update sudo apt-get install apache2 -y sudo sed -i '/Listen 80/c\Listen 110' /etc/apache2/ports.conf sudo service apache2 restart echo '<!doctype html><html><body><h1>This is VM1-b2 in central1-b</h1></body></html>' | tee /var/www/html/index.html EOF"
Crea un grupo de instancias vm-ig1.
gcloud compute instance-groups unmanaged create vm-ig1 --zone us-central1-b
Crea un puerto con nombre para el grupo de instancias. En este lab, usaremos el puerto 110.
gcloud compute instance-groups set-named-ports vm-ig1 \ --named-ports tcp 110:110 --zone us-central1-b
Agrega las instancias al grupo de instancias
gcloud compute instance-groups unmanaged add-instances vm-ig1 \ --instances vm-1-b1,vm-1-b2 --zone us-central1-b
4. Configura el balanceador de cargas
A continuación, crearemos una verificación de estado.
gcloud compute health-checks create tcp my-tcp-health-check --port 110
Crear un servicio de backend
gcloud compute backend-services create my-tcp-lb --global-health-checks --global \ --protocol TCP --health-checks my-tcp-health-check --timeout 5m --port-name tcp110
Agrega el grupo de instancias al servicio de backend
gcloud compute backend-services add-backend my-tcp-lb --global --instance-group \ vm-ig1 --instance-group-zone us-central1-b --balancing-mode UTILIZATION \ --max-utilization 0.8
Configura un proxy TCP de destino
gcloud compute target-tcp-proxies create my-tcp-lb-target-proxy --backend-service \ my-tcp-lb --proxy-header NONE
Reserva direcciones IPv4 estáticas globales
Usarás esta dirección IP para acceder a tu servicio con balanceo de cargas.
gcloud compute addresses create tcp-lb-static-ipv4 --ip-version=IPV4 --global
Configura reglas de reenvío globales para la dirección IP del LB.
gcloud compute forwarding-rules create my-tcp-lb-ipv4-forwarding-rule \ --global --target-tcp-proxy my-tcp-lb-target-proxy --address LB_STATIC_IPV4 \ --ports 110
5. Crea una regla de firewall para el balanceador de cargas del proxy TCP
gcloud compute firewall-rules create allow-tcplb-and-health \ --source-ranges 130.211.0.0/22,35.191.0.0/16 \ --target-tags tcp-lb \ --allow tcp:110
Una vez que crees el balanceador de cargas, pruébalo con el siguiente comando:
Curl LB_IP:110
A continuación, crea VMs para la validación del rechazo de acceso al LB
Debes crear 2 instancias, cada una con una dirección IP pública y con los nombres test-server1 y test-server2.
6. Crea una política de seguridad en Cloud Armor
En esta sección, crearás una política de seguridad de backend y 2 reglas en la política en Cloud Armor.
La primera regla impedirá que un conjunto limitado de IPs acceda al balanceador de cargas TCP configurando una política de seguridad para rechazar ciertas IPs, y la segunda regla realizará el límite de frecuencia.
- En Cloud Shell(consulta "Cómo iniciar Cloud Shell" en "Configuración y requisitos" para obtener instrucciones sobre cómo usar Cloud Shell), crea una política de seguridad de servicio de backend llamada rate-limit-and-deny-tcp de la siguiente manera:
gcloud compute security-policies create rate-limit-and-deny-tcp \ --description "policy for tcp proxy rate limiting and IP deny"
Agrega reglas a la política de seguridad
A continuación, agrega una regla de lista de entidades rechazadas a la política de Cloud Armor "rate-limit-and-deny-tcp".
gcloud compute security-policies rules create 1000 --action deny --security-policy \ rate-limit-and-deny-tcp --description "deny test-server1" --src-ip-ranges \ "enter-test-server-1ip-here"
Agrega una regla de limitación de frecuencia a la política de seguridad de Cloud Armor "rate-limit-and-deny-tcp".
gcloud compute security-policies rules create 3000 \ --security-policy=rate-limit-and-deny-tcp \ --expression="true" --action=rate-based-ban --rate-limit-threshold-count=5 \ --rate-limit-threshold-interval-sec=60 --ban-duration-sec=300 \ --conform-action=allow --exceed-action=deny-404 --enforce-on-key=IP
Adjunta la política al servicio de backend del proxy TCP:
Ejecuta el siguiente comando para asegurarte de que la política de seguridad esté adjunta al servicio de backend del proxy TCP.
gcloud compute backend-services update my-tcp-lb --security-policy \ rate-limit-and-deny-tcp
Habilita el registro en el balanceador de cargas del proxy TCP
gcloud beta compute backend-services update my-tcp-lb \ --enable-logging --logging-sample-rate=1
7. Valida la regla de la lista de entidades denegadas
Para validar la regla de lista de entidades denegadas, accede al servidor de prueba cuya IP se especificó en la regla de lista de entidades denegadas y ejecuta el siguiente comando:
Curl LB_IP:110
Es posible que las solicitudes inmediatas proporcionen una respuesta del LB, pero espera hasta que se rechace o se descarte la solicitud de curl y, luego, consulta los registros en Cloud Logging para verificar la entrada de registro de la regla de denegación de IP que se activa.
Ve a Registro de Cloud y, en Recursos, selecciona el tipo de recurso como "tcp_ssl_proxy_rule" y establece el destino de backend como "my-tcp-lb".
Con los recursos definidos para filtrar, podemos validar que la regla de denegación de IP esté vigente a partir del valor de PRIORITY de 1000 en la entrada de registro y que la acción configurada "DENY" esté vigente, ya que ambas se incluyeron en la regla de denegación y la IP que se deniega, como se muestra a continuación.
8. Valida la regla de límite de frecuencia
Para validar que la regla de límite de frecuencia esté vigente, envía muchas solicitudes en un período breve que supere el umbral definido (5 solicitudes por minuto).
Una vez que lo hayas hecho, haz clic en Ver registros en el servicio de Cloud Armor y se te dirigirá a Cloud Logging, donde puedes filtrar los registros por balanceador de cargas para ver los registros de Cloud Armor a medida que llegan.
Una entrada de limitación de frecuencia debe ser como la que se muestra en la siguiente captura de pantalla. Podemos validar que la regla de limitación de frecuencia esté vigente a partir del valor de PRIORITY de 3000 en la entrada de registro y de la acción configurada, la acción "RATE BASED BAN" está vigente según se indica en la regla de limitación de frecuencia.
9. Limpieza del entorno
Asegúrate de limpiar la infraestructura creada para evitar los costos de ejecución de la infraestructura sin usar.
La forma más rápida es borrar todo el proyecto en GCP para asegurarte de que no haya recursos colgantes sin supervisión.Sin embargo, borra los recursos individuales con los siguientes comandos:
El balanceador de cargas del proxy TCP
gcloud compute target-tcp-proxies delete my-tcp-lb
El grupo de instancias
gcloud compute instance-groups unmanaged delete vm-ig1
Las 2 instancias de VM de prueba creadas
gcloud compute instances delete Instance_name --zone=instance_zone
El servicio de backend
gcloud compute backend-services delete BACKEND_SERVICE_NAME
Las reglas de Cloud Armor dentro de la política
gcloud compute security-policies rules delete 1000 \ --security-policy=rate-limit-and-deny-tcp && gcloud compute security-policies rules delete 3000 \ --security-policy=rate-limit-and-deny-tcp
La política de seguridad de Cloud Armor
gcloud compute security-policies delete rate-limit-and-deny-tcp