Usa el servicio de External Exposure para detectar recursos expuestos

La Exposición externa de Security Command Center es un Google Cloud servicio que te ayuda a administrar y reducir tu superficie de ataque externa a través del descubrimiento automatizado y la validación de riesgos.

Dado que los analizadores automáticos pueden dirigirse a los recursos expuestos a Internet en cuestión de minutos, la Exposición externa descubre de forma proactiva las exposiciones accidentales y los recursos ocultos antes de que los atacantes puedan descubrirlos y aprovecharlos.

Al analizar tu entorno desde una perspectiva externa, el servicio intenta confirmar a qué se puede acceder realmente desde Internet y, luego, identifica qué exposiciones son realmente explotables.

External Exposure analiza continuamente las direcciones IP, los nombres de host, los nombres de dominio y las URLs orientados al exterior en todo tu entorno de Google Cloud. Esta función usa el análisis de red para confirmar a qué recursos y aplicaciones se puede acceder desde Internet pública.

Para cada exposición confirmada, External Exposure hace lo siguiente:

  • Realiza un seguimiento y muestra la ruta de red Google Cloud para los balanceadores de cargas externos, las políticas de Google Cloud Armor, las reglas de firewall, Private Service Connect, Cloud Interconnect y los servicios de backend hasta el recurso expuesto.

    Este recurso puede ser una instancia de Compute Engine o un Pod de Google Kubernetes Engine (GKE), lo que incluye un servicio o una aplicación expuestos.

    Esta profunda integración con la estructura de redes de Google ayuda a proporcionar contexto útil para que puedas aplicar de inmediato mitigaciones preventivas, como bloquear una regla de firewall específica o configurar Google Cloud Armor.

  • Realiza una huella digital para intentar identificar la aplicación web específica o el software del servidor que se ejecuta en cada activo expuesto.

  • Si puede identificar el servicio o software expuesto, identifica las vulnerabilidades que se sabe que lo afectan.

  • Utiliza detectores activos y pasivos avanzados para probar la capacidad de explotación en el mundo real validando vulnerabilidades, errores de configuración y el uso de credenciales predeterminadas o débiles.

Antes de comenzar

En esta sección, se describe cómo preparar tu entorno para usar External Exposure.

Habilita la API de Security Center Management

Si planeas usar las APIs de Security Command Center, debes habilitar la API de Security Center Management para tu proyecto de cuota y, si se usan políticas de la organización que restringen el uso de la API, asegúrate de que se permita la API de Security Center Management. La API de Security Center Management se usa para controlar el estado de habilitación de los servicios de Security Command Center, como External Exposure.

  1. En una terminal, habilita la API de Security Center Management para tu proyecto de cuota:

    gcloud services enable securitycentermanagement.googleapis.com \
        --project=QUOTA_PROJECT_ID
    

    Reemplaza QUOTA_PROJECT_ID por el ID del proyecto que usas para administrar la cuota.

  2. Si tienes políticas de la organización que restringen el uso de la API, asegúrate de que se permita la API de Security Center Management. Para obtener más información, consulta Revisa las políticas de la organización.

  3. Si deseas recibir estadísticas sobre la ruta de exposición de la red en tus hallazgos, asegúrate de activar External Exposure a nivel de la organización o la carpeta.

Roles obligatorios

Para obtener los permisos que necesitas para configurar la Exposición externa y ver los datos del panel, pídele a tu administrador que te otorgue los siguientes roles de IAM en tu organización, carpeta o proyecto:

Para obtener más información sobre cómo otorgar roles, consulta Administra el acceso a proyectos, carpetas y organizaciones.

También puedes obtener los permisos necesarios a través de roles personalizados o cualquier otro rol predefinido.

Se pueden usar los siguientes comandos de Google Cloud CLI para asignar los roles anteriores a un usuario:

