Collecter les journaux Rubrik Security Cloud

Compatible avec :

Ce document explique comment ingérer les journaux Rubrik Security Cloud dans Google Security Operations à l'aide de webhooks. Rubrik Security Cloud (RSC) est une plate-forme SaaS de sécurité des données qui offre des fonctionnalités de sauvegarde, de récupération, de détection des anomalies et de gouvernance des données dans les environnements cloud et sur site. RSC génère des événements de sécurité, des journaux d'audit et des journaux d'activités opérationnelles au format JSON PagerDuty Common Event Format (PD-CEF) qui peuvent être envoyés à Google SecOps pour une surveillance et une analyse centralisées.

Avant de commencer

Assurez-vous de remplir les conditions suivantes :

  • Une instance Google SecOps
  • Accès privilégié à la console Rubrik Security Cloud avec les autorisations nécessaires pour gérer les webhooks
  • Connectivité réseau entre Rubrik Security Cloud et le point de terminaison du webhook Google SecOps
  • Accès à la console Google Cloud pour créer des clés API

Créer un flux de webhook dans Google SecOps

Créer le flux

  1. Accédez à Paramètres SIEM> Flux.
  2. Cliquez sur Ajouter un flux.
  3. Sur la page suivante, cliquez sur Configurer un seul flux.
  4. Dans le champ Nom du flux, saisissez un nom pour le flux (par exemple, Rubrik Security Cloud Events).
  5. Sélectionnez Webhook comme Type de source.
  6. Sélectionnez Rubrik Security Cloud comme Type de journal.
  7. Cliquez sur Suivant.
  8. Spécifiez les valeurs des paramètres d'entrée suivants :
    • Délimiteur de fractionnement (facultatif) : laissez ce champ vide, car chaque requête de webhook contient un seul événement.
    • Espace de noms de l'élément : espace de noms de l'élément.
    • Libellés d'ingestion : libellé à appliquer aux événements de ce flux.
  9. Cliquez sur Suivant.
  10. Vérifiez la configuration de votre nouveau flux sur l'écran Finaliser, puis cliquez sur Envoyer.

Générer et enregistrer la clé secrète

Après avoir créé le flux, vous devez générer une clé secrète pour l'authentification :

  1. Sur la page d'informations sur le flux, cliquez sur Générer une clé secrète.
  2. Une boîte de dialogue affiche la clé secrète.
  3. Copiez et enregistrez la clé secrète de manière sécurisée.

Obtenir l'URL du point de terminaison du flux

  1. Accédez à l'onglet Détails du flux.
  2. Dans la section Endpoint Information (Informations sur le point de terminaison), copiez l'URL du point de terminaison du flux.
  3. Enregistrez cette URL pour les étapes suivantes.
  4. Cliquez sur OK.

Créer une clé API Google Cloud

Google SecOps nécessite une clé API pour l'authentification. Créez une clé API restreinte dans la console Google Cloud .

Créer la clé API

  1. Accédez à la page Identifiants de la consoleGoogle Cloud .
  2. Sélectionnez votre projet (celui associé à votre instance Google SecOps).
  3. Cliquez sur Créer des identifiants> Clé API.
  4. Une clé API est créée et affichée dans une boîte de dialogue.
  5. Cliquez sur Modifier la clé API pour restreindre la clé.

Restreindre la clé API

  1. Sur la page des paramètres de la clé API :
    • Nom : saisissez un nom descriptif (par exemple, Google SecOps Webhook API Key).
  2. Sous Restrictions relatives aux API :
    1. Sélectionnez Restreindre la clé.
    2. Dans le menu déroulant Sélectionner des API, recherchez et sélectionnez API Google SecOps (ou API Chronicle).
  3. Cliquez sur Enregistrer.
  4. Copiez la valeur de la clé API dans le champ Clé API en haut de la page.
  5. Enregistrez la clé API de manière sécurisée.

Configurer un webhook Rubrik Security Cloud

