Comienza a usar la detección avanzada de amenazas de DNS Armor

1. Introducción y visión general

DNS Armor, con tecnología de Infoblox, es un servicio completamente administrado que proporciona seguridad a nivel de DNS para tus cargas de trabajo de Google Cloud. Su detector avanzado de amenazas está diseñado para detectar actividad maliciosa en el punto más temprano de la cadena de ataque (la consulta de DNS) sin agregar complejidad operativa ni sobrecarga de rendimiento.

En este codelab, se proporcionan instrucciones paso a paso para configurar y probar el servicio de DNS Armor. Configurarás la infraestructura de red necesaria, crearás el detector de amenazas, probarás el servicio simulando amenazas de DNS y, por último, analizarás los registros de amenazas con el Explorador de registros.

Qué compilarás

En este codelab, aprovisionarás los siguientes recursos:

  • Dos redes de VPC: network-a y network-b
  • network-a incluirá subredes y máquinas virtuales en las regiones us-east4 y us-central1.
  • network-b incluirá una subred y una máquina virtual solo en us-east4.
  • Un detector de amenazas avanzado de DNS Armor configurado para inspeccionar las consultas de DNS.

75d6eeb807735645.png

Qué aprenderás

  • Cómo aprovisionar los recursos de redes necesarios, incluidas las VPC y las máquinas virtuales
  • Cómo implementar un detector de amenazas avanzado y excluir redes específicas
  • Cómo validar la configuración de detección de amenazas con una secuencia de comandos de simulación de amenazas
  • Cómo analizar los registros de amenazas en el Explorador de registros

Requisitos

  • Un proyecto de Google Cloud,
  • Acceso a la herramienta de línea de comandos de gcloud

2. Requisitos previos

En esta sección, realizarás las siguientes tareas:

  • Verifica que tu proyecto de Google Cloud cumpla con las restricciones necesarias de la política de la organización.
  • Confirma que tu cuenta de usuario tenga los roles y permisos de IAM necesarios.
  • Habilita las APIs de Google Cloud esenciales para este codelab.
  • Asigna el rol de IAM roles/logging.viewer a la cuenta de servicio de Compute Engine.

Restricciones de las políticas de la organización

Para completar este codelab correctamente, verifica las restricciones de la política de la organización que se aplican a tu proyecto. Es posible que algunas políticas dificulten el aprovisionamiento de los recursos necesarios. Las siguientes restricciones podrían afectar la configuración de este codelab:

  • constraints/gcp.resourceLocations: Restringe las regiones en las que puedes crear recursos. El codelab requiere us-east4 y us-central1.
  • constraints/compute.vmExternalIpAccess: Evita la creación de máquinas virtuales con direcciones IP públicas, lo que podría interferir en la configuración si no sigues el uso de la marca --no-address del codelab .
  • constraints/compute.shieldedVm: Aplica la creación de VMs protegidas, que los comandos de creación de VMs del codelab no especifican, lo que podría causar un error.
  • constraints/gcp.restrictServiceUsage: Limita las APIs de Google Cloud que se pueden habilitar y podría bloquear el codelab si no permite compute.googleapis.com, networksecurity.googleapis.com, logging.googleapis.com y monitoring.googleapis.com.

Permisos y roles de IAM

Para completar correctamente este codelab, verifica los roles y permisos de IAM otorgados a tu usuario. Se requieren los siguientes roles y permisos de IAM para completar este codelab.

  • Administrador de uso del servicio (roles/serviceusage.serviceUsageAdmin): Para habilitar las APIs de Google Cloud necesarias para el codelab.
  • Administrador de redes de Compute (roles/compute.networkAdmin): Para crear y administrar redes de VPC, subredes y Cloud NAT.
  • Administrador de seguridad de Compute (roles/compute.securityAdmin): Para configurar las reglas de firewall para el acceso SSH a las máquinas virtuales.
  • Administrador de instancias de Compute (v1) (roles/compute.instanceAdmin.v1): Para crear y administrar las máquinas virtuales necesarias para el lab.
  • Usuario de túnel protegido con IAP (roles/iap.tunnelResourceAccessor): Para conectarse a las máquinas virtuales con SSH a través de Identity-Aware Proxy (IAP).
  • Administrador de seguridad de red (roles/networksecurity.admin): Para crear y administrar el detector de amenazas de DNS Armor.
  • Visor de registros (roles/logging.viewer): Para ver y analizar los registros de amenazas en el Explorador de registros

APIs de Google Cloud

Asegúrate de que las APIs de Google Cloud necesarias estén habilitadas en tu proyecto.

1. Habilita las APIs necesarias y ejecuta los siguientes comandos de gcloud en Cloud Shell.

gcloud services enable compute.googleapis.com \
networksecurity.googleapis.com \
logging.googleapis.com \
monitoring.googleapis.com

