Utiliser le service External Exposure pour détecter les ressources exposées

Security Command Center External Exposure est un service Google Cloud qui vous aide à gérer et à réduire votre surface d'attaque externe grâce à la découverte automatisée et à la validation des risques.

Étant donné que les scanners automatisés peuvent cibler les ressources exposées sur Internet en quelques minutes, External Exposure découvre de manière proactive les expositions accidentelles et les ressources fantômes avant que les pirates informatiques ne puissent les découvrir et les exploiter.

En analysant votre environnement d'un point de vue externe, le service tente de confirmer ce qui est réellement accessible depuis Internet et d'identifier les expositions qui sont réellement exploitables.

External Exposure recherche en permanence les adresses IP, les noms d'hôte, les noms de domaine et les URL accessibles depuis l'extérieur dans votre environnement Google Cloud. Cette fonctionnalité utilise l'analyse du réseau pour confirmer les ressources et applications accessibles depuis l'Internet public.

Pour chaque exposition confirmée, External Exposure effectue les opérations suivantes :

  • Trace et affiche le chemin réseau Google Cloud pour les équilibreurs de charge externes, les règles Google Cloud Armor, les règles de pare-feu, Private Service Connect, Cloud Interconnect et les services de backend jusqu'à la ressource exposée.

    Cette ressource peut être une instance Compute Engine ou un pod Google Kubernetes Engine (GKE), y compris un service ou une application exposés.

    Cette intégration étroite à la structure réseau Google permet de fournir un contexte exploitable pour que vous puissiez appliquer immédiatement des mesures d'atténuation préventives, comme le verrouillage d'une règle de pare-feu spécifique ou la configuration de Google Cloud Armor.

  • Effectue une empreinte digitale pour tenter d'identifier l'application Web ou le logiciel de serveur spécifiques qui s'exécutent sur chaque asset exposé.

  • S'il peut identifier le service ou le logiciel exposé, il identifie les éventuelles failles connues qui l'affectent.

  • Utilise des détecteurs passifs et actifs avancés pour tester l'exploitabilité réelle en validant les failles, les erreurs de configuration et l'utilisation d'identifiants par défaut ou faibles.

Avant de commencer

Cette section explique comment préparer votre environnement à l'utilisation de l'exposition externe.

Activer l'API Security Center Management

Si vous prévoyez d'utiliser les API Security Command Center, vous devez activer l'API Security Center Management pour votre projet de quota et, si des règles d'administration sont utilisées pour limiter l'utilisation des API, assurez-vous que l'API Security Center Management est autorisée. L'API Security Center Management permet de contrôler l'état d'activation des services Security Command Center, comme External Exposure.

  1. Dans un terminal, activez l'API Security Center Management pour votre projet de quota :

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

    Remplacez QUOTA_PROJECT_ID par l'ID du projet que vous utilisez pour gérer le quota.

  2. Si vous avez des règles d'administration qui limitent l'utilisation des API, assurez-vous que l'API Security Center Management est autorisée. Pour en savoir plus, consultez Examiner les règles d'administration.

  3. Si vous souhaitez recevoir des insights sur le chemin d'exposition du réseau dans vos résultats, assurez-vous d'activer External Exposure au niveau de l'organisation ou du dossier.

Rôles requis

Pour obtenir les autorisations nécessaires pour configurer External Exposure et afficher les données du tableau de bord, demandez à votre administrateur de vous accorder les rôles IAM suivants sur votre organisation, votre dossier ou votre projet :

Pour en savoir plus sur l'attribution de rôles, consultez Gérer l'accès aux projets, aux dossiers et aux organisations.

Vous pouvez également obtenir les autorisations requises avec des rôles personnalisés ou d'autres rôles prédéfinis.

Les commandes Google Cloud CLI suivantes peuvent être utilisées pour attribuer les rôles précédents à un utilisateur :

Attribuer des rôles à l'aide de la gcloud CLI

  • Pour attribuer le rôle Administrateur du centre de sécurité à un utilisateur, exécutez la commande suivante :

    gcloud organizations add-iam-policy-binding ORGANIZATION_ID \
        --member=user:USER_EMAIL_ID \
        --role=roles/securitycenter.admin
    
  • Pour attribuer le rôle Lecteur administrateur du centre de sécurité à un utilisateur, exécutez la commande suivante :

    gcloud organizations add-iam-policy-binding ORGANIZATION_ID \
        --member=user:USER_EMAIL_ID \
        --role=roles/securitycenter.adminViewer
    
  • Pour attribuer le rôle Lecteur de l'exposition externe à un utilisateur afin qu'il puisse accéder aux métriques CLI ou API, exécutez la commande suivante :

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

    Remplacez les éléments suivants :

    • ORGANIZATION_ID : ID numérique d'organisation
    • PROJECT_ID : ID du projet
    • USER_EMAIL_ID : adresse e-mail de l'utilisateur qui demande l'accès