Créer l'URL de webhook

  • Combinez l'URL du point de terminaison Google SecOps, la clé API et la clé secrète du flux. Les deux identifiants sont transmis en tant que paramètres de requête :

    <ENDPOINT_URL>?key=<API_KEY>&secret=<SECRET>
    
    • Exemple :

      https://<REGION>-chronicle.googleapis.com/v1alpha/projects/<PROJECT_NUMBER>/locations/<REGION>/instances/<INSTANCE_ID>/feeds/<FEED_ID>:importPushLogs?key=AIzaSyD...&secret=a1b2c3d4...
      

Créer un webhook dans Rubrik Security Cloud

  1. Connectez-vous à Rubrik Security Cloud à l'adresse https://<account>.my.rubrik.com.
  2. Cliquez sur l'icône en forme de roue dentée en haut à droite, puis sélectionnez Paramètres.
  3. Cliquez sur Notifications, puis sélectionnez Webhooks.
  4. Cliquez sur Add Webhook (Ajouter un webhook).
  5. L'assistant "Ajouter un webhook" s'affiche.
  6. Dans Fournisseur, sélectionnez Générique.

  7. Dans le champ Nom du webhook, saisissez un nom descriptif (par exemple, Google SecOps Integration).

  8. Dans Point de terminaison, collez l'URL complète du webhook ci-dessus, y compris les paramètres de requête key et secret. L'authentification étant effectuée par l'URL, le bouton Authentification peut rester désactivé.

  9. Cliquez sur Suivant.

  10. Cliquez sur Tester le webhook pour vérifier que la configuration du webhook spécifié fonctionne, puis cliquez sur Suivant.

  11. La fenêtre Sélectionner l'événement et la gravité s'affiche.

  12. Sélectionnez les événements que RSC envoie au point de terminaison du webhook configuré :

    1. Sous Événements, sélectionnez les types d'événements à transférer :

      • Sauvegarde
      • Récupération
      • Anomalie
      • Traque des menaces
      • Surveillance des menaces
      • Configuration
      • Diagnostic
      • Synchroniser
      • Maintenance
      • Système
    2. Sous Audit, sélectionnez les types d'audit à transférer. Les types d'audit d'authentification alimentent les mappages de connexion de l'analyseur.

    3. Sous Gravité, sélectionnez les niveaux de gravité pour déclencher les alertes :

      • Critique
      • Avertissement
      • Informationnel
  13. Cliquez sur Suivant.

  14. Vérifiez les détails de la configuration dans la fenêtre Confirmation, puis cliquez sur Enregistrer.

Vérifier que le webhook fonctionne

Vérifier l'état du webhook Rubrik Security Cloud

  1. Connectez-vous à Rubrik Security Cloud.
  2. Accédez à Paramètres> Notifications> Webhooks.
  3. Vérifiez la colonne État de votre webhook (elle doit indiquer Activé).
  4. Recherchez les éventuels messages d'erreur dans les détails du webhook.

Vérifier l'état du flux Google SecOps

  1. Accédez à Paramètres SIEM> Flux dans Google SecOps.
  2. Vérifiez la colonne État de votre flux de webhook (elle doit indiquer Actif).
  3. Vérifiez le nombre d'événements reçus (il doit augmenter).

Vérifier les journaux dans Google SecOps

  1. Accédez à Rechercher > Recherche UDM.
  2. Utilisez la requête suivante :

    metadata.vendor_name = "RUBRIK" nocase AND metadata.product_name = "RUBRIK SECURITY CLOUD" nocase
    
  3. Ajustez la période sur la dernière heure.

  4. Vérifiez que les événements apparaissent dans les résultats.

