Collecter les journaux Jamf Security Cloud

Compatible avec :

Ce document explique comment ingérer des journaux Jamf Security Cloud dans Google Security Operations à l'aide de Google Cloud  Storage ou d'Amazon S3. Jamf Security Cloud est une plate-forme de défense contre les menaces mobiles et de sécurité des points de terminaison pour les appareils Apple. Il génère des journaux d'événements de détection des menaces, de conformité et de sécurité des appareils couvrant la protection de la couche DNS, la prévention de l'hameçonnage, le filtrage du contenu et l'évaluation des risques liés aux appareils. Jamf Security Cloud exporte les journaux à l'aide des flux de données. Chaque configuration de flux de données envoie exactement un type de données à une destination.

Avant de commencer

Assurez-vous de remplir les conditions suivantes :

  • Une instance Google SecOps
  • Accès privilégié au portail Jamf Security Cloud
  • Pour la méthode 1 : accès privilégié à Google Cloud (Google Cloud Storage, Cloud Run)
  • Pour la méthode 2 : accès privilégié à AWS (S3, IAM)

Sélectionner les types de flux de données à exporter

L'analyseur Jamf Security Cloud est compatible avec les six types de flux de données. Créez une configuration de flux de données distincte pour chaque type de données que vous souhaitez ingérer :

  • Événements de menace : événements de menace détectés, y compris les communications réseau malveillantes, les logiciels malveillants et les applications à risque
  • Trafic réseau : journaux de trafic réseau traités par l'infrastructure réseau de Jamf
  • Événements d'accès : requêtes autorisées et refusées par les règles Jamf Connect Zero Trust Network Access (ZTNA)
  • Données de l'appareil : informations sur les appareils
  • Insights sur les applications : informations sur les applications installées sur les appareils
  • Données sur les failles : détails sur chaque faille détectée et sur l'appareil sur lequel elle a été trouvée

Méthode 1 : Google Cloud Stockage

Jamf Security Cloud ne dispose pas de destination de stockage Google Cloud intégrée. Jamf indique que l'envoi de données directement à Google SecOps à l'aide de l'intégration HTTP n'est pas pris en charge. Cette méthode utilise la cible de flux de données HTTP générique pour envoyer des événements à une fonction Cloud Run qui vous appartient et qui les écrit dans un bucket Google Cloud Storage. Google SecOps ingère ensuite le bucket à l'aide d'un flux Storage V2. Google Cloud

Créer un bucket Google Cloud Storage

  1. Accédez à la consoleGoogle Cloud .
  2. Sélectionnez votre projet ou créez-en un.
  3. Dans le menu de navigation, accédez à Cloud Storage > Buckets.
  4. Cliquez sur Créer un bucket.
  5. Fournissez les informations de configuration suivantes :

    Paramètre Valeur
    Nommer votre bucket Saisissez un nom unique (par exemple, jamf-security-cloud-logs).
    Type d'emplacement Choisissez en fonction de vos besoins (région, birégion ou multirégion).
    Emplacement Sélectionnez le lieu (par exemple, us-central1).
    Classe de stockage Standard (recommandé pour les journaux auxquels vous accédez fréquemment)
    Access control (Contrôle des accès) Uniforme (recommandé)
    Outils de protection Facultatif : Activez la gestion des versions des objets ou une règle de conservation.
  6. Cliquez sur Créer.

Créer un compte de service pour la fonction Cloud Run

  1. Dans la console GCP, accédez à IAM et administration > Comptes de service.
  2. Cliquez sur Créer un compte de service.
  3. Fournissez les informations de configuration suivantes :
    • Nom du compte de service : saisissez jamf-sc-receiver-sa.
    • Description du compte de service : saisissez Service account for the Cloud Run function that receives Jamf Security Cloud events.
  4. Cliquez sur Créer et continuer.
  5. Cliquez sur OK.

