Collecter les journaux Rubrik Security Cloud
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
- Accédez à Paramètres SIEM> Flux.
- Cliquez sur Ajouter un flux.
- Sur la page suivante, cliquez sur Configurer un seul flux.
- Dans le champ Nom du flux, saisissez un nom pour le flux (par exemple,
Rubrik Security Cloud Events). - Sélectionnez Webhook comme Type de source.
- Sélectionnez Rubrik Security Cloud comme Type de journal.
- Cliquez sur Suivant.
- 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.
- Cliquez sur Suivant.
- 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 :
- Sur la page d'informations sur le flux, cliquez sur Générer une clé secrète.
- Une boîte de dialogue affiche la clé secrète.
- Copiez et enregistrez la clé secrète de manière sécurisée.
Obtenir l'URL du point de terminaison du flux
- Accédez à l'onglet Détails du flux.
- Dans la section Endpoint Information (Informations sur le point de terminaison), copiez l'URL du point de terminaison du flux.
- Enregistrez cette URL pour les étapes suivantes.
- 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
- Accédez à la page Identifiants de la consoleGoogle Cloud .
- Sélectionnez votre projet (celui associé à votre instance Google SecOps).
- Cliquez sur Créer des identifiants> Clé API.
- Une clé API est créée et affichée dans une boîte de dialogue.
- Cliquez sur Modifier la clé API pour restreindre la clé.
Restreindre la clé API
- Sur la page des paramètres de la clé API :
- Nom : saisissez un nom descriptif (par exemple,
Google SecOps Webhook API Key).
- Nom : saisissez un nom descriptif (par exemple,
- Sous Restrictions relatives aux API :
- Sélectionnez Restreindre la clé.
- Dans le menu déroulant Sélectionner des API, recherchez et sélectionnez API Google SecOps (ou API Chronicle).
- Cliquez sur Enregistrer.
- Copiez la valeur de la clé API dans le champ Clé API en haut de la page.
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
- Connectez-vous à Rubrik Security Cloud à l'adresse
https://<account>.my.rubrik.com. - Cliquez sur l'icône en forme de roue dentée en haut à droite, puis sélectionnez Paramètres.
- Cliquez sur Notifications, puis sélectionnez Webhooks.
- Cliquez sur Add Webhook (Ajouter un webhook).
- L'assistant "Ajouter un webhook" s'affiche.
Dans Fournisseur, sélectionnez Générique.
Dans le champ Nom du webhook, saisissez un nom descriptif (par exemple,
Google SecOps Integration).Dans Point de terminaison, collez l'URL complète du webhook ci-dessus, y compris les paramètres de requête
keyetsecret. L'authentification étant effectuée par l'URL, le bouton Authentification peut rester désactivé.Cliquez sur Suivant.
Cliquez sur Tester le webhook pour vérifier que la configuration du webhook spécifié fonctionne, puis cliquez sur Suivant.
La fenêtre Sélectionner l'événement et la gravité s'affiche.
Sélectionnez les événements que RSC envoie au point de terminaison du webhook configuré :
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
Sous Audit, sélectionnez les types d'audit à transférer. Les types d'audit d'authentification alimentent les mappages de connexion de l'analyseur.
Sous Gravité, sélectionnez les niveaux de gravité pour déclencher les alertes :
- Critique
- Avertissement
- Informationnel
Cliquez sur Suivant.
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
- Connectez-vous à Rubrik Security Cloud.
- Accédez à Paramètres> Notifications> Webhooks.
- Vérifiez la colonne État de votre webhook (elle doit indiquer Activé).
- Recherchez les éventuels messages d'erreur dans les détails du webhook.
Vérifier l'état du flux Google SecOps
- Accédez à Paramètres SIEM> Flux dans Google SecOps.
- Vérifiez la colonne État de votre flux de webhook (elle doit indiquer Actif).
Vérifiez le nombre d'événements reçus (il doit augmenter).
Vérifier les journaux dans Google SecOps
- Accédez à Rechercher > Recherche UDM.
Utilisez la requête suivante :
metadata.vendor_name = "RUBRIK" nocase AND metadata.product_name = "RUBRIK SECURITY CLOUD" nocaseAjustez la période sur la dernière heure.
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.