Activer et configurer le service

Pour activer et configurer External Exposure, effectuez les tâches décrites dans les sections suivantes.

Vous pouvez activer et configurer le service au niveau de l'organisation, d'un dossier ou d'un projet. Lorsque vous utilisez l'API, si vous souhaitez configurer des paramètres au niveau du dossier ou de l'organisation plutôt qu'au niveau du projet, remplacez projects/PROJECT_ID par folders/FOLDER_ID ou organizations/ORGANIZATION_ID dans toutes les URL de requête et les paramètres de données JSON.

Activer External Exposure

Activez External Exposure pour votre organisation, votre dossier ou votre projet.

Une fois le service activé, assurez-vous d'accorder à l'agent de service les autorisations requises, comme décrit dans Accorder des autorisations à l'agent de service.

Console

  1. Dans la console Google Cloud , accédez à la page Activation du service pour External Exposure.

    Accéder à "Activation des services"

  2. Sélectionnez votre organisation ou votre projet.

  3. Dans l'onglet Activation des services, dans la colonne Exposition externe, sélectionnez l'état d'activation de l'organisation, du dossier ou du projet que vous souhaitez modifier, puis sélectionnez l'une des options suivantes :

    • Activer : activez l'exposition externe.
    • Désactiver : désactive l'exposition externe.
    • Hériter : hérite des paramètres de la ressource parente, à moins qu'ils ne soient remplacés sur la ressource enfant.

gcloud

Activez l'API Security Center Management et activez External Exposure pour votre champ d'application cible.

  1. Dans un terminal, activez l'API pour votre projet de quota :

    gcloud services enable securitycentermanagement.googleapis.com \
        --project=QUOTA_PROJECT_ID
    
  2. Dans un terminal, activez External Exposure à l'aide de l'API 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
    

    Remplacez les éléments suivants :

    • QUOTA_PROJECT_ID : ID du projet que vous utilisez pour gérer les quotas.
    • PROJECT_ID : ID du projet pour lequel vous souhaitez activer External Exposure.

Accorder des autorisations à l'agent de service

En fonction du niveau de ressource auquel vous activez le service, Google Cloudgénère un agent de service :

  • Au niveau de l'organisation ou du dossier : un agent de service au niveau de l'organisation ou du dossier est créé.
  • Au niveau du projet : un agent de service est créé au niveau du projet.

Pour accorder des autorisations au niveau de l'organisation, exécutez la commande gcloud suivante dans un 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

Remplacez ORGANIZATION_ID par l'ID numérique de votre organisation.

Pour accorder des autorisations au niveau du dossier, exécutez la commande gcloud suivante dans un 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

Remplacez FOLDER_ID par l'ID numérique de votre dossier.

Accorder l'accès entrant aux périmètres de service

Si vous utilisez VPC Service Controls, accordez à l'agent de service "Exposition externe" un accès entrant à tous les périmètres de service qui protègent les projets que vous souhaitez analyser. Si vous n'accordez pas l'accès entrant, External Exposure ne peut pas effectuer d'analyses ni générer de résultats pour les projets protégés par des périmètres de service.

Selon le niveau de ressource où le service est activé, l'identifiant du compte de service utilise l'un des formats d'adresse e-mail suivants :

  • Pour les organisations ou les dossiers :

    service-RESOURCE_KEYWORD-RESOURCE_ID@gcp-sa-ee-hpsa.iam.gserviceaccount.com
    
  • Pour les projets :

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

Remplacez les éléments suivants :

  • RESOURCE_KEYWORD : mot clé org ou folder
  • RESOURCE_ID : ID de l'organisation ou du dossier
  • PROJECT_NUMBER : numéro du projet

Si vous disposez d'un compte de service à la fois au niveau de l'organisation et au niveau du projet, appliquez les étapes suivantes aux deux comptes.

Pour accorder l'accès, ajoutez une règle d'entrée à chaque périmètre de service bloquant :

  1. Dans la console Google Cloud , accédez à la page VPC Service Controls :

    Accéder à VPC Service Controls

  2. Sélectionnez la règle d'accès bloquante et le périmètre de service.

  3. Cliquez sur Modifier, puis sur Règle d'entrée.

  4. Cliquez sur Ajouter une règle d'entrée et configurez le bloc De :

    1. Pour Identité, sélectionnez Identités et groupes sélectionnés.
    2. Saisissez l'adresse e-mail du compte de service External Exposure.
    3. Pour Source, sélectionnez Toutes les sources.
  5. Configurez le blocage À de la règle :

    1. Pour Projet, sélectionnez Tous les projets.
    2. Pour Opérations ou rôles IAM, sélectionnez Toutes les opérations.
  6. Cliquez sur Enregistrer.