Référence de la charge utile du webhook

  • Par défaut, Rubrik Security Cloud envoie les événements au format PagerDuty Common Event Format (PD-CEF). Voici un exemple de charge utile d'événement :

    {
      "summary": "Failed backup of vSphere VM 'example-vm'.",
      "source": "Rubrik Security Cloud",
      "severity": "critical",
      "timestamp": "2024-07-18T06:39:40.46Z",
      "class": "Backup",
      "custom_details": {
        "seriesId": "ccd7a8a5-4c58-4c88-bff9-7bdffddb6099",
        "id": "c2b47274-6323-4025-b307-afed1cfb7574",
        "type": "Event",
        "objectId": "83c4a80a-4a57-5699-b399-651089135586",
        "objectName": "example-vm",
        "objectType": "VmwareVm",
        "status": "Failure",
        "clusterId": "6a271636-9392-4cba-90c5-bdbe227854ab",
        "clusterName": "production-cluster",
        "eventName": "Snapshot.BackupFailed",
        "errorId": "Snapshot.VmwareSnapshotError",
        "errorCode": "",
        "errorRemedy": "",
        "errorReason": "",
        "auditUserName": "",
        "auditUserId": "",
        "location": "vcenter.example.com",
        "url": "",
        "customerID": "rubrik-customer",
        "logicalSizeInBytes": "",
        "dataTransferredInBytes": "",
        "effectiveThroughput": ""
      }
    }
    

Limites et bonnes pratiques concernant les webhooks

Limites de requêtes

Limite Valeur
Nombre maximal de lignes de journaux uniques 1 Mo
RPS (requêtes par seconde) max. 15 000
Délai avant expiration de la requête 90 secondes
Comportement de nouvelle tentative Gestion par l'expéditeur Google SecOps renvoie un code HTTP 429 lorsque la limite de rafale est dépassée. Le système d'envoi doit mettre en mémoire tampon et réessayer.

Table de mappage UDM