Accorder au compte de service l'accès au bucket

  1. Accédez à Cloud Storage > Buckets.
  2. Cliquez sur le nom de votre bucket.
  3. Accédez à l'onglet Autorisations.
  4. Cliquez sur Accorder l'accès.
  5. Fournissez les informations de configuration suivantes :
    • Ajouter des comptes principaux : saisissez l'adresse e-mail du compte de service (par exemple, jamf-sc-receiver-sa@PROJECT_ID.iam.gserviceaccount.com).
    • Attribuer des rôles : sélectionnez Administrateur des objets Storage.
  6. Cliquez sur Enregistrer.

Créer la fonction Cloud Run pour recevoir des événements

  1. Générez un jeton d'authentification fort et enregistrez-le pour référence ultérieure (par exemple, exécutez openssl rand -hex 32). Jamf Security Cloud envoie ce jeton dans un en-tête de requête, et la fonction rejette les requêtes sans jeton.
  2. Dans la console GCP, accédez à Cloud Run.
  3. Cliquez sur Créer un service.
  4. Sélectionnez Fonction (utilisez un éditeur intégré pour créer une fonction).
  5. Dans la section Configurer, fournissez les informations de configuration suivantes :

    Paramètre Valeur
    Nom du service jamf-sc-receiver
    Région Sélectionnez la région correspondant à votre bucket Cloud Storage (par exemple, us-central1).
    Durée d'exécution Sélectionnez Python 3.12 ou version ultérieure.
  6. Dans la section Authentification, cochez Autoriser les appels non authentifiés.

  7. Développez Conteneurs, mise en réseau, sécurité.

  8. Accédez à l'onglet Sécurité :

    • Compte de service : sélectionnez jamf-sc-receiver-sa.
  9. Accédez à l'onglet Conteneurs :

    1. Cliquez sur Variables et secrets.
    2. Cliquez sur + Ajouter une variable pour chaque variable d'environnement :
    Nom de la variable Exemple de valeur Description
    GCS_BUCKET jamf-security-cloud-logs Nom du bucket Cloud Storage
    GCS_PREFIX jamf-security-cloud/ Préfixe des fichiers journaux
    AUTH_TOKEN <your-generated-token> Jeton envoyé par Jamf Security Cloud dans l'en-tête X-Auth-Token
  10. Cliquez sur Créer.

  11. Attendez que le service soit créé. Une fois le service créé, l'éditeur de code intégré s'ouvre automatiquement.

  12. Saisissez main dans le champ Point d'entrée.

  13. Dans l'éditeur de code intégré, créez deux fichiers :

    • Premier fichier : main.py

      import hashlib
      import os
      from datetime import datetime, timezone
      
      import functions_framework
      from google.cloud import storage
      
      BUCKET = os.environ["GCS_BUCKET"]
      PREFIX = os.environ.get("GCS_PREFIX", "jamf-security-cloud/")
      AUTH_TOKEN = os.environ["AUTH_TOKEN"]
      
      storage_client = storage.Client()
      
      @functions_framework.http
      def main(request):
              if request.headers.get("X-Auth-Token") != AUTH_TOKEN:
                      return ("Unauthorized", 401)
      
              body = request.get_data()
              if not body:
                      return ("OK", 200)
      
              now = datetime.now(timezone.utc)
              digest = hashlib.sha256(body).hexdigest()[:12]
              object_name = f"{PREFIX}{now:%Y/%m/%d}/{now:%Y%m%dT%H%M%S%f}_{digest}.json"
              storage_client.bucket(BUCKET).blob(object_name).upload_from_string(
                      body, content_type="application/json"
              )
              return ("OK", 200)
      
    • Deuxième fichier : requirements.txt

      functions-framework==3.*
      google-cloud-storage==2.*
      
  14. Cliquez sur Enregistrer et redéployer.

  15. Copiez et enregistrez l'URL du service (par exemple, https://jamf-sc-receiver-abc123-uc.a.run.app). Vous utiliserez le nom d'hôte dans la section suivante.

