gem-netsec-cloud-armor

Active Google Cloud Shell
Google Cloud Shell es una máquina virtual que cuenta con herramientas de desarrollo. Ofrece un directorio principal persistente de 5 GB y se ejecuta en Google Cloud.
Google Cloud Shell proporciona acceso de línea de comandos a sus recursos de GCP.
-
En GCP Console, en la barra de herramientas superior derecha, haga clic en el botón Abrir Cloud Shell.

-
Haga clic en Continue (Continuar):

Toma unos minutos aprovisionar y conectarse con el entorno. Cuando está conectado, ya está autenticado y el proyecto está configurado en su PROJECT_ID . Por ejemplo:

gcloud es la herramienta de línea de comandos para Google Cloud Platform. Viene preinstalada en Cloud Shell y es compatible con la función “tab-completion”.
Puede mostrar el nombre de la cuenta activa con este comando:
gcloud auth list
Resultado:
ACTIVE: *
ACCOUNT: student-01-xxxxxxxxxxxx@qwiklabs.net
To set the active account, run:
$ gcloud config set account `ACCOUNT`
Puede mostrar el ID del proyecto con este comando:
gcloud config list project
Resultado:
[core]
project = <project_ID>
Resultado de ejemplo:
[core]
project = qwiklabs-gcp-44776a13dea667a6
Descripción general
En este lab, explorarás las capacidades de bloqueo geográfico de Cloud Armor. Crearás una política de seguridad de Cloud Armor y aplicarás reglas para denegar y permitir el tráfico según la ubicación geográfica para observar el comportamiento de Cloud Armor. Este lab proporciona experiencia práctica para proteger tus aplicaciones de Google Cloud con Cloud Armor.
Tarea 1: Configuración inicial
En esta tarea, configurarás el entorno, lo que incluye habilitar las APIs necesarias y crear un servicio de backend.
-
Configura el ID del proyecto.
gcloud config set project {{{ project_0.project_id | "PROJECT_ID" }}}
Nota:
Este comando configura tu proyecto activo. Todos los comandos "gcloud" posteriores se ejecutarán en este proyecto.
-
Configura tu región predeterminada como .
gcloud config set compute/region {{{ project_0.default_region | "REGION" }}}
Nota:
Este comando configura la región de procesamiento predeterminada. Los recursos se crearán en esta región.
-
Configura la zona predeterminada como :
gcloud config set compute/zone {{{ project_0.default_zone | "ZONE" }}}
Nota:
Este comando configura la zona de procesamiento predeterminada. Los recursos se crearán en esta zona dentro de la región especificada.
-
Habilita las APIs necesarias.
gcloud services enable compute.googleapis.com container.googleapis.com iap.googleapis.com
Nota:
Este comando habilita las APIs de Compute Engine, Identity-Aware Proxy y Kubernetes Engine, que son necesarias para este lab.
Tarea 2: Crea la red y la subred de VPC
Crea una red de VPC llamada test-vpc con las subredes test-subnet-us y test-subnet-eu. Esta VPC alojará las instancias que se usan para las pruebas.
-
Crea la red de VPC test-vpc.
gcloud compute networks create test-vpc --subnet-mode=custom
Nota:
Este comando crea una nueva red de VPC con el modo de subred personalizada, lo que proporciona flexibilidad para definir subredes.
-
Crea una subred test-subnet-us en la red test-vpc dentro de la región especificada. Usa el rango de IP 10.10.10.0/24.
gcloud compute networks subnets create test-subnet-us --network=test-vpc --region={{{ project_0.default_region | "REGION" }}} --range=10.10.10.0/24
Nota:
Este comando crea una subred en la red de VPC especificada con el rango de direcciones IP "10.10.10.0/24".
-
Crea una subred test-subnet-eu en la red test-vpc dentro de la región europe-west1. Usa el rango de IP 10.20.20.0/24.
gcloud compute networks subnets create test-subnet-eu \
--network=test-vpc \
--region=europe-west1 \
--range=10.20.20.0/24
Nota:
Este comando crea una subred en la red de VPC especificada con el rango de direcciones IP "10.20.20.0/24".
-
Agrega una regla de firewall para el acceso a IAP.
gcloud compute firewall-rules create allow-iap-ssh \
--direction=INGRESS \
--priority=1000 \
--network=test-vpc \
--action=ALLOW \
--rules=tcp:22 \
--source-ranges=35.235.240.0/20 \
--target-tags=iap-gce
Nota:
Este comando crea una regla de firewall para permitir el acceso de IAP a las instancias con la etiqueta "iap-gce".
-
Crea una regla de firewall para permitir el tráfico HTTP al backend.
gcloud compute firewall-rules create allow-http \
--direction=INGRESS \
--priority=1500 \
--network=test-vpc \
--allow=tcp:80,tcp:443 \
--source-ranges=0.0.0.0/0 \
--target-tags=http-server,https-server
Nota:
Este comando crea una regla de firewall que permite el tráfico HTTP y HTTPS desde cualquier origen a las instancias con las etiquetas "http-server" y "https-server".
Tarea 3: Implementa un servicio de backend con verificaciones de estado
En esta tarea, implementarás verificaciones de estado y crearás un servicio de backend.
-
Crea una verificación de estado.
gcloud compute health-checks create http health-check-http \
--port=80
Nota:
Este comando crea una verificación de estado HTTP en el puerto 80.
-
Crea un servicio de backend.
gcloud compute backend-services create backend-service \
--health-checks=health-check-http \
--global
Nota:
Este comando crea un servicio de backend global con la verificación de estado creada en el paso anterior.
Tarea 4: Crea la plantilla de instancias y el grupo de instancias administrado
Primero, crea una plantilla de instancias, que es como un plano para tus VMs. Luego, usa esta plantilla para crear un grupo de instancias administrado (MIG). El MIG gestionará automáticamente las VMs y proporcionará capacidades de reparación y ajuste de escala automáticos.
-
Crea una plantilla de instancias.
gcloud compute instance-templates create backend-template \
--machine-type=e2-medium \
--image-family=debian-11 \
--image-project=debian-cloud \
--subnet=test-subnet-us \
--tags=http-server,https-server,iap-gce \
--metadata=startup-script='#! /bin/bash
apt-get update
apt-get install -y apache2 php libapache2-mod-php
a2ensite default-ssl
a2enmod ssl
systemctl restart apache2
rm /var/www/html/index.html
echo "
Cadena de consulta:
" > /var/www/html/index.php
systemctl restart apache2'
Nota:
Este comando crea una plantilla de instancias que define la configuración de las VMs del backend.
-
Crea un grupo de instancias administrado.
gcloud compute instance-groups managed create backend-mig \
--base-instance-name=backend-vm \
--size=2 \
--template=backend-template \
--zone={{{ project_0.default_zone | "ZONE" }}}
Nota:
Este comando crea un grupo de instancias administrado (MIG) con un tamaño inicial de 2 VMs.
-
Agrega el grupo de instancias administrado al servicio de backend.
gcloud compute backend-services add-backend backend-service \
--instance-group=backend-mig \
--instance-group-zone={{{ project_0.default_zone | "ZONE" }}} \
--global
Nota:
Este comando agrega el grupo de instancias administrado como backend al "backend-service".
-
Crea una verificación de estado.
gcloud compute health-checks create http http-health-check \
--request-path=/
Nota:
Este comando crea una verificación de estado que envía solicitudes a la ruta raíz ("/").
-
Aplica la verificación de estado al servicio de backend.
gcloud compute backend-services update backend-service \
--health-checks=http-health-check \
--global
Nota:
Este comando asocia la verificación de estado con el "backend-service".
Tarea 5: Crea la configuración del frontend
La configuración del frontend es con la que interactuarán tus usuarios. Esto implica un mapa de URL, un proxy, una dirección IP global y una regla de reenvío.
-
Crea un mapa de URL.
gcloud compute url-maps create url-map \
--default-service=backend-service
Nota:
Este comando crea un mapa de URL que enruta todo el tráfico a "backend-service".
-
Crea un proxy HTTP global.
gcloud compute target-http-proxies create http-proxy \
--url-map=url-map
Nota:
Este comando crea un proxy HTTP global con el mapa de URL creado en el paso anterior.
-
Crea una dirección IP estática global.
gcloud compute addresses create global-ip-address --global
Nota:
Este comando crea una dirección IP estática accesible de forma global.
-
Crea una regla de reenvío global.
gcloud compute forwarding-rules create http-forwarding-rule \
--address=$(gcloud compute addresses describe global-ip-address \
--global --format='value(address)') \
--global \
--target-http-proxy=http-proxy \
--ports=80
Nota:
Este comando crea una regla de reenvío global para dirigir el tráfico al proxy HTTP con la dirección IP creada.
Tarea 6: Implementa el bloqueo geográfico con Cloud Armor
Ahora crearás una política de seguridad de Cloud Armor y aplicarás una regla para denegar el tráfico de una región específica. Las reglas de Cloud Armor se procesan en orden ascendente de prioridad; un número de prioridad más bajo significa que la regla se evalúa primero.
-
Crea una política de seguridad de Cloud Armor.
gcloud compute security-policies create "geoblocking-policy" \
--description="Blocks traffic from specific countries"
Nota:
Este comando crea una política de seguridad de Cloud Armor llamada "geoblocking-policy".
-
Agrega una regla para permitir el tráfico de Estados Unidos (EE.UU.).
gcloud compute security-policies rules create 1000 \
--security-policy="geoblocking-policy" \
--description="Allow traffic from US" \
--expression="origin.region_code == 'US'" \
--action=allow
Nota:
Este comando crea una regla que permite el tráfico de Estados Unidos.
Esta regla tiene un número de prioridad alto (1,000), por lo que se evalúa después de las reglas de denegación.
Es una práctica recomendada permitir explícitamente el tráfico de las regiones a las que quieres prestar servicio, pero para el bloqueo geográfico no es estrictamente necesario, a menos que implementes una política de "denegar todo, permitir específico".
La prioridad es esencial para la posición de la regla en la política.
-
Agrega una regla para denegar el tráfico de Bélgica (BE).
gcloud compute security-policies rules create 10 \
--security-policy="geoblocking-policy" \
--description="Deny traffic from Belgium" \
--expression="origin.region_code == 'BE'" \
--action=deny-403
Nota:
Este comando bloquea el tráfico de Bélgica antes de que se consideren las reglas de permiso.
La acción "deny-403" devuelve un error HTTP 403 (acceso prohibido).
La expresión "origin.region_code" coincide con el tráfico que se origina en Bélgica.
-
Vincula la política de seguridad al servicio de backend.
gcloud compute backend-services update backend-service \
--security-policy="geoblocking-policy" \
--global
Nota:
Este comando vincula la política de seguridad al servicio de backend, lo que aplica las reglas de la política a todo el tráfico dirigido al servicio de backend.
Tarea 7: Prueba el bloqueo geográfico con recursos regionales
Ahora, probarás la política de seguridad de Cloud Armor para evaluar el bloqueo geográfico desde varias ubicaciones.
-
Crea una instancia de Compute Engine llamada test-vm-us en test-subnet-us.
gcloud compute instances create test-vm-us \
--subnet=test-subnet-us \
--machine-type=e2-medium \
--tags=iap-gce \
--zone={{{ project_0.default_zone | "ZONE" }}}
Nota:
Este comando crea una instancia de Compute Engine en la subred especificada.
-
Crea una instancia de Compute Engine llamada test-vm-europe en test-subnet-eu.
gcloud compute instances create test-vm-europe \
--subnet=test-subnet-eu \
--machine-type=e2-medium \
--tags=iap-gce \
--zone=europe-west1-b
Nota:
Este comando crea una instancia de Compute Engine en la subred especificada.
-
Obtén la dirección IP del servicio de backend.
BACKEND_IP=$(gcloud compute addresses describe global-ip-address --global --format='value(address)') && echo $BACKEND_IP
Nota:
Este comando recupera la dirección IP asociada con el servicio de backend, que se usará para probar el bloqueo geográfico.
-
En los siguientes pasos, es posible que veas una instrucción de SSH similar a la que se muestra a continuación.
Do you want to continue (Y/n)? Y
Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Nota:
La comunicación SSH inicial te alertará sobre una nueva conexión de host y te preguntará si deseas ingresar una frase de contraseña. Para este ejercicio de lab, no se requiere una frase de contraseña, así que presiona la tecla Intro para confirmar.
-
Prueba la regla de denegación desde una instancia de GCE de EE.UU.
gcloud compute ssh test-vm-us \
--zone={{{ project_0.default_zone | "ZONE" }}} \
--tunnel-through-iap \
--command "curl -v $BACKEND_IP"
Nota:
Este comando se conecta a la instancia de EE.UU. a través de SSH y usa "curl" para probar la política de bloqueo geográfico. Una respuesta "200 OK" indica que la solicitud se origina en EE.UU.
RESULTADO ESPERADO
GET / HTTP/1.1
Host: 34.144.245.10
User-Agent: curl/7.88.1
Accept: */*
HTTP/1.1 200 OK
Date: Wed, 06 Aug 2025 04:02:08 GMT
Server: Apache/2.4.62 (Debian)
Content-Length: 65
Content-Type: text/html; charset=UTF-8
Via: 1.1 google
-
Prueba la regla de denegación desde una instancia de GCE europea.
gcloud compute ssh test-vm-europe \
--zone=europe-west1-b \
--tunnel-through-iap \
--command "curl -v $BACKEND_IP"
Nota:
Este comando se conecta a la instancia europea a través de SSH y usa "curl" para probar la política de bloqueo geográfico. Se espera un error 403 (acceso prohibido).
RESULTADO ESPERADO
GET / HTTP/1.1
Host: 34.144.245.10
User-Agent: curl/7.88.1
Accept: */*
HTTP/1.1 403 Forbidden
Content-Length: 134
Content-Type: text/html; charset=UTF-8
Date: Wed, 06 Aug 2025 04:02:36 GMT
¡Felicitaciones!
Configuraste correctamente Cloud Armor para implementar el bloqueo geográfico. Aprendiste a crear y aplicar políticas de seguridad, y a definir reglas basadas en el origen geográfico. Este lab proporciona una base para proteger tus aplicaciones de Google Cloud con Cloud Armor.
Recursos adicionales
Última actualización del manual: 6 de agosto de 2025
Prueba más reciente del lab: 6 de agosto de 2025