Asigna roles con gcloud CLI

  • Para otorgar el rol de administrador del Centro de seguridad a un usuario, ejecuta el siguiente comando:

    gcloud organizations add-iam-policy-binding ORGANIZATION_ID \
        --member=user:USER_EMAIL_ID \
        --role=roles/securitycenter.admin
    
  • Para otorgar el rol de visualizador administrador del Centro de seguridad a un usuario, ejecuta el siguiente comando:

    gcloud organizations add-iam-policy-binding ORGANIZATION_ID \
        --member=user:USER_EMAIL_ID \
        --role=roles/securitycenter.adminViewer
    
  • Para otorgar el rol de visualizador de exposición externa a un usuario para que acceda a las métricas de la CLI o la API, ejecuta el siguiente comando:

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=user:USER_EMAIL_ID \
        --role=roles/externalexposure.viewer
    

    Reemplaza lo siguiente:

    • ORGANIZATION_ID: el ID numérico de la organización
    • PROJECT_ID: Es el ID del proyecto.
    • USER_EMAIL_ID: La dirección de correo electrónico del usuario que requiere acceso

Habilita y configura el servicio

Para habilitar y configurar External Exposure, completa las tareas de las siguientes secciones.

Puedes habilitar y configurar el servicio a nivel de la organización, la carpeta o el proyecto. Cuando uses la API, si deseas configurar parámetros a nivel de la carpeta o la organización en lugar de a nivel del proyecto, reemplaza projects/PROJECT_ID por folders/FOLDER_ID o organizations/ORGANIZATION_ID en todas las URLs de solicitud y los parámetros de datos JSON.

Activa External Exposure

Activa External Exposure para tu organización, carpeta o proyecto.

Después de activar el servicio, asegúrate de otorgarle al agente de servicio los permisos necesarios, como se describe en Cómo otorgar permisos al agente de servicio.

Console

  1. En la consola de Google Cloud , ve a la página Habilitación de servicios para External Exposure.

    Ir a Habilitación de servicios

  2. Elige tu organización o proyecto.

  3. En la pestaña Habilitación de servicios, en la columna External Exposure, selecciona el estado de habilitación de la organización, la carpeta o el proyecto que deseas modificar y, luego, selecciona una de las siguientes opciones:

    • Habilitar: Habilita External Exposure.
    • Inhabilitar: Inhabilita la exposición externa.
    • Heredar: Hereda la configuración del recurso superior, a menos que se anule en el recurso secundario.

gcloud

Habilita la API de Security Center Management y activa la exposición externa para tu alcance objetivo.

  1. En una terminal, habilita la API para tu proyecto de cuota:

    gcloud services enable securitycentermanagement.googleapis.com \
        --project=QUOTA_PROJECT_ID
    
  2. En una terminal, habilita External Exposure con la API de Security Center Management:

    curl --request PATCH \
      "https://securitycentermanagement.googleapis.com/v1/projects/PROJECT_ID/locations/global/securityCenterServices/external_exposure?updateMask=intended_enablement_state" \
      --header "Authorization: Bearer $(gcloud auth print-access-token)" \
      --header "X-Goog-User-Project: QUOTA_PROJECT_ID" \
      --header "Accept: application/json" \
      --header "Content-Type: application/json" \
      --data '{
        "intendedEnablementState": "ENABLED",
        "name": "projects/PROJECT_ID/locations/global/securityCenterServices/external_exposure"
      }' \
      --compressed
    

    Reemplaza lo siguiente:

    • QUOTA_PROJECT_ID: Es el ID del proyecto que usas para administrar la cuota.
    • PROJECT_ID: Es el ID del proyecto en el que deseas habilitar External Exposure.

Otorga permisos al agente de servicio

Según el nivel de recursos en el que habilites el servicio, Google Cloudgenerará un agente de servicio:

  • Nivel de organización o carpeta: Se crea un agente de servicio a nivel de la organización o la carpeta.
  • A nivel del proyecto: Se crea un agente de servicio a nivel del proyecto.

Para otorgar permisos a nivel de la organización, ejecuta el siguiente comando gcloud en una terminal:

gcloud organizations add-iam-policy-binding ORGANIZATION_ID \
    --member="serviceAccount:service-org-ORGANIZATION_ID@gcp-sa-ee-hpsa.iam.gserviceaccount.com" \
    --role=roles/externalexposure.serviceAgent

Reemplaza ORGANIZATION_ID por el ID numérico de tu organización.

Para otorgar permisos a nivel de la carpeta, ejecuta el siguiente comando de gcloud en una terminal:

gcloud resource-manager folders add-iam-policy-binding FOLDER_ID \
    --member="serviceAccount:service-folder-FOLDER_ID@gcp-sa-ee-hpsa.iam.gserviceaccount.com" \
    --role=roles/externalexposure.serviceAgent

Reemplaza FOLDER_ID por el ID numérico de tu carpeta.

Otorga acceso de entrada a los perímetros de servicio

Si usas los Controles del servicio de VPC, otorga al agente de servicio de External Exposure acceso entrante a cualquier perímetro de servicio que proteja los proyectos que desees analizar. Si no otorgas acceso entrante, la Exposición externa no podrá realizar análisis ni generar hallazgos para los proyectos protegidos por perímetros de servicio.

Según el nivel de recursos en el que se habilita el servicio, el identificador de la cuenta de servicio usa uno de los siguientes formatos de dirección de correo electrónico:

  • Para organizaciones o carpetas:

    service-RESOURCE_KEYWORD-RESOURCE_ID@gcp-sa-ee-hpsa.iam.gserviceaccount.com
    
  • Para los proyectos:

    service-project-PROJECT_NUMBER@gcp-sa-ee.iam.gserviceaccount.com
    

Reemplaza lo siguiente:

  • RESOURCE_KEYWORD: La palabra clave org o folder
  • RESOURCE_ID: Es el ID de la organización o de la carpeta.
  • PROJECT_NUMBER: El número del proyecto

Si tienes cuentas de servicio a nivel de la organización y del proyecto, aplica los siguientes pasos a ambas.

Para otorgar acceso, agrega una regla de entrada a cada perímetro de servicio de bloqueo:

  1. En la consola de Google Cloud , ve a la página Controles del servicio de VPC:

    Ir a los Controles del servicio de VPC

  2. Selecciona la política de acceso de bloqueo y el perímetro de servicio.

  3. Haz clic en Editar y, luego, en Política de entrada.

  4. Haz clic en Agregar regla de entrada y configura el bloque Desde de la siguiente manera:

    1. En Identidad, selecciona Identidades y grupos seleccionados.
    2. Ingresa la dirección de correo electrónico de la cuenta de servicio de External Exposure.
    3. En Fuente, selecciona Todas las fuentes.
  5. Configura el bloque Para de la regla:

    1. En Proyecto, selecciona Todos los proyectos.
    2. En Operaciones o roles de IAM, selecciona Todas las operaciones.
  6. Haz clic en Guardar.

Configura puertos personalizados

Configura hasta 32 puertos personalizados por proyecto para que se analicen además de los puertos de referencia:

Console

  1. En la consola de Google Cloud , ve a la página Habilitación de servicios:

    Ir a Habilitación de servicios

  2. Elige tu organización o proyecto.

  3. En la columna External Exposure de la fila que deseas modificar, haz clic en Configuración.

  4. En el campo Puertos personalizados, ingresa los números de puerto separados por comas.

  5. Haz clic en Guardar.

gcloud

Para configurar puertos personalizados para la detección, incluye service_config en updateMask y especifica los números enteros de los puertos en el wrapper del array ports en el objeto serviceConfig. En el siguiente ejemplo, se configuran los puertos personalizados 8081 y 8188 para el análisis:

curl --request PATCH \
  "https://securitycentermanagement.googleapis.com/v1/projects/PROJECT_ID/locations/global/securityCenterServices/external_exposure?updateMask=service_config" \
  --header "Authorization: Bearer $(gcloud auth print-access-token)" \
  --header "X-Goog-User-Project: QUOTA_PROJECT_ID" \
  --header "Accept: application/json" \
  --header "Content-Type: application/json" \
  --data '{
    "serviceConfig": {
      "ports": [8081, 8188]
    },
    "name": "projects/PROJECT_ID/locations/global/securityCenterServices/external_exposure"
  }' \
  --compressed

