Intégrer Pub/Sub à Google SecOps
Ce document explique comment intégrer Pub/Sub à Google Security Operations.
Cas d'utilisation
L'intégration Pub/Sub est compatible avec les cas d'utilisation suivants :
Ingestion automatisée des alertes : récupérez en continu les journaux de sécurité, les alertes et les données télémétriques publiés dans les sujets Pub/Sub pour les ingérer dans Google SecOps en tant que demandes.
Orchestration de sécurité centralisée : consolidez le routage des événements de sécurité via Pub/Sub depuis les systèmes cloud et tiers pour déclencher des playbooks de réponse automatisés.
Avant de commencer
Avant de configurer l'intégration Pub/Sub dans Google SecOps, effectuez les étapes préalables suivantes :
Attribuez les rôles IAM (Identity and Access Management) nécessaires à votre compte de service.
Choisissez et configurez l'une des méthodes d'authentification suivantes :
Option 1 : Workload Identity (recommandée) : cette méthode utilise des jetons éphémères avec l'emprunt d'identité d'un compte de service.
Option 2 : clé JSON du compte de service : cette méthode repose sur un fichier de clé secrète statique et durable.
Créer un compte de service
Dans la console Google Cloud , accédez à IAM et administration > Comptes de service.
Cliquez sur Ajouter > Créer un compte de service.
Indiquez un nom et une description, puis cliquez sur OK. Notez l'adresse e-mail du compte de service.
Attribuer des rôles IAM
L'octroi d'autorisations permet à l'intégration d'afficher et d'extraire les messages de vos abonnements. Pour attribuer le rôle standard, procédez comme suit :
Dans la console Google Cloud , accédez à IAM.
Recherchez votre compte de service, puis cliquez sur Modifier le compte principal (modifier).
Cliquez sur Ajouter un autre rôle, puis sélectionnez Lecteur Pub/Sub (
roles/pubsub.viewer).Cliquez sur Enregistrer.
Configurer les identifiants Workload Identity
Workload Identity est l'approche recommandée, car elle utilise des jetons d'accès éphémères avec l'emprunt d'identité d'un compte de service.
Identifier l'identité unique de l'instance
Pour établir une connexion, vous devez autoriser votre instance Google SecOps à emprunter l'identité de votre compte de service.
Dans Google SecOps, accédez à Plate-forme de contenu > Intégrations de réponse.
Sélectionnez l'intégration Pub/Sub, puis saisissez l'adresse e-mail de votre compte de service dans Adresse e-mail Workload Identity.
Cliquez sur Enregistrer > Tester. Le test devrait échouer.
Cliquez sur close_small à côté du bouton Tester, puis recherchez l'adresse e-mail de l'identité commençant par
gke-init-python@...ousoar-python@....Copiez cette adresse e-mail unique.
Autoriser l'identité de l'instance dans Google Cloud
Dans la console Google Cloud , accédez à IAM et administration > Comptes de service.
Sélectionnez le compte de service cible, puis accédez à Autorisations > Accorder l'accès.
Collez l'adresse e-mail unique dans Nouveaux comptes principaux, puis attribuez le rôle Créateur de jetons du compte de service (
roles/iam.serviceAccountTokenCreator).
Accorder l'accès au projet de quota
L'authentification avec une Workload Identity nécessite un Quota Project ID pour suivre l'utilisation de l'API et la facturation.
Dans la console Google Cloud , accédez à IAM pour le projet utilisé comme projet de quota.
Recherchez votre compte de service, puis cliquez sur Modifier le compte principal (modifier).
Cliquez sur Ajouter un autre rôle, puis sélectionnez Consommateur Service Usage (
roles/serviceusage.serviceUsageConsumer).Cliquez sur Enregistrer.
Configurer une clé JSON
Les fichiers de clés secrètes statiques et de longue durée nécessitent une rotation manuelle. N'utilisez cette méthode que si l'authentification Workload Identity n'est pas disponible.
Dans la console Google Cloud , accédez à IAM et administration > Comptes de service, puis sélectionnez votre compte de service.
Accédez à l'onglet Clés, puis cliquez sur Ajouter une clé > Créer une clé.
Sélectionnez JSON, puis cliquez sur Créer. Le navigateur télécharge le fichier JSON sur votre ordinateur.
Paramètres d'intégration
L'intégration Pub/Sub nécessite les paramètres suivants :
| Paramètre | Description |
|---|---|
Workload Identity Email |
Facultatif. Adresse e-mail du client de votre compte de service. Ne configurez ce paramètre que si vous vous authentifiez à l'aide d'une identité de charge de travail. Si elle est configurée, vous devez également fournir un |
Service Account JSON File Content |
Facultatif. Contenu complet du fichier JSON de clé de compte de service. Configurez ce paramètre pour l'authentification par clé de compte de service. |
Quota Project ID |
Facultatif. ID du projet utilisé pour l'utilisation de l'API et la facturation. Ce paramètre est obligatoire lorsque vous utilisez l'authentification Workload Identity. Si aucune valeur n'est fournie, l'intégration récupère l'ID à partir des identifiants du compte de service. |
Project ID |
Facultatif. ID du projet à cibler dans Pub/Sub. Si aucune valeur n'est fournie, l'intégration récupère l'ID à partir des identifiants du compte de service. |
Verify SSL |
Obligatoire. Valide le certificat SSL pour la connexion au serveur. Cette option est activée par défaut. |
Pour obtenir des instructions sur la configuration d'une intégration dans Google SecOps, consultez Configurer des intégrations.
Vous pourrez apporter des modifications ultérieurement, si nécessaire. Une fois que vous avez configuré une instance d'intégration, vous pouvez l'utiliser dans des playbooks. Pour savoir comment configurer et prendre en charge plusieurs instances, consultez Prise en charge de plusieurs instances.
Actions
Pour en savoir plus sur les actions, consultez Répondre aux actions en attente dans Votre bureau et Effectuer une action manuelle.
Ping
Utilisez l'action "Ping" pour tester la connectivité à Pub/Sub.
Cette action ne s'applique pas aux entités Google SecOps.
Entrées d'action
Aucune.
Sorties d'action
L'action Ping fournit les résultats suivants :
| Type de sortie de l'action | Disponibilité |
|---|---|
| Pièce jointe du mur des cas | Non disponible |
| Lien vers le mur des cas | Non disponible |
| Tableau du mur des cas | Non disponible |
| Table d'enrichissement | Non disponible |
| Résultat JSON | Non disponible |
| Messages de sortie | Disponible |
| Résultat du script | Disponible |
Messages de sortie
L'action Ping peut renvoyer les messages de résultat suivants :
| Message de sortie | Description du message |
|---|---|
Successfully connected to the Pub/Sub server with the
provided connection parameters! |
L'action a réussi. |
Failed to connect to the Pub/Sub server! Error is
ERROR_REASON |
Échec de l'action. Vérifiez la connexion au serveur, les paramètres d'entrée ou les identifiants. |
Résultat du script
Le tableau suivant répertorie la valeur du résultat du script lorsque vous utilisez l'action Ping :
| Nom du résultat du script | Valeur |
|---|---|
is_success |
True ou False |
Connecteurs
Pour obtenir des instructions détaillées sur la configuration d'un connecteur dans Google SecOps, consultez Ingérer vos données (connecteurs).
Connecteur Pub/Sub – Messages
Dans la plate-forme Google SecOps, le connecteur Pub/Sub – Messages est appelé Connecteur PubSub – Messages.
Utilisez le connecteur Messages Pub/Sub pour récupérer les messages de Pub/Sub.
Mappage de la gravité JSON
Pour mapper la gravité de l'alerte, vous devez spécifier le champ utilisé par le connecteur Pub/Sub – Messages pour obtenir la valeur de gravité dans le paramètre Severity Mapping JSON. La réponse du connecteur peut contenir des types de valeurs, tels que integer, float et string.
Le connecteur de messages Pub/Sub lit les valeurs integer et float et les mappe en fonction des paramètres Google SecOps. Le tableau suivant indique le mappage des valeurs integer à la gravité dans Google SecOps :
| Valeur entière | Gravité mappée |
|---|---|
100 |
Critical |
Du 80 au 100 |
High |
Du 60 au 80 |
Medium |
Du 40 au 60 |
Low |
Moins de 40 |
Informational |
Si la réponse contient la valeur string, le connecteur Pub/Sub – Messages nécessite une configuration supplémentaire.
Au départ, la valeur par défaut s'affiche comme suit :
{
"Default": 60
}
Si les valeurs requises pour le mappage se trouvent dans la clé JSON event_severity, elles peuvent être les suivantes :
"Malicious""Benign""Unknown"
Pour analyser les valeurs de clé JSON event_severity et vous assurer que l'objet JSON est au bon format, configurez le paramètre Severity Mapping JSON comme suit :
{
"event_severity": {
"Malicious": 100,
"Unknown": 60,
"Benign": -1
},
"Default": 50
}
La valeur "Default" est obligatoire.
Dans le cas où plusieurs correspondances sont trouvées pour le même objet JSON, le connecteur Pub/Sub – Messages donne la priorité à la première clé d'objet JSON.
Pour utiliser des champs contenant des valeurs integer ou float, configurez la clé et une chaîne vide dans le paramètre Severity Mapping JSON :
{
"Default":"60",
"integer_field": "",
"float_field": ""
}
Entrées du connecteur
Le connecteur Pub/Sub – Messages nécessite les paramètres suivants :
| Paramètre | Description |
|---|---|
Product Field Name |
Obligatoire Nom du champ dans lequel le nom du produit est stocké. La valeur par défaut est |
Event Field Name |
Obligatoire Nom du champ utilisé pour déterminer le nom de l'événement (sous-type). La valeur par défaut est |
Environment Field Name |
Optional
Nom du champ dans lequel le nom de l'environnement est stocké. Si le champ d'environnement n'est pas trouvé, l'environnement est défini sur l'environnement par défaut. La valeur par défaut est |
Environment Regex Pattern |
Optional
Modèle d'expression régulière à exécuter sur la valeur trouvée dans le champ Utilisez la valeur par défaut Si le modèle d'expression régulière est nul ou vide, ou si la valeur de l'environnement est nulle, l'environnement par défaut est sélectionné. |
PythonProcessTimeout |
Obligatoire Délai avant expiration (en secondes) du processus Python exécutant le script actuel. La valeur par défaut est |
Service Account JSON File Content |
Optional Contenu du fichier JSON de clé de compte de service. Vous pouvez configurer ce paramètre ou le paramètre Pour configurer ce paramètre, indiquez le contenu complet du fichier JSON de la clé de compte de service que vous avez téléchargé lors de la création d'un compte de service. Pour le connecteur Pub/Sub – Messages, l'authentification avec le fichier JSON de clé de compte de service est prioritaire par rapport à la fédération d'identité de charge de travail. |
Workload Identity Email |
Optional Adresse e-mail du client de votre compte de service. Vous pouvez configurer ce paramètre ou le paramètre Pour emprunter l'identité de comptes de service avec la fédération d'identité de charge de travail, accordez le rôle |
Project ID |
Optional ID du projet à utiliser dans le connecteur. |
Quota Project ID |
Optional ID du projet Google Cloud que vous utilisez pour les API Google Cloud et la facturation. Ce paramètre nécessite que vous accordiez le rôle L'intégration associe cette valeur de paramètre à toutes les requêtes API. |
Subscription ID |
Obligatoire ID de l'abonnement Pub/Sub. |
Case Name Template |
Optional Nom personnalisé de la demande. Lorsque vous configurez ce paramètre, le connecteur ajoute une clé nommée Vous pouvez fournir des espaces réservés au format suivant :
Exemple : Pour les espaces réservés, le connecteur utilise le premier événement Google SecOps. Le connecteur ne gère que les clés contenant la valeur de chaîne. Pour configurer ce paramètre, spécifiez les champs d'événement sans préfixes. |
Alert Name Template |
Obligatoire Nom de l'alerte personnalisée. Vous pouvez fournir des espaces réservés au format suivant :
Exemple : Pour les espaces réservés, le connecteur utilise le premier événement Google SecOps. Le connecteur ne gère que les clés contenant la valeur de chaîne. Si vous ne fournissez aucune valeur ou si vous utilisez un modèle non valide, le connecteur utilise une valeur de remplacement au format suivant : |
Rule Generator Template |
Obligatoire Un générateur de règles personnalisées. Vous pouvez fournir des espaces réservés au format suivant :
Exemple : Pour les espaces réservés, le connecteur utilise le premier événement Google SecOps. Le connecteur ne gère que les clés contenant la valeur de chaîne. Si vous ne fournissez aucune valeur ou si vous utilisez un modèle non valide, le connecteur utilise une valeur de remplacement au format suivant : |
Timestamp Field |
Obligatoire Nom du champ permettant de définir le code temporel de l'alerte Google SecOps. Si le code temporel n'utilise pas le format de l'epoch Unix, définissez le format du code temporel dans le paramètre La valeur par défaut est |
Timestamp Format |
Optional Format de l'horodatage du message. Le connecteur a besoin de l'horodatage pour traiter correctement le message. Si le code temporel n'utilise pas le format de code temporel epoch Unix et que vous ne configurez pas de format de code temporel, le connecteur échoue. La valeur par défaut est |
Severity Mapping JSON |
Obligatoire Objet JSON qui définit la façon dont le connecteur extrait le niveau de gravité du message. La valeur par défaut est la suivante : { "Default": "60" } Pour en savoir plus sur le mappage de la gravité, consultez Mappage de la gravité JSON. |
Unique ID Field |
Optional Nom du champ permettant de confirmer que le message est unique. Vous pouvez utiliser le mot clé réservé |
Max Messages To Fetch |
Obligatoire Nombre maximal de messages à traiter pour chaque itération du connecteur. La valeur par défaut est |
Disable Overflow |
Optional Si cette option est sélectionnée, le connecteur ignore le mécanisme de dépassement de capacité de Google SecOps lors de la création d'alertes. Cette option est sélectionnée par défaut. |
Verify SSL |
Obligatoire Si cette option est sélectionnée, l'intégration vérifie que le certificat SSL pour la connexion à Pub/Sub est valide. Cette option est sélectionnée par défaut. |
Proxy Server Address |
Optional Adresse du serveur proxy à utiliser. |
Proxy Username |
Optional Nom d'utilisateur du proxy pour l'authentification. |
Proxy Password |
Optional Mot de passe du proxy pour l'authentification. |
Règles du connecteur
Le connecteur Pub/Sub – Messages est compatible avec les proxys.
Événements de connecteur
L'exemple suivant montre la sortie JSON d'un événement Google SecOps généré par le connecteur Messages Pub/Sub :
{
"notificationConfigName": "organizations/ORGANIZATION_ID/notificationConfigs/soar_connector_toxic_notifications_config",
"finding": {
"name": "organizations/ORGANIZATION_ID/sources/SOURCE_ID/findings/FINDING_ID",
"parent": "organizations/ORGANIZATION_ID/sources/SOURCE_ID",
"resourceName": "//compute.googleapis.com/projects/PROJECT_ID/global/firewalls/FIREWALL_ID",
"state": "ACTIVE",
"category": "OPEN_NETBIOS_PORT",
"externalUri": "https://console.cloud.google.com/networking/firewalls/details/default-allow-rdp?project\u003dPROJECT_ID",
"sourceProperties": {
"Recommendation": "Restrict the firewall rules at: https://console.cloud.google.com/networking/firewalls/details/default-allow-rdp?project\u003dPROJECT_ID",
"ExceptionInstructions": "Add the security mark \"allow_open_netbios_port\" to the asset with a value of \"true\" to prevent this finding from being activated again.",
"Explanation": "Firewall rules that allow connections from all IP addresses on TCP ports 137-139 or UDP ports 137-139 may expose NetBIOS services to attackers.",
"ScannerName": "FIREWALL_SCANNER",
"ResourcePath": [
"projects/PROJECT_ID/",
"folders/FOLDER_ID/",
"folders/FOLDER_ID/",
"organizations/ORGANIZATION_ID/"
],
"ExposedService": "NetBIOS",
"OpenPorts": {
"TCP": [
137.0,
138.0,
139.0
],
"UDP": [
137.0,
138.0,
139.0
]
},
"compliance_standards": {
"iso": [
{
"ids": [
"A.13.1.1"
]
}
],
"pci": [
{
"ids": [
"1.2.1"
]
}
],
"nist": [
{
"ids": [
"SC-7"
]
}
]
},
"ReactivationCount": 4.0
},
"securityMarks": {
"name": "organizations/ORGANIZATION_ID/sources/SOURCE_ID/findings/FINDING_ID/securityMarks",
"marks": {
"peter": "e2e1"
}
},
"eventTime": "2024-08-30T14:44:37.973090Z",
"createTime": "2024-06-24T07:08:54.777Z",
"propertyDataTypes": {
"ResourcePath": {
"listValues": {
"propertyDataTypes": [
{
"primitiveDataType": "STRING"
}
]
}
},
"ReactivationCount": {
"primitiveDataType": "NUMBER"
},
"Explanation": {
"primitiveDataType": "STRING"
},
"ExposedService": {
"primitiveDataType": "STRING"
},
"ScannerName": {
"primitiveDataType": "STRING"
}
}
}
}
Vous avez encore besoin d'aide ? Obtenez des réponses auprès des membres de la communauté et des professionnels Google SecOps.