Collecter les journaux JFrog Artifactory

Compatible avec:

Cet analyseur gère deux formats de journaux JFrog Artifactory différents. Il utilise des modèles Grok pour identifier et extraire les champs de chaque format. Il mappe ensuite ces champs sur l'UDM, gère les charges utiles JSON dans l'un des formats et supprime les journaux qui ne correspondent à aucun des formats.

Avant de commencer

  • Assurez-vous de disposer d'une instance Google SecOps.
  • Assurez-vous de disposer d'un accès privilégié à JFrog.

Configurer un flux dans Google SecOps pour ingérer les journaux JFrog Artifactory

  1. Accédez à Paramètres du SIEM > Flux.
  2. Cliquez sur Ajouter.
  3. Dans le champ Nom du flux, saisissez un nom pour le flux (par exemple, JFrog Artifactory Logs).
  4. Sélectionnez Webhook comme type de source.
  5. Sélectionnez JFrog Artifactory comme Type de journal.
  6. Cliquez sur Suivant.
  7. Facultatif: spécifiez des valeurs pour les paramètres d'entrée suivants :
    • Délimiteur de fractionnement: délimiteur utilisé pour séparer les lignes de journal, par exemple \n.
    • Espace de noms des éléments: espace de noms des éléments.
    • Libellés d'ingestion: libellé appliqué aux événements de ce flux.
  8. Cliquez sur Suivant.
  9. Vérifiez la configuration du flux dans l'écran Finaliser, puis cliquez sur Envoyer.
  10. Cliquez sur Générer une clé secrète pour générer une clé secrète permettant d'authentifier ce flux.
  11. Copiez et stockez la clé secrète. Vous ne pourrez plus afficher cette clé secrète. Si nécessaire, vous pouvez générer une nouvelle clé secrète, mais cette action rend l'ancienne clé secrète obsolète.
  12. Dans l'onglet Détails, copiez l'URL du point de terminaison du flux dans le champ Informations sur le point de terminaison. Vous devez spécifier cette URL de point de terminaison dans votre application cliente.
  13. Cliquez sur OK.

Créer une clé API pour le flux webhook

  1. Accédez à la console Google Cloud > Identifiants.

    Accéder à "Identifiants"

  2. Cliquez sur Créer des identifiants, puis sélectionnez Clé API.

  3. Limitez l'accès de la clé API à l'API Google Security Operations.

Spécifier l'URL du point de terminaison

  1. Dans votre application cliente, spécifiez l'URL du point de terminaison HTTPS fournie dans le flux de webhook.
  2. Activez l'authentification en spécifiant la clé API et la clé secrète dans l'en-tête personnalisé au format suivant:

    X-goog-api-key = API_KEY
    X-Webhook-Access-Key = SECRET
    

    Recommandation: Spécifiez la clé API en tant qu'en-tête plutôt que dans l'URL.

  3. Si votre client webhook n'est pas compatible avec les en-têtes personnalisés, vous pouvez spécifier la clé API et la clé secrète à l'aide de paramètres de requête au format suivant:

    ENDPOINT_URL?key=API_KEY&secret=SECRET
    

    Remplacez les éléments suivants :

    • ENDPOINT_URL: URL du point de terminaison du flux.
    • API_KEY: clé API permettant de s'authentifier auprès de Google SecOps.
    • SECRET: clé secrète que vous avez générée pour authentifier le flux.