Reemplaza lo siguiente:

  • QUOTA_PROJECT_ID: Es el ID del proyecto que usas para administrar la cuota.
  • PROJECT_ID: Es el ID del proyecto en el que deseas configurar puertos personalizados.

Cómo configurar los módulos de análisis

Configura módulos de análisis específicos para que se activen o desactiven:

Console

  1. En la consola de Google Cloud , ve a la página Habilitación de servicios:

    Ir a Habilitación de servicios

  2. Elige tu organización o proyecto.

  3. En la columna External Exposure de la fila que deseas modificar, haz clic en Configuración.

  4. En la sección Scanning modules, selecciona la casilla de verificación para habilitar o inhabilitar cada módulo (como interfaces expuestas, APIs, credenciales débiles o RCE).

  5. Haz clic en Guardar.

gcloud

Para habilitar o inhabilitar módulos específicos, incluye modules en updateMask y especifica el estado de habilitación de cada módulo en el objeto modules. En el siguiente ejemplo, se habilita EXTERNALLY_EXPOSED_RCE_VULNERABILITY y se inhabilita EXTERNALLY_EXPOSED_WEAK_CREDENTIALS:

curl --request PATCH \
  "https://securitycentermanagement.googleapis.com/v1/projects/PROJECT_ID/locations/global/securityCenterServices/external_exposure?updateMask=modules" \
  --header "Authorization: Bearer $(gcloud auth print-access-token)" \
  --header "X-Goog-User-Project: QUOTA_PROJECT_ID" \
  --header "Accept: application/json" \
  --header "Content-Type: application/json" \
  --data '{
    "modules": {
      "EXTERNALLY_EXPOSED_RCE_VULNERABILITY": {
        "intendedEnablementState": "ENABLED"
      },
      "EXTERNALLY_EXPOSED_WEAK_CREDENTIALS": {
        "intendedEnablementState": "DISABLED"
      }
    },
    "name": "projects/PROJECT_ID/locations/global/securityCenterServices/external_exposure"
  }' \
  --compressed

Reemplaza lo siguiente:

  • QUOTA_PROJECT_ID: Es el ID del proyecto que usas para administrar la cuota.
  • PROJECT_ID: Es el ID del proyecto en el que deseas configurar módulos.

Solo puedes configurar los estados de habilitación para los siguientes módulos:

  • EXTERNALLY_EXPOSED_UI
  • EXTERNALLY_EXPOSED_API
  • EXTERNALLY_EXPOSED_WEAK_CREDENTIALS
  • EXTERNALLY_EXPOSED_RCE_VULNERABILITY
  • EXTERNALLY_EXPOSED_ARBITRARY_DATA_READ

Todos los demás módulos de External Exposure (incluidas las verificaciones de almacenamiento de bases de datos, cargas de trabajo sin servidores y balanceador de cargas) están habilitados de forma predeterminada y no aparecen en la página de configuración de módulos.

Después de habilitar la Exposición externa, se ejecutan automáticamente análisis por lotes continuos para identificar las direcciones IP externas expuestas, sondear los servicios en ejecución y validar las vulnerabilidades activas.

Investiga los resultados

Después de habilitar External Exposure, podrás ver los hallazgos en la consola deGoogle Cloud . En Security Command Center, ve a la página Descripción general del riesgo y consulta el panel de Exposición externa. Este panel está disponible cuando tu alcance se establece en una organización, una carpeta o un proyecto. Para obtener más información sobre este panel, consulta Evalúa el riesgo de un vistazo.

Para recuperar los resultados activos de External Exposure con la CLI, ejecuta el siguiente comando:

gcloud alpha scc findings list projects/PROJECT_ID \
    --location=global \
    --filter="state=\"ACTIVE\" AND finding_class=\"EXTERNAL_EXPOSURE\""

Reemplaza PROJECT_ID por el ID del proyecto en el que deseas ver los hallazgos.

Cómo comprender los detalles de los hallazgos

Los resultados que pertenecen a la clase EXTERNAL_EXPOSURE identifican el tipo de riesgo y cómo se expone el recurso.

Para obtener una lista de las categorías de riesgo detalladas que se generan para estos hallazgos (como EXTERNALLY_EXPOSED_VM_INSTANCE o EXTERNALLY_EXPOSED_SERVERLESS_WORKLOAD), consulta Hallazgos de External Exposure.

Todos los resultados de la clase EXTERNAL_EXPOSURE incluyen los siguientes detalles:

  • Servicio expuesto: Es la aplicación web, el software del servidor o el protocolo específicos identificados en el puerto activo.
  • Estadísticas de la ruta de red: La conectividad de seguimiento de la ruta de red desde la Internet pública a través de balanceadores de cargas, reglas de reenvío y servicios de backend hasta el activo de destino.
  • Extremo expuesto: Es el recurso de destino subyacente (por ejemplo, una instancia de Compute Engine o un Pod de Google Kubernetes Engine [GKE]).

Si se puede identificar el servicio o la versión de software expuestos, el hallazgo también enumera las vulnerabilidades de CVE que lo afectan.

Prioriza los hallazgos con las puntuaciones de exposición a ataques

Los hallazgos de External Exposure se integran con las simulaciones de rutas de ataque para proporcionar puntos de entrada confirmados y reales en tu entorno. Cuando una exposición confirmada se conecta a una posible ruta de movimiento lateral (por ejemplo, una cuenta de servicio expuesta que puede acceder a una base de datos sensible de BigQuery o a un bucket de Cloud Storage), el hallazgo recibe una puntuación de exposición al ataque. Puedes usar esta puntuación para priorizar la corrección de las exposiciones que representan el mayor riesgo para tus recursos de alto valor.

Supervisa las métricas de análisis

Para ayudarte a confirmar que External Exposure funciona correctamente en todo tu entorno, la consola muestra métricas continuas de análisis por lotes:

  • Último análisis: Es la marca de tiempo del ciclo de análisis completado más recientemente, que confirma que los resultados reflejan una vista actual de tus recursos.
  • Próximo análisis: Es la hora de inicio programada del siguiente ciclo de análisis.
  • Proyectos exitosos: Es el recuento total de proyectos que se analizaron correctamente durante el ciclo de análisis más reciente.
  • Proyectos excluidos: Es el recuento total de proyectos que se omitieron porque las políticas de la organización o las restricciones de los Controles del servicio de VPC impiden que el analizador acceda a los recursos. Cuando se omite un proyecto, Security Command Center genera uno o más resultados de la clase SCC_ERROR.
  • Recursos expuestos: Es el recuento total de destinos de recursos únicos identificados como accesibles públicamente.
  • Puertos públicos expuestos: Es el recuento total de puertos externos activos distintos detectados en tus recursos expuestos.

Cómo identificar el tráfico de los analizadores en tus registros

Cuando External Exposure analiza de forma activa tus recursos externos, es posible que observes solicitudes de análisis entrantes en los registros de tu servicio, como los registros de solicitudes de Cloud Run en Cloud Logging.

Para verificar que las solicitudes entrantes provienen de External Exposure y no de terceros no autorizados, inspecciona la entrada de registro del campo userAgent en httpRequest. Todas las solicitudes activas del servicio se identifican con el agente de usuario TsunamiSecurityScanner.

En el siguiente ejemplo, se muestra una entrada de registro de solicitud de Cloud Logging que se genera cuando External Exposure analiza un servicio de Cloud Run expuesto:

