Collecter les journaux Jamf Security Cloud
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
- Accédez à la consoleGoogle Cloud .
- Sélectionnez votre projet ou créez-en un.
- Dans le menu de navigation, accédez à Cloud Storage > Buckets.
- Cliquez sur Créer un bucket.
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. Cliquez sur Créer.
Créer un compte de service pour la fonction Cloud Run
- Dans la console GCP, accédez à IAM et administration > Comptes de service.
- Cliquez sur Créer un compte de service.
- 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.
- Nom du compte de service : saisissez
- Cliquez sur Créer et continuer.
- Cliquez sur OK.
Accorder au compte de service l'accès au bucket
- Accédez à Cloud Storage > Buckets.
- Cliquez sur le nom de votre bucket.
- Accédez à l'onglet Autorisations.
- Cliquez sur Accorder l'accès.
- 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.
- Ajouter des comptes principaux : saisissez l'adresse e-mail du compte de service (par exemple,
- Cliquez sur Enregistrer.
Créer la fonction Cloud Run pour recevoir des événements
- 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. - Dans la console GCP, accédez à Cloud Run.
- Cliquez sur Créer un service.
- Sélectionnez Fonction (utilisez un éditeur intégré pour créer une fonction).
Dans la section Configurer, fournissez les informations de configuration suivantes :
Paramètre Valeur Nom du service jamf-sc-receiverRé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. Dans la section Authentification, cochez Autoriser les appels non authentifiés.
Développez Conteneurs, mise en réseau, sécurité.
Accédez à l'onglet Sécurité :
- Compte de service : sélectionnez
jamf-sc-receiver-sa.
- Compte de service : sélectionnez
Accédez à l'onglet Conteneurs :
- Cliquez sur Variables et secrets.
- Cliquez sur + Ajouter une variable pour chaque variable d'environnement :
Nom de la variable Exemple de valeur Description GCS_BUCKETjamf-security-cloud-logsNom du bucket Cloud Storage GCS_PREFIXjamf-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-TokenCliquez sur Créer.
Attendez que le service soit créé. Une fois le service créé, l'éditeur de code intégré s'ouvre automatiquement.
Saisissez main dans le champ Point d'entrée.
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.*
Cliquez sur Enregistrer et redéployer.
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
- Connectez-vous au portail Jamf Security Cloud.
- Accédez à Intégrations > Flux de données.
- Cliquez sur Nouvelle configuration.
- Sélectionnez le type de flux de données (par exemple, Événements de menace).
- Sélectionnez HTTP générique comme type de cible du flux de données.
- Cliquez sur Continuer.
- 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-Tokenavec le jeton généré comme valeur.
- Cliquez sur Tester la configuration et vérifiez que le test a réussi.
- Cliquez sur le bouton Activer la configuration pour activer le flux de données.
- Cliquez sur Enregistrer.
- 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
- Connectez-vous à la console Google SecOps.
- Accédez à Paramètres SIEM> Flux.
- Cliquez sur Add New Feed (Ajouter un flux).
- Cliquez sur Configurer un flux unique.
- Sélectionnez Google Cloud Storage V2 comme Type de source.
- Sélectionnez JAMF Security Cloud comme Type de journal.
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.comCopiez cette adresse e-mail. Vous l'utiliserez à l'étape suivante.
Accorder au compte de service Google SecOps l'accès au bucket
- Accédez à Cloud Storage > Buckets.
- Cliquez sur le nom de votre bucket.
- Accédez à l'onglet Autorisations.
- Cliquez sur Accorder l'accès.
- 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.
Cliquez sur Enregistrer.
Configurer un flux dans Google SecOps pour ingérer des données depuis Google Cloud Storage
- Accédez à Paramètres SIEM> Flux.
- Cliquez sur Add New Feed (Ajouter un flux).
- Cliquez sur Configurer un flux unique.
- Dans le champ Nom du flux, saisissez un nom pour le flux (par exemple,
Jamf Security Cloud logs). - Sélectionnez Google Cloud Storage V2 comme Type de source.
- Sélectionnez JAMF Security Cloud comme Type de journal.
- Cliquez sur Suivant.
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-logspar le nom réel de votre bucket. - Incluez toujours la barre oblique finale (
/) à la fin de l'URI.
- Remplacez
Cliquez sur Suivant.
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
- Créez un bucket Amazon S3 en suivant ce guide de l'utilisateur : Créer un bucket.
- Enregistrez le nom et la région du bucket pour référence ultérieure (par exemple,
jamf-security-cloud-logs). 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:PutObjectsur le bucket et le compte AWS de Jamf listé en tant qu'entité de confiance.Enregistrez le rôle IAM
ARNpour référence ultérieure.
Configurer un flux de données AWS S3 appartenant au client dans Jamf Security Cloud
- Connectez-vous au portail Jamf Security Cloud.
- Accédez à Intégrations > Flux de données.
- Cliquez sur Nouvelle configuration.
- Sélectionnez le type de flux de données (par exemple, Événements de menace).
- Sélectionnez AWS S3 appartenant au client comme type de cible du flux de données.
- Cliquez sur Continuer.
- 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.
- Nom du bucket Amazon S3 : saisissez le nom du bucket (par exemple,
- Cliquez sur Créer une configuration.
(Facultatif) Dans Paramètres avancés, sélectionnez JSON comme format de message.
Cliquez sur le bouton Activer la configuration pour activer le flux de données.
Cliquez sur Enregistrer.
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
- Créez un utilisateur en suivant ce guide de l'utilisateur : Créer un utilisateur IAM.
- Sélectionnez l'utilisateur créé.
- Sélectionnez l'onglet Identifiants de sécurité.
- Cliquez sur Créer une clé d'accès dans la section Clés d'accès.
- Sélectionnez Service tiers comme Cas d'utilisation.
- Cliquez sur Suivant.
- Facultatif : Ajoutez un tag de description.
- Cliquez sur Créer une clé d'accès.
- 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.
- Cliquez sur OK.
- Sélectionnez l'onglet Autorisations.
- Cliquez sur Ajouter des autorisations dans la section Règles relatives aux autorisations.
- Sélectionnez Ajouter des autorisations.
- Sélectionnez Joindre directement des règles.
- Recherchez la règle AmazonS3FullAccess.
- Sélectionnez la règle.
- Cliquez sur Suivant.
- Cliquez sur Ajouter des autorisations.
Configurer un flux dans Google SecOps pour ingérer des données depuis Amazon S3
- Accédez à Paramètres SIEM> Flux.
- Cliquez sur Add New Feed (Ajouter un flux).
- Cliquez sur Configurer un flux unique.
- Dans le champ Nom du flux, saisissez un nom pour le flux (par exemple,
Jamf Security Cloud logs). - Sélectionnez Amazon S3 V2 comme type de source.
- Sélectionnez JAMF Security Cloud comme Type de journal.
- Cliquez sur Suivant.
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-logspar le nom réel de votre bucket S3.
- Remplacez
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 |
|---|---|---|
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é : true → STATUS_UPDATE |
has_user |
metadata.event_type |
Mappé : true → USER_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.