Configurer un flux de données HTTP générique dans Jamf Security Cloud

  1. Connectez-vous au portail Jamf Security Cloud.
  2. Accédez à Intégrations > Flux de données.
  3. Cliquez sur Nouvelle configuration.
  4. Sélectionnez le type de flux de données (par exemple, Événements de menace).
  5. Sélectionnez HTTP générique comme type de cible du flux de données.
  6. Cliquez sur Continuer.
  7. Fournissez les informations de configuration suivantes :
    • Protocole : sélectionnez https.
    • Nom d'hôte/Adresse IP du serveur : saisissez le nom d'hôte du service Cloud Run (par exemple, jamf-sc-receiver-abc123-uc.a.run.app).
    • Port : saisissez 443.
    • Point de terminaison : saisissez /.
    • En-têtes supplémentaires : cliquez sur Ajouter un en-tête, puis saisissez le nom X-Auth-Token avec le jeton généré comme valeur.
  8. Cliquez sur Tester la configuration et vérifiez que le test a réussi.
  9. Cliquez sur le bouton Activer la configuration pour activer le flux de données.
  10. Cliquez sur Enregistrer.
  11. Répétez ces étapes pour chaque type de flux de données supplémentaire que vous souhaitez exporter.

Récupérer le compte de service Google SecOps

  1. Connectez-vous à la console Google SecOps.
  2. Accédez à Paramètres SIEM> Flux.
  3. Cliquez sur Add New Feed (Ajouter un flux).
  4. Cliquez sur Configurer un flux unique.
  5. Sélectionnez Google Cloud Storage V2 comme Type de source.
  6. Sélectionnez JAMF Security Cloud comme Type de journal.
  7. Cliquez sur Obtenir un compte de service. Une adresse e-mail unique pour le compte de service s'affiche, par exemple :

    chronicle-12345678@chronicle-gcp-prod.iam.gserviceaccount.com
    
  8. Copiez cette adresse e-mail. Vous l'utiliserez à l'étape suivante.

Accorder au compte de service Google SecOps l'accès au bucket

  1. Accédez à Cloud Storage > Buckets.
  2. Cliquez sur le nom de votre bucket.
  3. Accédez à l'onglet Autorisations.
  4. Cliquez sur Accorder l'accès.
  5. Fournissez les informations de configuration suivantes :
    • Ajouter des comptes principaux : collez l'adresse e-mail du compte de service Google SecOps.
    • Attribuer des rôles : sélectionnez Lecteur des objets de l'espace de stockage.
  6. Cliquez sur Enregistrer.

Configurer un flux dans Google SecOps pour ingérer des données depuis Google Cloud  Storage

  1. Accédez à Paramètres SIEM> Flux.
  2. Cliquez sur Add New Feed (Ajouter un flux).
  3. Cliquez sur Configurer un flux unique.
  4. Dans le champ Nom du flux, saisissez un nom pour le flux (par exemple, Jamf Security Cloud logs).
  5. Sélectionnez Google Cloud Storage V2 comme Type de source.
  6. Sélectionnez JAMF Security Cloud comme Type de journal.
  7. Cliquez sur Suivant.
  8. Spécifiez les valeurs des paramètres d'entrée suivants :

    Champ Valeur
    URI du bucket de stockage gs://jamf-security-cloud-logs/jamf-security-cloud/
    Option de suppression de la source Sélectionnez l'option de suppression de votre choix.
    Âge maximal des fichiers (en jours) La valeur par défaut est de 180 jours.
    Espace de noms de l'élément L'espace de noms de l'élément
    Libellés d'ingestion Libellé à appliquer aux événements de ce flux
    • Remplacez jamf-security-cloud-logs par le nom réel de votre bucket.
    • Incluez toujours la barre oblique finale (/) à la fin de l'URI.
  9. Cliquez sur Suivant.

  10. Vérifiez la configuration de votre nouveau flux sur l'écran Finaliser, puis cliquez sur Envoyer.

Méthode 2 : Amazon S3