{
  "httpRequest": {
    "latency": "0.004745622s",
    "protocol": "HTTP/1.1",
    "remoteIp": "2600:1900:4180:5b2:0:1ae::",
    "requestMethod": "POST",
    "requestSize": "441",
    "requestUrl": "https://SERVICE_URL/mcp",
    "responseSize": "131",
    "serverIp": "2600:1900:4244:200::",
    "status": 405,
    "userAgent": "TsunamiSecurityScanner"
  },
  "insertId": "6a16af86000c7e0d0fdc1c58",
  "labels": {
    "goog-managed-by": "cloudfunctions",
    "goog-serve-source": "user-container"
  },
  "logName": "projects/PROJECT_ID/logs/run.googleapis.com%2Frequests",
  "receiveTimestamp": "2026-05-27T08:47:03.025492782Z",
  "resource": {
    "labels": {
      "configuration_name": "SERVICE_NAME",
      "location": "us-central1",
      "project_id": "PROJECT_ID",
      "revision_name": "REVISION_NAME",
      "service_name": "SERVICE_NAME"
    },
    "type": "cloud_run_revision"
  },
  "severity": "WARNING",
  "timestamp": "2026-05-27T08:47:02.811254Z"
}

Rendimiento y limitaciones

  • Recursos compatibles: Instancias de Compute Engine, servicios de Google Kubernetes Engine (GKE) y controladores de entrada, bases de datos, incluidas Cloud SQL y AlloyDB para PostgreSQL, clústeres de Managed Service para Apache Spark, Cloud Run, Cloud Storage y Gemini Enterprise Agent Platform Workbench.
  • Intervalo de actualización: Para obtener información sobre la frecuencia de análisis de la Exposición externa, consulta Cuándo se deben esperar hallazgos en Security Command Center.
  • Puertos analizados: External Exposure analiza automáticamente los servicios que se ejecutan en un valor de referencia predefinido de puertos comunes, agrupados principalmente por tipo de servicio o protocolo:
    • Administrativo / shell: 22 (SSH), 23 (Telnet), 3389 (RDP)
    • Web / HTTP(S): 80, 443, 8000, 8080, 8081, 8443, 8800, 9000, 9443
    • Bases de datos: 1433, 1521, 3306, 5432, 9200, 11211, 27017, 6379
    • Kubernetes y puertas de enlace de servicio: 6443, 10250, 10255, 15020 y 15021
    • Otros servicios y herramientas comunes para desarrolladores: 1099, 1880, 2323, 2375, 2376, 2379, 2746, 3000, 3100, 4040, 5000, 5173, 5678, 6006, 6274, 7001, 7002, 7077, 7860, 8001, 8042, 8083, 8088, 8090, 8111, 8123, 8153, 8154, 8188, 8265, 8500, 8501, 8787, 8888, 8890, 8983, 9001, 9010, 9090, 9091, 9092, 9100, 9870, 9876, 11434, 15672, 18080, 54321 y 61616.
  • Puertos personalizados: Además de los puertos estándar, puedes configurar hasta 32 puertos personalizados por proyecto para el análisis. Para obtener más información, consulta Configura puertos personalizados.
  • Estadísticas de la ruta de red: El informe de resultados muestra una ruta de red para un recurso expuesto.
  • VM con balanceo de cargas: Si varias instancias de VM están conectadas a un balanceador de cargas, los hallazgos se informan solo para una de las instancias de VM.
  • Priorización de hallazgos de Cloud Run: Debido a que cada implementación de Cloud Run recibe una URL pública de forma predeterminada, los hallazgos se evalúan en función de las políticas de IAM y de Identity-Aware Proxy (IAP). Si una carga de trabajo está protegida por IAM o IAP (y devuelve una respuesta HTTP 403 no autorizada), la gravedad del hallazgo se reduce a LOW para reducir el ruido informativo.
  • Estadísticas de la ruta de exposición de la red: Los hallazgos no incluyen estadísticas de la ruta de exposición de la red cuando External Exposure está activada a nivel del proyecto. Para recibir estadísticas sobre la ruta de exposición de la red, activa el servicio a nivel de la organización o la carpeta.