Champ de journal Mappage UDM Logique
audit_info_label additional.fields Fusionné
effectiveThroughput_label additional.fields Fusionné
group_label additional.fields Fusionné
isPolarisAudit_label additional.fields Fusionné
label_name_label additional.fields Fusionné
node_label additional.fields Fusionné
orgID_label additional.fields Fusionné
snappable_name_label additional.fields Fusionné
snappable_type_label additional.fields Fusionné
snapshot_date_label additional.fields Fusionné
type_label additional.fields Fusionné
userNote_label additional.fields Fusionné
has_target extensions.auth.type Mappé : true → AUTHTYPE_UNSPECIFIED
hunt_date metadata.event_timestamp Analysé en tant que ISO8601
timestamp metadata.event_timestamp Analysé en tant que ISO8601
has_principal metadata.event_type Mappé : true → SCAN_HOST, true → STATUS_UPDATE
has_target metadata.event_type Mappé : true → USER_LOGIN
custom_details.eventName metadata.product_event_type Mappé directement
custom_details.id metadata.product_log_id Mappé directement
source metadata.product_name Mappé directement
custom_details.url metadata.url_back_to_product Mappé directement
custom_details.dataTransferredInBytes network.sent_bytes Mappé directement
custom_details.customerID principal.administrative_domain Mappé directement
domain principal.domain.name Mappé directement
custom_details.ipAddress principal.ip Fusionné
ip_address principal.ip Fusionné
is_ip_assigned principal.ip Mappé : false → ip_address
custom_details.clusterName principal.resource.name Mappé directement
custom_details.clusterId principal.resource.product_object_id Mappé directement
user_email principal.user.email_addresses Fusionné
custom_details.auditUserName principal.user.user_display_name Mappé directement
user_name principal.user.user_display_name Mappé directement
action_name security_result.action Fusionné
custom_details.status security_result.action_details Mappé directement
category_temp security_result.category Fusionné
class security_result.category_details Fusionné
confidence security_result.confidence_details Mappé directement
custom_details.errorMessage security_result.description Mappé directement
access_type_label security_result.detection_fields Fusionné
action_date_label security_result.detection_fields Fusionné
detection_time_label security_result.detection_fields Fusionné
directories_snoozed_label security_result.detection_fields Fusionné
directories_unsnoozed_label security_result.detection_fields Fusionné
document_count_label security_result.detection_fields Fusionné
encryption_level_label security_result.detection_fields Fusionné
errorCode_label security_result.detection_fields Fusionné
errorId_label security_result.detection_fields Fusionné
errorReason_label security_result.detection_fields Fusionné
errorRemedy_label security_result.detection_fields Fusionné
event_info_label security_result.detection_fields Fusionné
failed_document_count_label security_result.detection_fields Fusionné
file_matches_label security_result.detection_fields Fusionné
files_created_count_label security_result.detection_fields Fusionné
files_modified_count_label security_result.detection_fields Fusionné
files_removed_count_label security_result.detection_fields Fusionné
files_suspicious_count_label security_result.detection_fields Fusionné
hash_tf_version_label security_result.detection_fields Fusionné
identity_name_label security_result.detection_fields Fusionné
num_files_with_matches_label security_result.detection_fields Fusionné
num_hash_matches_label security_result.detection_fields Fusionné
num_of_violating_identities_label security_result.detection_fields Fusionné
num_yara_rule_matches_label security_result.detection_fields Fusionné
obj_failed_label security_result.detection_fields Fusionné
obj_partially_succeeded_label security_result.detection_fields Fusionné
obj_succeeded_label security_result.detection_fields Fusionné
object_matches_label security_result.detection_fields Fusionné
policy_name_label security_result.detection_fields Fusionné
reason_label security_result.detection_fields Fusionné
remediation_type_label security_result.detection_fields Fusionné
remedy_label security_result.detection_fields Fusionné
risk_name_label security_result.detection_fields Fusionné
seriesID_label security_result.detection_fields Fusionné
seriesId_label security_result.detection_fields Fusionné
skipped_document_count_label security_result.detection_fields Fusionné
strain_name_label security_result.detection_fields Fusionné
successful_document_count_label security_result.detection_fields Fusionné
total_accessible_files_at_risk_count_label security_result.detection_fields Fusionné
vm_count_label security_result.detection_fields Fusionné
yara_tf_version_label security_result.detection_fields Fusionné
hunt_name security_result.rule_name Mappé directement
hunt_type security_result.rule_type Mappé directement
is_severity_assigned security_result.severity Mappé : false → INFORMATIONAL, false → MEDIUM
severity security_result.severity Mappé : INFO → INFORMATIONAL, WARNING → MEDIUM
severity_name security_result.severity Mappé : INFO → INFORMATIONAL, WARNING → MEDIUM
severity security_result.severity_details Mappé directement
severity_name security_result.severity_details Mappé directement
summary security_result.summary Mappé directement
threat_feed_type security_result.threat_feed_name Mappé directement
custom_details.logicalSizeInBytes target.file.size Mappé directement
client_id_label target.labels Fusionné
client_name_label target.labels Fusionné
custom_details.location target.location.name Mappé directement
custom_details.objectName target.resource.name Mappé directement
object_name target.resource.name Mappé directement
resource_name target.resource.name Mappé directement
custom_details.objectId target.resource.product_object_id Mappé directement
component target.resource.resource_subtype Mappé directement
custom_details.objectType target.resource.resource_subtype Mappé directement
is_object_type_assigned target.resource.resource_type Mappé : false → UNSPECIFIED
class target.user.email_addresses Mappé : Login → user_email
user_email target.user.email_addresses Fusionné
each_group target.user.group_identifiers Fusionné
custom_details.auditUserName target.user.user_display_name Mappé directement
user_name target.user.user_display_name Mappé directement
custom_details.auditUserId target.user.userid Mappé directement
N/A extensions.auth.type Constante : AUTHTYPE_UNSPECIFIED
N/A metadata.event_type Constante : USER_LOGIN
N/A metadata.product_name Constante : RUBRIK SECURITY CLOUD
N/A metadata.vendor_name Constante : RUBRIK
N/A principal.resource.resource_type Constante : CLUSTER
N/A security_result.severity Constante : INFORMATIONAL
N/A target.resource.resource_type Constante : UNSPECIFIED

Journal des modifications

Afficher le journal des modifications pour ce parseur

Vous avez encore besoin d'aide ? Obtenez des réponses de membres de la communauté et de professionnels Google SecOps.