Configurer des ports personnalisés

Configurez jusqu'à 32 ports personnalisés par projet à analyser en plus des ports de référence :

Console

  1. Dans la console Google Cloud , accédez à la page Activation de services :

    Accéder à "Activation des services"

  2. Sélectionnez votre organisation ou votre projet.

  3. Dans la colonne External Exposure de la ligne que vous souhaitez modifier, cliquez sur Paramètres.

  4. Dans le champ Ports personnalisés, saisissez les numéros de port séparés par une virgule.

  5. Cliquez sur Enregistrer.

gcloud

Pour configurer des ports personnalisés pour l'analyse, incluez service_config dans updateMask et spécifiez les entiers de port dans le wrapper de tableau ports sous l'objet serviceConfig. L'exemple suivant configure les ports personnalisés 8081 et 8188 pour l'analyse :

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

Remplacez les éléments suivants :

  • QUOTA_PROJECT_ID : ID du projet que vous utilisez pour gérer les quotas.
  • PROJECT_ID : ID du projet dans lequel vous souhaitez configurer des ports personnalisés.

Configurer les modules d'analyse

Configurez des modules d'analyse spécifiques à activer ou désactiver :

Console

  1. Dans la console Google Cloud , accédez à la page Activation de services :

    Accéder à "Activation des services"

  2. Sélectionnez votre organisation ou votre projet.

  3. Dans la colonne External Exposure de la ligne que vous souhaitez modifier, cliquez sur Paramètres.

  4. Dans la section Modules d'analyse, cochez la case pour activer ou désactiver chaque module (par exemple, les interfaces exposées, les API, les identifiants faibles ou l'exécution de code à distance).

  5. Cliquez sur Enregistrer.

gcloud

Pour activer ou désactiver des modules spécifiques, incluez modules dans updateMask et spécifiez l'état d'activation de chaque module dans l'objet modules. L'exemple suivant active EXTERNALLY_EXPOSED_RCE_VULNERABILITY et désactive 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

Remplacez les éléments suivants :

  • QUOTA_PROJECT_ID : ID du projet que vous utilisez pour gérer les quotas.
  • PROJECT_ID : ID du projet dans lequel vous souhaitez configurer les modules.

Vous ne pouvez configurer les états d'activation que pour les modules suivants :

  • EXTERNALLY_EXPOSED_UI
  • EXTERNALLY_EXPOSED_API
  • EXTERNALLY_EXPOSED_WEAK_CREDENTIALS
  • EXTERNALLY_EXPOSED_RCE_VULNERABILITY
  • EXTERNALLY_EXPOSED_ARBITRARY_DATA_READ