AWS S3 appartenant au client est la seule destination de stockage cloud que les flux de données Jamf Security Cloud prennent en charge de manière native. Jamf Security Cloud écrit les événements directement dans votre bucket S3, et Google SecOps les ingère à l'aide d'un flux Amazon S3 V2.

Configurer un bucket AWS S3 et un rôle IAM pour Jamf Security Cloud

  1. Créez un bucket Amazon S3 en suivant ce guide de l'utilisateur : Créer un bucket.
  2. Enregistrez le nom et la région du bucket pour référence ultérieure (par exemple, jamf-security-cloud-logs).
  3. Créez un rôle IAM que Jamf Security Cloud assume pour importer des données dans le bucket. Le rôle nécessite l'autorisation s3:PutObject sur le bucket et le compte AWS de Jamf listé en tant qu'entité de confiance.

  4. Enregistrez le rôle IAM ARN pour référence ultérieure.

Configurer un flux de données AWS S3 appartenant au client dans Jamf Security Cloud

  1. Connectez-vous au portail Jamf Security Cloud.
  2. Accédez à Intégrations > Flux de données.
  3. Cliquez sur Nouvelle configuration.
  4. Sélectionnez le type de flux de données (par exemple, Événements de menace).
  5. Sélectionnez AWS S3 appartenant au client comme type de cible du flux de données.
  6. Cliquez sur Continuer.
  7. Fournissez les informations de configuration suivantes :
    • Nom du bucket Amazon S3 : saisissez le nom du bucket (par exemple, jamf-security-cloud-logs).
    • Rôle IAM assumé par Jamf : saisissez l'ARN du rôle IAM que vous avez créé pour Jamf Security Cloud.
    • Région : sélectionnez la région de votre bucket S3.
  8. Cliquez sur Créer une configuration.
  9. (Facultatif) Dans Paramètres avancés, sélectionnez JSON comme format de message.

  10. Cliquez sur le bouton Activer la configuration pour activer le flux de données.

  11. Cliquez sur Enregistrer.

  12. Répétez ces étapes pour chaque type de flux de données supplémentaire que vous souhaitez exporter.

Créer un utilisateur IAM et une clé d'accès pour Google SecOps

  1. Créez un utilisateur en suivant ce guide de l'utilisateur : Créer un utilisateur IAM.
  2. Sélectionnez l'utilisateur créé.
  3. Sélectionnez l'onglet Identifiants de sécurité.
  4. Cliquez sur Créer une clé d'accès dans la section Clés d'accès.
  5. Sélectionnez Service tiers comme Cas d'utilisation.
  6. Cliquez sur Suivant.
  7. Facultatif : Ajoutez un tag de description.
  8. Cliquez sur Créer une clé d'accès.
  9. Cliquez sur Download .csv file (Télécharger le fichier .csv) pour enregistrer la clé d'accès et la clé d'accès secrète pour référence ultérieure.
  10. Cliquez sur OK.
  11. Sélectionnez l'onglet Autorisations.
  12. Cliquez sur Ajouter des autorisations dans la section Règles relatives aux autorisations.
  13. Sélectionnez Ajouter des autorisations.
  14. Sélectionnez Joindre directement des règles.
  15. Recherchez la règle AmazonS3FullAccess.
  16. Sélectionnez la règle.
  17. Cliquez sur Suivant.
  18. Cliquez sur Ajouter des autorisations.