2. Verifica que las APIs estén habilitadas. Para ello, ejecuta los siguientes comandos de gcloud en Cloud Shell.

gcloud services list --enabled

Cuenta de servicio de Compute Engine

La secuencia de comandos de prueba requiere permisos para leer los registros de amenazas de Cloud Logging. Dado que la secuencia de comandos se ejecutará desde una VM que utiliza la cuenta de servicio predeterminada de Compute Engine, se debe asignar el rol de IAM roles/logging.viewer a esta cuenta de servicio.

1. Establece las variables de entorno. Para ello, ejecuta los siguientes comandos en Cloud Shell.

export PROJECT_ID=$(gcloud config get-value project)
export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format='value(projectNumber)')

2. Otorga el rol de visualizador de registros a la SA de Compute Engine. Ejecuta los siguientes comandos de gcloud en Cloud Shell.

gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="serviceAccount:${PROJECT_NUMBER}-compute@developer.gserviceaccount.com" \
--role="roles/logging.viewer"

3. Configuración básica del entorno

En esta sección, realizarás las siguientes tareas:

  • Crea redes de VPC (network-a y network-b) con subredes personalizadas.
  • Configura Cloud Routers y Cloud NAT para el tráfico de salida a Internet en network-a y network-b.
  • Crea reglas de firewall para permitir el acceso SSH a las VMs desde el rango de IP de IAP para network-a y network-b.
  • Aprovisiona máquinas virtuales Linux en network-a y network-b sin direcciones IP públicas.

Crea VPCs y subredes

1. Crea network-a y sus subredes en las regiones us-east4 y us-central1. Ejecuta los siguientes comandos gcloud en Cloud Shell.

gcloud compute networks create network-a --subnet-mode=custom
gcloud compute networks subnets create subnet-a-use4 \
--network=network-a \
--range=10.10.0.0/24 \
--region=us-east4
gcloud compute networks subnets create subnet-a-usc1 \
--network=network-a \
--range=10.10.1.0/24 \
--region=us-central1

2. Crea la red-b y su subred en la región us-east4. Ejecuta los siguientes comandos gcloud en Cloud Shell.

gcloud compute networks create network-b --subnet-mode=custom
gcloud compute networks subnets create subnet-b-use4 \
--network=network-b \
--range=10.20.0.0/24 \
--region=us-east4

Configura la salida de Internet

1. Crea Cloud Router y Cloud NAT para network-a para permitir la salida a Internet de las VMs sin IPs públicas.

gcloud compute routers create router-a-use4 \
--network=network-a \
--region=us-east4
gcloud compute routers nats create nat-a-use4 \
--router=router-a-use4 \
--auto-allocate-nat-external-ips \
--nat-all-subnet-ip-ranges \
--region=us-east4
gcloud compute routers create router-a-usc1 \
--network=network-a \
--region=us-central1
gcloud compute routers nats create nat-a-usc1 \
--router=router-a-usc1 \
--auto-allocate-nat-external-ips \
--nat-all-subnet-ip-ranges \
--region=us-central1

2. Crea Cloud Router y Cloud NAT para network-b para permitir la salida a Internet de las VMs sin IPs públicas.

gcloud compute routers create router-b-use4 \
--network=network-b \
--region=us-east4
gcloud compute routers nats create nat-b-use4 \
--router=router-b-use4 \
--auto-allocate-nat-external-ips \
--nat-all-subnet-ip-ranges \
--region=us-east4

Configura las reglas de firewall

1. Crea reglas de firewall para network-a que permitan el acceso SSH desde el rango de IP de IAP. Ejecuta los siguientes comandos gcloud en Cloud Shell.

gcloud compute firewall-rules create allow-ssh-iap-a \
--network=network-a \
--allow=tcp:22 \
--source-ranges=35.235.240.0/20

2. Crea reglas de firewall para network-b que permitan el acceso SSH desde el rango de IP de IAP. Ejecuta los siguientes comandos gcloud en Cloud Shell.

gcloud compute firewall-rules create allow-ssh-iap-b \
--network=network-b \
--allow=tcp:22 \
--source-ranges=35.235.240.0/20

Crea máquinas virtuales

1. Crea VMs de Linux en network-a

gcloud compute instances create vm-a-use4 \
--zone=us-east4-c \
--network=network-a \
--subnet=subnet-a-use4 \
--no-address \
--scopes=cloud-platform
gcloud compute instances create vm-a-usc1 \
--zone=us-central1-a \
--network=network-a \
--subnet=subnet-a-usc1 \
--no-address \
--scopes=cloud-platform

2. Crea una VM de Linux en network-b

gcloud compute instances create vm-b-use4 \
--zone=us-east4-c \
--network=network-b \
--subnet=subnet-b-use4 \
--no-address \
--scopes=cloud-platform