Tous les autres modules External Exposure (y compris les vérifications du stockage de base de données, de charge de travail sans serveur et d'équilibreur de charge) sont activés par défaut et n'apparaissent pas sur la page de configuration des modules.

Une fois l'option "Exposition externe" activée, des analyses par lot continues s'exécutent automatiquement pour identifier les adresses IP externes exposées, les services en cours d'exécution et les failles actives.

Examiner les résultats

Une fois l'External Exposure activée, vous pouvez afficher les résultats dans la consoleGoogle Cloud . Dans Security Command Center, accédez à la page Présentation des risques et consultez le tableau de bord External Exposure. Ce tableau de bord est disponible lorsque votre champ d'application est défini sur une organisation, un dossier ou un projet. Pour en savoir plus sur ce tableau de bord, consultez Évaluer les risques en un coup d'œil.

Pour récupérer les résultats actifs d'External Exposure à l'aide de la CLI, exécutez la commande suivante :

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

Remplacez PROJECT_ID par l'ID du projet dans lequel vous souhaitez afficher les résultats.

Comprendre les détails des résultats

Les résultats appartenant à la classe EXTERNAL_EXPOSURE identifient le type de risque et la manière dont la ressource est exposée.

Pour obtenir la liste des catégories de risque précises générées pour ces résultats (telles que EXTERNALLY_EXPOSED_VM_INSTANCE ou EXTERNALLY_EXPOSED_SERVERLESS_WORKLOAD), consultez Résultats External Exposure.

Tous les résultats de la classe EXTERNAL_EXPOSURE incluent les informations suivantes :

  • Service exposé : application Web, logiciel serveur ou protocole spécifique identifié sur le port actif.
  • Insights sur le chemin réseau : la connectivité de traçage du chemin réseau depuis l'Internet public via les équilibreurs de charge, les règles de transfert et les services de backend jusqu'à l'asset cible.
  • Point de terminaison exposé : ressource cible sous-jacente (par exemple, une instance Compute Engine ou un pod Google Kubernetes Engine (GKE)).

Si la version du service ou du logiciel exposé peut être identifiée, le résultat liste également les éventuelles failles CVE qui l'affectent.

Prioriser les résultats avec les scores d'exposition aux attaques

Les résultats d'External Exposure s'intègrent aux simulations de chemin d'attaque pour vous aider à identifier les points d'entrée confirmés et réels dans votre environnement. Lorsqu'une exposition confirmée est associée à un chemin de mouvement latéral potentiel (par exemple, un compte de service exposé pouvant accéder à une base de données BigQuery ou à un bucket Cloud Storage sensibles), le résultat reçoit un score d'exposition aux attaques. Vous pouvez utiliser ce score pour hiérarchiser la correction des expositions qui présentent le plus grand risque pour vos ressources à forte valeur.

Surveiller les métriques d'analyse

Pour vous aider à vérifier que la fonctionnalité External Exposure fonctionne correctement dans votre environnement, la console affiche des métriques d'analyse par lot en continu :

  • Dernière analyse : code temporel du cycle d'analyse le plus récent, qui confirme que les résultats reflètent une vue actuelle de vos ressources.
  • Prochaine analyse : heure de début prévue du prochain cycle d'analyse.
  • Projets réussis : nombre total de projets analysés avec succès lors du dernier cycle d'analyse.
  • Projets exclus : nombre total de projets ignorés, car des règles d'administration ou des contraintes VPC Service Controls empêchent le scanner d'accéder aux ressources. Lorsqu'un projet est ignoré, Security Command Center génère un ou plusieurs résultats de la classe SCC_ERROR.
  • Ressources exposées : nombre total de cibles de ressources uniques identifiées comme accessibles au public.
  • Ports publics exposés : nombre total de ports externes actifs distincts détectés dans vos ressources exposées.

Identifier le trafic des analyseurs dans vos journaux

Lorsque External Exposure analyse activement vos ressources exposées en externe, vous pouvez observer des demandes d'analyse entrantes dans les journaux de vos services, tels que les journaux de requêtes Cloud Run dans Cloud Logging.

Pour vérifier que les requêtes entrantes proviennent d'External Exposure et non de tiers non autorisés, inspectez l'entrée de journal pour le champ userAgent sous httpRequest. Toutes les requêtes actives du service s'identifient avec l'agent utilisateur TsunamiSecurityScanner.

L'exemple suivant montre une entrée de journal de requêtes Cloud Logging générée lorsque External Exposure analyse un service Cloud Run exposé :

{
  "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"
}

Performances et limites

  • Ressources compatibles : instances Compute Engine, services Google Kubernetes Engine (GKE) et contrôleurs Ingress, bases de données (y compris Cloud SQL et AlloyDB pour PostgreSQL), clusters Managed Service for Apache Spark, Cloud Run, Cloud Storage et Gemini Enterprise Agent Platform Workbench.
  • Intervalle d'actualisation : pour en savoir plus sur la fréquence d'analyse de l'External Exposure, consultez Quand attendre les résultats dans Security Command Center.
  • Ports analysés : External Exposure recherche automatiquement les services exécutés sur une base de référence prédéfinie de ports courants, principalement regroupés par type de service ou protocole :
    • Administratif / Shell : 22 (SSH), 23 (Telnet), 3389 (RDP)
    • Web / HTTP(S) : 80, 443, 8000, 8080, 8081, 8443, 8800, 9000, 9443
    • Bases de données : 1433, 1521, 3306, 5432, 9200, 11211, 27017, 6379
    • Kubernetes et passerelles de service : 6443, 10250, 10255, 15020, 15021
    • Autres outils et services de développement courants : 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 et 61616.
  • Ports personnalisés : en plus des ports standards, vous pouvez configurer jusqu'à 32 ports personnalisés par projet pour l'analyse. Pour en savoir plus, consultez Configurer des ports personnalisés.
  • Insights sur le chemin réseau : le rapport sur les résultats indique un chemin réseau pour une ressource exposée.
  • VM avec équilibrage de charge : si plusieurs instances de VM sont connectées à un équilibreur de charge, les résultats ne sont signalés que pour l'une des instances de VM.
  • Priorisation des résultats Cloud Run : étant donné que chaque déploiement Cloud Run reçoit une URL publique par défaut, les résultats sont évalués par rapport aux règles IAM et Identity-Aware Proxy (IAP). Si une charge de travail est protégée par IAM ou IAP (et renvoie une réponse HTTP 403 non autorisée), le niveau de gravité du résultat est rétrogradé à LOW pour réduire le bruit informationnel.
  • Insights sur le chemin d'exposition réseau : les résultats n'incluent pas les insights sur le chemin d'exposition réseau lorsque External Exposure est activé au niveau du projet. Pour recevoir des insights sur le chemin d'exposition au réseau, activez le service au niveau de l'organisation ou du dossier.