Collecter les journaux d'audit Tanium
Ce document explique comment ingérer des journaux d'audit Tanium dans Google Security Operations à l'aide d'Amazon S3 et de la fonctionnalité d'exportation S3 native de Tanium Connect. L'analyseur extrait les journaux, en effaçant d'abord de nombreux champs par défaut. Il analyse ensuite le message du journal à l'aide de grok et du filtre JSON, en extrayant des champs tels que l'horodatage, l'adresse IP de l'appareil et les détails de l'audit. Le parseur mappe ces champs extraits à l'UDM, en gérant différents types de données et la logique conditionnelle pour remplir les champs UDM appropriés en fonction de la présence et des valeurs d'attributs spécifiques des journaux d'audit Tanium.
Avant de commencer
Assurez-vous de remplir les conditions suivantes :
- Une instance Google SecOps
- Accès privilégié à Tanium Connect et à la console Tanium
- Accès privilégié à AWS (S3, IAM)
Créer un bucket Amazon S3
- Ouvrez la console Amazon S3.
- Si nécessaire, vous pouvez modifier la région.
- Dans la barre de navigation, sélectionnez la région dans laquelle vous souhaitez que vos journaux d'audit Tanium soient stockés.
- Cliquez sur Créer un bucket.
- Nom du bucket : saisissez un nom explicite pour le bucket (par exemple,
tanium-audit-logs
). - Région : sélectionnez la région de votre choix (par exemple,
us-east-1
). - Cliquez sur Créer.
- Nom du bucket : saisissez un nom explicite pour le bucket (par exemple,
Créer un utilisateur IAM avec un accès complet à Amazon S3
- Ouvrez la console IAM.
- Cliquez sur Utilisateurs > Ajouter un utilisateur.
- Saisissez un nom d'utilisateur (par exemple,
tanium-connect-s3-user
). - Sélectionnez Accès programmatique et/ou Accès à la console de gestion AWS selon vos besoins.
- Sélectionnez Mot de passe généré automatiquement ou Mot de passe personnalisé.
- Cliquez sur Next: Permissions (Suivant : Autorisations).
- Sélectionnez Attach existing policies directly (Joindre directement des règles existantes).
- Recherchez et sélectionnez la règle AmazonS3FullAccess pour l'utilisateur.
- Cliquez sur Next: Tags (Suivant : Tags).
- Cliquez sur Suivant : Relire.
- Cliquez sur Créer un utilisateur.
- Copiez et enregistrez l'ID de clé d'accès et la clé d'accès secrète pour référence ultérieure.
Configurer les autorisations sur le bucket Amazon S3
- Dans la console Amazon S3, sélectionnez le bucket que vous avez créé précédemment.
- Cliquez sur Autorisations > Règle du bucket.
Dans l'éditeur de règles du bucket, ajoutez la règle suivante :
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::YOUR_ACCOUNT_ID:user/tanium-connect-s3-user" }, "Action": [ "s3:PutObject", "s3:PutObjectAcl", "s3:GetObject", "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::tanium-audit-logs", "arn:aws:s3:::tanium-audit-logs/*" ] } ] }
Remplacez les variables suivantes :
- Remplacez
YOUR_ACCOUNT_ID
par votre ID de compte AWS. - Si le nom de votre bucket est différent, remplacez
tanium-audit-logs
par le nom réel. - Si votre nom d'utilisateur IAM est différent, remplacez
tanium-connect-s3-user
par le nom d'utilisateur IAM réel.
- Remplacez
Cliquez sur Enregistrer.
Configurer Tanium Connect pour l'exportation S3
Créer une connexion AWS S3 dans Tanium Connect
- Connectez-vous à la console Tanium en tant qu'administrateur.
- Accédez à Tanium Connect > Connexions.
- Cliquez sur Créer une connexion.
- Dans la section Informations générales, fournissez les informations de configuration suivantes :
- Nom : saisissez un nom descriptif (par exemple,
Tanium Audit to S3
). - Description : saisissez une description pertinente (par exemple,
Export Tanium audit logs to S3 for Google SecOps ingestion
). - Activer : sélectionnez cette option pour activer la connexion.
- Niveau de journalisation : sélectionnez Informations (par défaut) ou ajustez le niveau si nécessaire.
- Nom : saisissez un nom descriptif (par exemple,
Configurer la source de connexion
- Dans la section Configuration, sélectionnez Tanium Audit pour Source.
- Configurez les paramètres de la source d'audit :
- Nombre de jours de données historiques récupérées : saisissez le nombre de jours de données d'audit historiques à récupérer (par exemple,
7
pour une semaine). - Types d'audit : sélectionnez les types d'audit que vous souhaitez exporter. Choisissez parmi les options suivantes :
- Historique des actions : actions émises par les opérateurs de la console.
- Authentification : événements d'authentification des utilisateurs.
- Contenu : modifications du contenu.
- Groupes : modifications apportées aux groupes d'ordinateurs.
- Packages : activités liées aux packages.
- Capteurs : modifications des capteurs.
- Paramètres système : modifications de la configuration système.
- Utilisateurs : activités de gestion des utilisateurs.
- Nombre de jours de données historiques récupérées : saisissez le nombre de jours de données d'audit historiques à récupérer (par exemple,
Configurer la destination AWS S3
- Dans le champ Destination, sélectionnez AWS S3.
- Fournissez les informations de configuration suivantes :
- Nom de la destination : saisissez un nom (par exemple,
Google SecOps S3 Bucket
). - Clé d'accès AWS : saisissez l'ID de clé d'accès de l'utilisateur IAM créé précédemment.
- Clé secrète AWS : saisissez la clé d'accès secrète de l'utilisateur IAM créé précédemment.
- Nom du bucket : saisissez le nom de votre bucket S3 (par exemple,
tanium-audit-logs
). - Chemin d'accès au bucket : facultatif. Saisissez un préfixe de chemin d'accès (par exemple,
tanium/audit/
). - Région : sélectionnez la région AWS dans laquelle se trouve votre bucket (par exemple,
us-east-1
).
- Nom de la destination : saisissez un nom (par exemple,
Configurer le format et la programmation
- Dans la section Format, configurez le format de sortie :
- Type de format : sélectionnez JSON.
- Inclure les en-têtes de colonne : sélectionnez cette option si vous souhaitez inclure les en-têtes de colonne.
- Générer un document : désélectionnez cette option pour envoyer des données JSON brutes.
- Dans la section Programmer, configurez la fréquence d'exécution de la connexion :
- Type de programmation : sélectionnez Cron.
- Expression Cron : saisissez une expression Cron pour les exportations régulières (par exemple,
0 */1 * * *
pour les exportations horaires). - Date de début : définissez la date de début de la programmation.
- Cliquez sur Enregistrer les modifications.
Tester et exécuter la connexion
- Sur la page Présentation de Connect, accédez à Connexions.
- Cliquez sur la connexion que vous avez créée (Tanium Audit to S3).
- Cliquez sur Exécuter maintenant pour tester la connexion.
- Confirmez que vous souhaitez exécuter la connexion.
- Surveillez l'état de la connexion et vérifiez que les journaux d'audit sont exportés vers votre bucket S3.
Facultatif : Créez un utilisateur et des clés IAM en lecture seule pour Google SecOps
- Accédez à la console AWS> IAM> Utilisateurs> Ajouter des utilisateurs.
- Cliquez sur Add users (Ajouter des utilisateurs).
- Fournissez les informations de configuration suivantes :
- Utilisateur : saisissez
secops-reader
. - Type d'accès : sélectionnez Clé d'accès – Accès programmatique.
- Utilisateur : saisissez
- Cliquez sur Créer un utilisateur.
- Associez une stratégie de lecture minimale (personnalisée) : Utilisateurs > secops-reader > Autorisations > Ajouter des autorisations > Associer des stratégies directement > Créer une stratégie.
Dans l'éditeur JSON, saisissez la stratégie suivante :
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": ["s3:GetObject"], "Resource": "arn:aws:s3:::tanium-audit-logs/*" }, { "Effect": "Allow", "Action": ["s3:ListBucket"], "Resource": "arn:aws:s3:::tanium-audit-logs" } ] }
Définissez le nom sur
secops-reader-policy
.Accédez à Créer une règle > recherchez/sélectionnez > Suivant > Ajouter des autorisations.
Accédez à Identifiants de sécurité > Clés d'accès > Créer une clé d'accès.
Téléchargez le CSV (ces valeurs sont saisies dans le flux).
Configurer un flux dans Google SecOps pour ingérer les journaux d'audit Tanium
- Accédez à Paramètres SIEM> Flux.
- Cliquez sur + Ajouter un flux.
- Dans le champ Nom du flux, saisissez un nom pour le flux (par exemple,
Tanium Audit logs
). - Sélectionnez Amazon S3 V2 comme type de source.
- Sélectionnez Audit Tanium comme type de journal.
- Cliquez sur Suivant.
- Spécifiez les valeurs des paramètres d'entrée suivants :
- URI S3 :
s3://tanium-audit-logs/tanium/audit/
(ajustez le chemin d'accès si vous avez utilisé un autre nom ou chemin d'accès pour le bucket). - Options de suppression de la source : sélectionnez l'option de suppression de votre choix.
- Âge maximal des fichiers : incluez les fichiers modifiés au cours des derniers jours. La valeur par défaut est de 180 jours.
- ID de clé d'accès : clé d'accès utilisateur avec accès au bucket S3 (à partir de l'utilisateur en lecture seule créé ci-dessus).
- Clé d'accès secrète : clé secrète de l'utilisateur ayant accès au bucket S3 (à partir de l'utilisateur en lecture seule créé ci-dessus).
- 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.
- URI S3 :
- Cliquez sur Suivant.
- Vérifiez la configuration de votre nouveau flux sur l'écran Finaliser, puis cliquez sur Envoyer.
Table de mappage UDM
Champ de journal | Mappage UDM | Logique |
---|---|---|
ActionId |
metadata.product_log_id |
Mappé directement à partir du champ ActionId . |
ActionName |
security_result.action_details |
Mappé directement à partir du champ ActionName . |
Approver |
additional.fields[Approver].value.string_value |
Mappé directement à partir du champ Approver . |
Approver |
principal.user.userid |
Mappé à partir du champ Approver si Issuer n'est pas présent. |
audit_name |
metadata.description |
Mappé directement à partir du champ audit_name . |
audit_row_id |
additional.fields[audit_row_id].value.string_value |
Mappé directement à partir du champ audit_row_id . |
audit_type |
additional.fields[audit_type].value.string_value |
Mappé directement à partir du champ audit_type . |
authentication_type |
principal.user.attribute.labels[authentication_type].value |
Mappé directement à partir du champ authentication_type extrait du champ details . |
Command |
principal.process.command_line |
Mappé directement à partir du champ Command après décodage de l'URL. |
creation_time |
target.resource.attribute.creation_time |
Mappé directement à partir du champ creation_time . |
details |
network.session_id |
Extrait du champ details à l'aide de l'analyse clé-valeur. |
details |
principal.user.attribute.labels[authentication_type].value |
Extrait du champ details à l'aide de l'analyse clé-valeur. |
details |
principal.asset.ip , principal.ip |
L'adresse IP est extraite du champ details à l'aide de l'analyse clé-valeur et mappée à principal.asset.ip et principal.ip . |
DistributeOver |
additional.fields[DistributeOver].value.string_value |
Mappé directement à partir du champ DistributeOver . |
dvc_ip |
intermediary.hostname |
Directement mappé à partir du champ dvc_ip extrait du message syslog. |
dvc_ip |
observer.ip |
Directement mappé à partir du champ dvc_ip si logstash.collect.host n'est pas présent. |
Expiration |
additional.fields[Expiration].value.string_value |
Mappé directement à partir du champ Expiration . |
host.architecture |
target.asset.hardware.cpu_platform |
Mappé directement à partir du champ host.architecture . |
host.id |
target.asset.asset_id |
Mappé directement à partir du champ host.id , avec le préfixe "Host ID:". |
host.ip |
target.ip |
Mappé directement à partir du champ host.ip . |
host.mac |
target.mac |
Mappé directement à partir du champ host.mac . |
host.name |
target.hostname |
Directement mappé à partir du champ host.name si host.hostname n'est pas présent. |
host.os.kernel |
target.platform_patch_level |
Mappé directement à partir du champ host.os.kernel . |
host.os.name |
additional.fields[os_name].value.string_value |
Mappé directement à partir du champ host.os.name . |
host.os.version |
target.platform_version |
Mappé directement à partir du champ host.os.version . |
InsertTime |
additional.fields[InsertTime].value.string_value |
Mappé directement à partir du champ InsertTime . |
Issuer |
additional.fields[Issuer].value.string_value |
Mappé directement à partir du champ Issuer . |
Issuer |
principal.user.userid |
Directement mappé à partir du champ Issuer , s'il est présent. |
last_modified_by |
principal.resource.attribute.labels[last_modified_by].value |
Mappé directement à partir du champ last_modified_by . |
log.source.address |
principal.ip |
L'adresse IP est extraite du champ log.source.address et mappée à principal.ip . |
log.source.address |
principal.port |
Le port est extrait du champ log.source.address . |
logstash.collect.host |
observer.ip |
Directement mappé à partir du champ logstash.collect.host , s'il est présent. |
logstash.collect.timestamp |
metadata.collected_timestamp |
Mappé directement à partir du champ logstash.collect.timestamp . |
logstash.ingest.timestamp |
metadata.ingested_timestamp |
Mappé directement à partir du champ logstash.ingest.timestamp . |
logstash.irm_environment |
additional.fields[irm_environment].value.string_value |
Mappé directement à partir du champ logstash.irm_environment . |
logstash.irm_region |
additional.fields[irm_region].value.string_value |
Mappé directement à partir du champ logstash.irm_region . |
logstash.irm_site |
additional.fields[irm_site].value.string_value |
Mappé directement à partir du champ logstash.irm_site . |
logstash.process.host |
intermediary.hostname |
Mappé directement à partir du champ logstash.process.host . |
message |
dvc_ip , json_data , timestamp |
Analysé à l'aide de grok pour extraire dvc_ip , json_data et timestamp . |
modification_time |
target.resource.attribute.last_update_time |
Mappé directement à partir du champ modification_time . |
modifier_user_id |
principal.resource.attribute.labels[modifier_user_id].value |
Mappé directement à partir du champ modifier_user_id . |
object_id |
target.resource.product_object_id |
Mappé directement à partir du champ object_id . |
object_name |
target.resource.name |
Mappé directement à partir du champ object_name . |
object_type_name |
target.resource.attribute.labels[object_type_name].value |
Mappé directement à partir du champ object_type_name . |
PackageName |
additional.fields[PackageName].value.string_value |
Mappé directement à partir du champ PackageName . |
SourceId |
additional.fields[SourceId].value.string_value |
Mappé directement à partir du champ SourceId . |
StartTime |
additional.fields[StartTime].value.string_value |
Mappé directement à partir du champ StartTime . |
Status |
security_result.action |
Mappé sur "BLOCK" si Status est "Closed" (Fermé), sur "ALLOW" si Status est "Open" (Ouvert). |
Status |
security_result.summary |
Mappé directement à partir du champ Status . |
tanium_audit_type |
metadata.product_event_type |
Mappé directement à partir du champ tanium_audit_type . |
timestamp |
metadata.event_timestamp |
Directement mappé à partir du champ timestamp extrait du message syslog ou du champ message . |
type |
additional.fields[type].value.string_value |
Mappé directement à partir du champ type . |
type_name |
metadata.product_event_type |
Mappé directement à partir du champ type_name . |
User |
principal.user.userid |
Mappé directement à partir du champ User . Déterminé par la logique de l'analyseur en fonction de la présence de src_ip , has_target et has_user . Valeurs possibles : "NETWORK_CONNECTION", "USER_RESOURCE_ACCESS", "STATUS_UPDATE" ou "GENERIC_EVENT". Codé en dur sur "TANIUM_AUDIT". Codé en dur sur "cybersécurité". Codé en dur sur "TANIUM_AUDIT". |
@version |
metadata.product_version |
Mappé directement à partir du champ @version . |
agent.ephemeral_id |
additional.fields[ephemeral_id].value.string_value |
Mappé directement à partir du champ agent.ephemeral_id . |
agent.id |
observer.asset_id |
Mappé directement à partir du champ agent.id , avec le préfixe "filebeat:". |
agent.type |
observer.application |
Mappé directement à partir du champ agent.type . |
agent.version |
observer.platform_version |
Mappé directement à partir du champ agent.version . |
Comment |
security_result.description |
Mappé directement à partir du champ Comment . |
host.hostname |
target.hostname |
Directement mappé à partir du champ host.hostname , s'il est présent. |
input.type |
network.ip_protocol |
Mappé sur "TCP" si input.type est "tcp" ou "TCP". |
syslog_severity |
security_result.severity |
Correspond à "HIGH" si syslog_severity est "error" ou "warning", "MEDIUM" si "notice", "LOW" si "information" ou "info". |
syslog_severity |
security_result.severity_details |
Mappé directement à partir du champ syslog_severity . |
Vous avez encore besoin d'aide ? Obtenez des réponses de membres de la communauté et de professionnels Google SecOps.