4. Crea el detector de amenazas de DNS

En esta sección, realizarás las siguientes tareas:

  • Crea el detector de amenazas.
  • Enumera el detector de amenazas.
  • Describe el recurso.

Ahora que se aprovisionaron las VPC, las subredes y las máquinas virtuales, el siguiente paso es crear el detector de amenazas de DNS.

1. Crea el detector de amenazas con el comando gcloud beta network-security dns-threat-detectors create. Usa la marca --excluded-networks para excluir network-b.

gcloud beta network-security dns-threat-detectors create my-dns-threat-detector \
--location=global \
--provider=infoblox \
--excluded-networks=projects/$PROJECT_ID/global/networks/network-b

2. Enumera el detector de amenazas para confirmar la creación.

gcloud beta network-security dns-threat-detectors list --location=global

3. Describe el recurso para verificar que network-b aparezca correctamente en excludedNetworks.

gcloud beta network-security dns-threat-detectors describe my-dns-threat-detector --location=global

Resultado de ejemplo:

createTime: '2025-08-06T17:06:30.297586089Z'
excludedNetworks:
- projects/dns-armor-demo-project/global/networks/network-b
name: projects/dns-armor-demo-project/locations/global/dnsThreatDetectors/my-dns-threat-detector
provider: INFOBLOX
updateTime: '2025-08-27T01:14:09.666357239Z'

5. Prueba la configuración

En esta sección, realizarás las siguientes tareas:

  • Conéctate a las VMs a través de SSH.
  • Instala Git en las VMs.
  • Clona el repositorio del simulador de detección de amenazas de Infoblox.
  • Ejecuta el script y analiza el resultado generado.

Valida la configuración generando consultas de DNS maliciosas emuladas desde tus VMs. Deberías observar entradas de registro para las búsquedas que se originan en network-a, mientras que no se generarán registros desde network-b..

1. Establece una conexión SSH a vm-a-use4. Ejecuta los siguientes comandos gcloud en Cloud Shell.

gcloud compute ssh vm-a-use4 --zone=us-east4-c

2. Instala Git en la VM.

sudo apt-get install git -y

3. Clona el repositorio del simulador de detección de amenazas de Infoblox.

git clone https://github.com/infobloxopen/ib-threat-detection-simulator

4. Cambia el directorio al directorio del simulador.

cd ib-threat-detection-simulator/threat_detection_simulator/

5. Ejecuta la secuencia de comandos y analiza el resultado generado.

Haz que la secuencia de comandos sea ejecutable.

chmod +x run.sh

Ejecuta la secuencia de comandos.

./run.sh info basic

6. Resultado de muestra

En la siguiente captura de pantalla, se muestra parte del resultado de la secuencia de comandos de una VM en la red-a. El resultado muestra que se detectó el 100% de las amenazas.

a66c1757f8c74da6.png

En la siguiente captura de pantalla, se muestra parte del resultado de la secuencia de comandos de una VM en la red-b. El resultado muestra que se detectó el 0% de las amenazas. Esto es lo esperado, ya que network-b se excluyó durante la creación del detector de amenazas.

c12d130c95c04e84.png

7. Sal de la sesión de SSH para volver a Cloud Shell.

exit

6. Cómo ver los registros de amenazas en el Explorador de registros

Los registros de amenazas generados se pueden ver en el Explorador de registros después de ejecutar la secuencia de comandos de prueba, ya que se escriben en Cloud Logging.

Ejemplo de entrada de registro

En esta sección, se proporciona una entrada de registro de muestra para una amenaza de DNS detectada, en la que se muestra la información detallada que captura DNS Armor, incluida la IP de origen, el dominio consultado y la categoría de amenaza. Sirve como referencia para comprender la estructura y el contenido de los registros que analizarás.

{
  "insertId": "1izjkneb44",
  "jsonPayload": {
    "partnerId": "Infoblox",
    "detectionTime": "2025-08-08T01:49:54.092250101Z",
    "dnsQuery": {
      "authAnswer": false,
      "rdata": "random.malicious-domain.com.\t300\tIN\ta\t196.251.118.39",
      "protocol": "UDP",
      "projectNumber": "1234567890",
      "responseCode": "NOERROR",
      "queryType": "A",
      "location": "us-east4",
      "sourceIp": "10.10.0.2",
      "queryName": "random.malicious-domain.com.",
      "vmProjectNumber": "1234567890",
      "vmInstanceId": "01234567899876543210",
      "destinationIp": "",
      "queryTime": "2025-08-08T01:49:53.712692495Z"
    },
    "threatInfo": {
      "severity": "HIGH",
      "confidence": "HIGH",
      "threatDescription": "",
      "category": "EmergentDomain",
      "threatId": "Suspicious_EmergentDomain",
      "type": "Suspicious",
      "threatIndicator": "izumisv1.cc",
      "threatIndicatorType": "FQDN",
      "threat": "Suspicious",
      "threatFeed": "suspicious-noed"
    }
  },
  "resource": {
    "type": "networksecurity.googleapis.com/DnsThreatDetector",
    "labels": {
      "resource_container": "projects/1234567890",
      "id": "",
      "location": "us-east4"
    }
  },
  "timestamp": "2025-08-08T01:49:54.092250101Z",
  "severity": "INFO",
  "logName": "projects/dns-armor-demo-project/logs/networksecurity.googleapis.com%2Fdns_threat_events",
  "receiveTimestamp": "2025-08-08T01:49:55.290965780Z"
}