Configurer un flux dans Google SecOps pour ingérer des données depuis Amazon S3

  1. Accédez à Paramètres SIEM> Flux.
  2. Cliquez sur Add New Feed (Ajouter un flux).
  3. Cliquez sur Configurer un flux unique.
  4. Dans le champ Nom du flux, saisissez un nom pour le flux (par exemple, Jamf Security Cloud logs).
  5. Sélectionnez Amazon S3 V2 comme type de source.
  6. Sélectionnez JAMF Security Cloud comme Type de journal.
  7. Cliquez sur Suivant.
  8. Spécifiez les valeurs des paramètres d'entrée suivants :

    Champ Valeur
    URI S3 s3://jamf-security-cloud-logs/
    Option de suppression de la source Sélectionnez l'option de suppression de votre choix.
    Âge maximal des fichiers (en 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
    Clé d'accès secrète Clé secrète de l'utilisateur ayant accès au bucket S3
    Espace de noms de l'élément L'espace de noms de l'élément
    Libellés d'ingestion Libellé à appliquer aux événements de ce flux
    • Remplacez jamf-security-cloud-logs par le nom réel de votre bucket S3.
  9. Cliquez sur Suivant.

  10. 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
accessPoint_label additional.fields Fusionné
action_label additional.fields Fusionné
activated_label additional.fields Fusionné
alertId_label additional.fields Fusionné
appName_label additional.fields Fusionné
appRiskIndexThreshold_label additional.fields Fusionné
appVersion_label additional.fields Fusionné
app_id_label additional.fields Fusionné
carrierName_label additional.fields Fusionné
category_label additional.fields Fusionné
deploymentState_label additional.fields Fusionné
developer_label additional.fields Fusionné
deviceId_label additional.fields Fusionné
deviceModel_label additional.fields Fusionné
deviceName_label additional.fields Fusionné
deviceRiskIndex_label additional.fields Fusionné
device_os_label additional.fields Fusionné
device_user_name_label additional.fields Fusionné
eventTimeUtcMs_label additional.fields Fusionné
eventType_label additional.fields Fusionné
hwPlatform_label additional.fields Fusionné
imei_label additional.fields Fusionné
installationTimeUtcMs_label additional.fields Fusionné
installedBy_label additional.fields Fusionné
isoCountryCode_label additional.fields Fusionné
lastMdmCheckInUtcMs_label additional.fields Fusionné
lastNetworkTrafficUtcMs_label additional.fields Fusionné
lastUpdatedUtcMs_label additional.fields Fusionné
loc_isoCountryCode_label additional.fields Fusionné
mcc_label additional.fields Fusionné
mdmId_label additional.fields Fusionné
mnc_label additional.fields Fusionné
osVersion_label additional.fields Fusionné
packageName_label additional.fields Fusionné
parentId_label additional.fields Fusionné
parentId_label_1 additional.fields Fusionné
platform_label additional.fields Fusionné
profileId_label additional.fields Fusionné
profileName_label additional.fields Fusionné
profileStatus_label additional.fields Fusionné
recordType_label additional.fields Fusionné
resellerId_label additional.fields Fusionné
routeName_label additional.fields Fusionné
signatureId_id_label additional.fields Fusionné
signatureId_name_label additional.fields Fusionné
softwareId_label additional.fields Fusionné
softwareName_label additional.fields Fusionné
softwareVersion_label additional.fields Fusionné
ssid_label additional.fields Fusionné
system_label additional.fields Fusionné
threat_result_label additional.fields Fusionné
triggerTimeUtcMs_label additional.fields Fusionné
triggerType_label additional.fields Fusionné
types_list additional.fields Fusionné
userId_label additional.fields Fusionné
user_tld_label additional.fields Fusionné
vpnActive_label additional.fields Fusionné
wanderaAppVersion_label additional.fields Fusionné
wifiActive_label additional.fields Fusionné
event_data.receiptTime metadata.collected_timestamp Mappé directement
event_data.cve.description metadata.description Mappé directement
event_data_event_dataType_description metadata.description Mappé directement
event_data.timestamp metadata.event_timestamp Analysé en tant que yyyy-MM-ddTHH:mm:ss.SSSZ
has_principal metadata.event_type Mappé : trueSTATUS_UPDATE
has_user metadata.event_type Mappé : trueUSER_UNCATEGORIZED
event_data.md1.product metadata.product_event_type Mappé directement
md1.product metadata.product_event_type Mappé directement
event_data.device.externalId metadata.product_log_id Mappé directement
event_data.externalId metadata.product_log_id Mappé directement
md1.product metadata.product_name Mappé directement
event_data.md1.schemaVersion metadata.product_version Mappé directement
schemaVersion metadata.product_version Mappé directement
dns_answers network.dns.answers Fusionné
dns_questions network.dns.questions Fusionné
event_data.domain principal.administrative_domain Mappé directement
event_data.application principal.application Mappé directement
event_data.hostName principal.asset.hostname Mappé directement
event_data.source.ip principal.asset.ip Fusionné
event_data.device.userDeviceName principal.hostname Mappé directement
event_data.hostName principal.hostname Mappé directement
event_data.source.ip principal.ip Fusionné
event_data.source.port principal.port Renommé/Mappé
event_data_event_dataType_id principal.process.pid Mappé directement
event_data.cve.consoleUrl principal.url Mappé directement
event_data.event_dataUrl principal.url Mappé directement
device.user.email principal.user.email_addresses Fusionné
event_data.user.userEmail principal.user.email_addresses Fusionné
event_data.account.name principal.user.user_display_name Mappé directement
event_data.user.userName principal.user.user_display_name Mappé directement
customer.customerId principal.user.userid Mappé directement
customerId principal.user.userid Mappé directement
device.user.email principal.user.userid Mappé directement
event_data.account.customerId principal.user.userid Mappé directement
event_data.customerId principal.user.userid Mappé directement
actionforBlocked security_result.action Fusionné
event_data_event_dataType_name security_result.description Mappé directement
attribution_label security_result.detection_fields Fusionné
baseScore_label security_result.detection_fields Fusionné
cve_id_label security_result.detection_fields Fusionné
exploitAvailable_label security_result.detection_fields Fusionné
permission_label security_result.detection_fields Fusionné
threats_label security_result.detection_fields Fusionné
event_data.cve.severity security_result.severity Mappé directement
event_data.blockReason security_result.summary Mappé directement
event_data.cve.cveDetailUrl security_result.url_back_to_product Mappé directement
event_data.device.deviceId target.asset.asset_id Mappé directement
event_data.destination.name target.asset.hostname Mappé directement
device.carrier.ipAddress target.asset.ip Fusionné
device.network.assignedIp target.asset.ip Fusionné
device.network.publicIp target.asset.ip Fusionné
event_data.destination.ip target.asset.ip Fusionné
event_data.destinationIp target.asset.ip Fusionné
ip target.asset.ip Fusionné
app_id_md5 target.file.md5 Mappé directement
app_id_sha1 target.file.sha1 Mappé directement
app_id_sha256 target.file.sha256 Mappé directement
event_data.destination.name target.hostname Mappé directement
device.carrier.ipAddress target.ip Fusionné
device.network.assignedIp target.ip Fusionné
device.network.publicIp target.ip Fusionné
event_data.destination.ip target.ip Fusionné
event_data.destinationIp target.ip Fusionné
ip target.ip Fusionné
device.location.countryName target.location.country_or_region Mappé directement
event_data.location target.location.name Mappé directement
device.hw.wifiMacAddress target.mac Fusionné
device.network.bssid target.mac Fusionné
event_data.accessPointBssid target.mac Fusionné
event_data_device_os_osVersion target.platform_version Mappé directement
event_data.destination.port target.port Renommé/Mappé
event_data.device.deviceName target.resource.name Mappé directement
event_data.user.email target.user.email_addresses Fusionné
event_data.user.email target.user.userid Mappé directement
event_data.user.name target.user.userid Mappé directement
N/A metadata.event_type Constante : STATUS_UPDATE
N/A metadata.product_name Constante : JAMF_SECURITY_CLOUD
N/A metadata.vendor_name Constante : JAMF_SECURITY_CLOUD
N/A security_result.severity Constante : INFORMATIONAL
N/A target.platform Constante : WINDOWS

Journal des modifications

Afficher le journal des modifications pour ce parseur

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