Créer un webhook dans JFrog Artifactory pour envoyer des données à Google SecOps

  1. Connectez-vous à l'instance JFrog à l'aide de vos identifiants d'administrateur.
  2. Accédez à Administration > Général > Webhooks.
  3. Cliquez sur + Nouveau webhook.
  4. Configurez les paramètres de webhook suivants:

    • Clé Webhook: indiquez un nom descriptif (par exemple, Google SecOps).
    • URL: saisissez l'<ENDPOINT_URL> du point de terminaison de l'API Google SecOps.

    • Événements: sélectionnez les événements Artifactory qui doivent déclencher le webhook, puis choisissez les événements pertinents pour vos besoins de surveillance de la sécurité (par exemple, déployé, téléchargé ou supprimé).

    • Domaine: si vous utilisez un dépôt virtuel, sélectionnez le domaine approprié. Sinon, laissez ce champ défini sur Toute zone locale.

    • Dépôt: sélectionnez le dépôt spécifique ou laissez la valeur Tout dépôt distant ou Tout dépôt local, selon vos besoins.

  5. Cliquez sur Test pour envoyer un événement de test à Google SecOps.

  6. Cliquez sur Enregistrer.

Tableau de mappage UDM

Champ de journal Mappage UDM Logique
action read_only_udm.metadata.product_event_type La valeur action du journal brut est convertie en minuscules et mappée.
datetime read_only_udm.metadata.event_timestamp Le champ datetime du journal brut est analysé et converti en code temporel.
hostname read_only_udm.principal.hostname Mappé directement à partir du champ hostname (Nom d'hôte) du journal brut.
id read_only_udm.metadata.product_log_id Mappé directement à partir du champ id du journal brut (à partir de la charge utile JSON).
ip read_only_udm.principal.ip Mappé directement à partir du champ ip du journal brut. Coded en dur sur "USER_RESOURCE_ACCESS". Code codé en dur sur "JFROG_ARTIFACTORY". Code dur "Artifactory". Code codé en dur sur "JFROG".
Propriétaire read_only_udm.principal.user.userid Mappé si username n'est pas présent dans le journal brut (à partir de la charge utile JSON).
repo_name read_only_udm.target.resource.name Mappé directement à partir du champ repo_name du journal brut.
repo_type read_only_udm.target.resource.resource_subtype Mappé directement à partir du champ repo_type du journal brut.
portée read_only_udm.target.resource.name Mappé directement à partir du champ scope (champ d'étendue) du journal brut (à partir de la charge utile JSON).
portée read_only_udm.target.resource.resource_subtype Codé en dur sur "scope" si scope est présent dans le journal brut.
sequenceId read_only_udm.metadata.product_log_id Les guillemets sont supprimés du champ sequenceId, puis mappés.
subject read_only_udm.about.labels.key Valeur codée en dur sur "subject" si subject est présent dans le journal brut.
subject read_only_udm.about.labels.value Mappé directement à partir du champ subject (objet) du journal brut (à partir de la charge utile JSON).
type read_only_udm.metadata.product_event_type Mappé directement à partir du champ type du journal brut (à partir de la charge utile JSON).
Utilisateur read_only_udm.principal.user.userid Mappé directement à partir du champ user du journal brut.
username read_only_udm.principal.user.userid Mappé directement à partir du champ nom d'utilisateur du journal brut (à partir de la charge utile JSON).

Modifications

2024-09-23

  • Amélioration:
  • Ajout de la possibilité d'analyser les journaux non analysés.
  • Mappage de "target_ip" sur "target.ip" et "target.asset.ip".
  • Mappage de "desc" sur "metadata.description".
  • Mappage de "method" sur "network.http.method".
  • Mappage de "url" sur "target.url".
  • Mappage de "prin_url" sur "principal.url".
  • Mappage de "response_code" sur "network.http.response_code".
  • Mappage de "RequestMethod" sur "network.http.method".
  • Mappage de "RequestPath" sur "target.url".
  • Mappage de "DownstreamContentSize" et "DownstreamStatus" sur "Additional.Fields".
  • "ServiceAddr" a été mappé sur "principal.hostname" et "principal.port".
  • Mappage de "ClientAddr" sur "target.ip" et "target.port".
  • "user_agent" a été mappé sur "network.http.user_agent".
  • Mappage de "level" sur "security_result.severity".
  • Mappage de "msg" sur "security_result.description".
  • Mappage de "protocol" sur "network.application_protocol".

2023-08-25

  • Analyseur nouvellement créé.