Cómo ver registros en el Explorador de registros

1. Navega a la sección Monitoring en la consola de Google Cloud y, luego, selecciona Logs explorer.

4a90c593d7e339d8.png

2. Para filtrar todos los registros de amenazas de DNS Armor, usa la siguiente consulta. Esto filtra los registros según el tipo de recurso del detector de amenazas del DNS.

resource.type="networksecurity.googleapis.com/DnsThreatDetector"

3. Filtrar los registros para la región us-east4: Agrega un filtro para la ubicación. Esta consulta solo mostrará las amenazas detectadas en la región us-east4.

resource.type="networksecurity.googleapis.com/DnsThreatDetector"
resource.labels.location="us-east4"

4. Filtra los registros por red de origen: Filtra los registros según la dirección IP de origen de la consulta de DNS para ver las amenazas que se originan en una red de VPC específica.

Para ver los registros de network-a (subredes 10.10.0.0/24 y 10.10.1.0/24), haz lo siguiente:

resource.type="networksecurity.googleapis.com/DnsThreatDetector"
(jsonPayload.dnsQuery.sourceIp:"10.10.0." OR jsonPayload.dnsQuery.sourceIp:"10.10.1.")

Para ver los registros de network-b (subredes 10.20.0.0/24), haz lo siguiente:

resource.type="networksecurity.googleapis.com/DnsThreatDetector"
jsonPayload.dnsQuery.sourceIp:"10.20.0."

7. Limpieza

Para evitar cargos futuros, borra los recursos que creaste en este codelab. Asegúrate de salir de la shell de la VM y volver a Cloud Shell cuando ejecutes los comandos de limpieza.

1. Borra las VMs.

gcloud compute instances delete vm-a-use4 --zone=us-east4-c --quiet
gcloud compute instances delete vm-a-usc1 --zone=us-central1-a --quiet
gcloud compute instances delete vm-b-use4 --zone=us-east4-c --quiet

2. Borra las reglas de firewall.

gcloud compute firewall-rules delete allow-ssh-iap-a --quiet
gcloud compute firewall-rules delete allow-ssh-iap-b --quiet

3. Borra las puertas de enlace de Cloud NAT.

gcloud compute routers nats delete nat-a-use4 --router=router-a-use4 --region=us-east4 --quiet
gcloud compute routers nats delete nat-a-usc1 --router=router-a-usc1 --region=us-central1 --quiet
gcloud compute routers nats delete nat-b-use4 --router=router-b-use4 --region=us-east4 --quiet

4. Borra los Cloud Routers

gcloud compute routers delete router-a-use4 --region=us-east4 --quiet
gcloud compute routers delete router-a-usc1 --region=us-central1 --quiet
gcloud compute routers delete router-b-use4 --region=us-east4 --quiet

5. Borra las subredes.

gcloud compute networks subnets delete subnet-a-use4 --region=us-east4 --quiet
gcloud compute networks subnets delete subnet-a-usc1 --region=us-central1 --quiet
gcloud compute networks subnets delete subnet-b-use4 --region=us-east4 --quiet

6. Borra el detector de amenazas de DNS.

gcloud beta network-security dns-threat-detectors delete my-dns-threat-detector --location=global --quiet

7. Borra las VPC.

gcloud compute networks delete network-a --quiet
gcloud compute networks delete network-b --quiet

8. Felicitaciones

¡Felicitaciones! Configuraste, implementaste y probaste correctamente el detector de amenazas de DNS Armor. Obtuviste experiencia práctica para proteger tu entorno de Google Cloud de las amenazas basadas en DNS.

En este codelab, hiciste lo siguiente:

  • Se aprovisionó un entorno de red con varias VPC, subredes y máquinas virtuales.
  • Se configuró la salida a Internet para las VMs privadas con Cloud NAT.
  • Implementaste un detector de amenazas de DNS Armor y aprendiste a excluir redes específicas.
  • Se simularon amenazas de DNS y se validó la configuración de detección de amenazas.
  • Se analizaron los registros de amenazas en el Explorador de registros para identificar y comprender la actividad maliciosa del DNS.

¿Qué sigue?

Documentos de referencia