JFrog Artifactory-Protokolle erfassen
Dieser Parser verarbeitet zwei verschiedene JFrog Artifactory-Logformate. Es verwendet Grok-Muster, um Felder aus den einzelnen Formaten zu identifizieren und zu extrahieren. Diese Felder werden dann dem UDM zugeordnet. JSON-Nutzlasten werden in einem der Formate verarbeitet und Protokolle, die keinem der Formate entsprechen, werden verworfen.
Hinweis
- Sie benötigen eine Google SecOps-Instanz.
- Sie benötigen erhöhte Zugriffsrechte für JFrog.
Feed in Google SecOps für die Aufnahme der JFrog Artifactory-Protokolle konfigurieren
- Gehen Sie zu SIEM-Einstellungen > Feeds.
- Klicken Sie auf Neu hinzufügen.
- Geben Sie im Feld Feedname einen Namen für den Feed ein, z. B. JFrog Artifactory-Protokolle.
- Wählen Sie als Quelltyp Webhook aus.
- Wählen Sie JFrog Artifactory als Logtyp aus.
- Klicken Sie auf Weiter.
- Optional: Geben Sie Werte für die folgenden Eingabeparameter an:
- Trennzeichen für die Aufteilung: Das Trennzeichen, mit dem Logzeilen getrennt werden, z. B.
\n
. - Asset-Namespace: der Asset-Namespace.
- Aufnahmelabels: Das Label, das auf die Ereignisse aus diesem Feed angewendet wird.
- Trennzeichen für die Aufteilung: Das Trennzeichen, mit dem Logzeilen getrennt werden, z. B.
- Klicken Sie auf Weiter.
- Überprüfen Sie die Feedkonfiguration auf dem Bildschirm Abschließen und klicken Sie dann auf Senden.
- Klicken Sie auf Secret-Schlüssel generieren, um einen Secret-Schlüssel zur Authentifizierung dieses Feeds zu generieren.
- Kopieren und speichern Sie den geheimen Schlüssel. Sie können diesen geheimen Schlüssel nicht noch einmal aufrufen. Bei Bedarf können Sie einen neuen Secret-Schlüssel generieren. Dadurch wird der vorherige Secret-Schlüssel jedoch ungültig.
- Kopieren Sie auf dem Tab Details die Feedendpunkt-URL aus dem Feld Endpunktinformationen. Sie müssen diese Endpunkt-URL in Ihrer Clientanwendung angeben.
- Klicken Sie auf Fertig.
API-Schlüssel für den Webhook-Feed erstellen
Rufen Sie die Google Cloud Console > Anmeldedaten auf.
Klicken Sie auf Anmeldedaten erstellen und wählen Sie anschließend API-Schlüssel aus.
Beschränken Sie den API-Schlüsselzugriff auf die Google Security Operations API.
Endpunkt-URL angeben
- Geben Sie in Ihrer Clientanwendung die HTTPS-Endpunkt-URL an, die im Webhook-Feed angegeben ist.
Aktiviere die Authentifizierung, indem du den API-Schlüssel und den geheimen Schlüssel als Teil der benutzerdefinierten Kopfzeile im folgenden Format angibst:
X-goog-api-key = API_KEY X-Webhook-Access-Key = SECRET
Empfehlung: Geben Sie den API-Schlüssel als Header an, anstatt ihn in der URL anzugeben.
Wenn Ihr Webhook-Client keine benutzerdefinierten Header unterstützt, können Sie den API-Schlüssel und den geheimen Schlüssel mithilfe von Suchparametern im folgenden Format angeben:
ENDPOINT_URL?key=API_KEY&secret=SECRET
Ersetzen Sie Folgendes:
ENDPOINT_URL
: die URL des Feedendpunkts.API_KEY
: Der API-Schlüssel, mit dem Sie sich bei Google SecOps authentifizieren.SECRET
: der geheime Schlüssel, den Sie zur Authentifizierung des Feeds generiert haben.
Webhook in JFrog Artifactory erstellen, um Daten an Google SecOps zu senden
- Melden Sie sich mit Ihren Administratoranmeldedaten in der JFrog-Instanz an.
- Gehen Sie zu Verwaltung > Allgemein > Webhooks.
- Klicken Sie auf + Neuer Webhook.
Konfigurieren Sie die folgenden Webhook-Einstellungen:
- Webhook-Schlüssel: Geben Sie einen beschreibenden Namen ein, z. B. Google SecOps.
URL: Geben Sie die
<ENDPOINT_URL>
des Google SecOps API-Endpunkt ein.Ereignisse: Wählen Sie die Artifactory-Ereignisse aus, die den Webhook auslösen sollen. Wählen Sie die Ereignisse aus, die für Ihre Sicherheitsüberwachungsanforderungen relevant sind, z. B. deployed (bereitgestellt), downloaded (heruntergeladen) oder deleted (gelöscht).
Domain: Wenn Sie ein virtuelles Repository verwenden, wählen Sie die entsprechende Domain aus. Andernfalls lassen Sie dieses Feld auf Beliebig lokal.
Repository: Wählen Sie das gewünschte Repository aus oder lassen Sie die Option Beliebiges Remote-Repository oder Beliebiges lokales Repository aktiviert.
Klicken Sie auf Testen, um ein Testereignis an Google SecOps zu senden.
Klicken Sie auf Speichern.
UDM-Zuordnungstabelle
Logfeld | UDM-Zuordnung | Logik |
---|---|---|
action | read_only_udm.metadata.product_event_type |
Der Wert von action aus dem Rohprotokoll wird in Kleinbuchstaben umgewandelt und zugeordnet. |
datetime | read_only_udm.metadata.event_timestamp |
Das Feld datetime des Rohlogs wird analysiert und in einen Zeitstempel umgewandelt. |
hostname | read_only_udm.principal.hostname |
Wird direkt aus dem Feld hostname des Rohlogs zugeordnet. |
id | read_only_udm.metadata.product_log_id |
Wird direkt aus dem Feld id des Rohlogs (aus der JSON-Nutzlast) zugeordnet. |
ip | read_only_udm.principal.ip |
Wird direkt aus dem Feld ip des Rohlogs zugeordnet. Hartcodiert auf „USER_RESOURCE_ACCESS“. Hartcodiert auf „JFROG_ARTIFACTORY“. Hartcodiert auf „Artifactory“. Hartcodiert auf „JFROG“. |
owner | read_only_udm.principal.user.userid |
Wird zugeordnet, wenn username nicht im Rohprotokoll (aus der JSON-Nutzlast) vorhanden ist. |
repo_name | read_only_udm.target.resource.name |
Wird direkt aus dem Feld repo_name des Rohlogs zugeordnet. |
repo_type | read_only_udm.target.resource.resource_subtype |
Direkt aus dem Feld repo_type des Rohlogs abgeleitet. |
scope | read_only_udm.target.resource.name |
Wird direkt aus dem Feld scope des Rohlogs (aus der JSON-Nutzlast) zugeordnet. |
scope | read_only_udm.target.resource.resource_subtype |
Wird auf „scope“ hartcodiert, wenn scope im Rohprotokoll vorhanden ist. |
sequenceId | read_only_udm.metadata.product_log_id |
Anführungszeichen werden aus dem Feld sequenceId entfernt und dann zugeordnet. |
subject | read_only_udm.about.labels.key |
Ist „subject“ im Rohprotokoll vorhanden, wird „subject“ hartcodiert. |
subject | read_only_udm.about.labels.value |
Wird direkt aus dem Feld subject des Rohlogs (aus der JSON-Nutzlast) zugeordnet. |
type | read_only_udm.metadata.product_event_type |
Wird direkt aus dem Feld type des Rohlogs (aus der JSON-Nutzlast) zugeordnet. |
Nutzer | read_only_udm.principal.user.userid |
Wird direkt aus dem Feld user des Rohlogs zugeordnet. |
username | read_only_udm.principal.user.userid |
Wird direkt aus dem Feld username (aus der JSON-Nutzlast) des Rohlogs zugeordnet. |
Änderungen
2024-09-23
- Verbesserung:
- Unterstützung für das Parsen der nicht geparsten Protokolle hinzugefügt.
- „target_ip“ wurde „target.ip“ und „target.asset.ip“ zugeordnet.
- „desc“ wurde „metadata.description“ zugeordnet.
- „method“ wurde „network.http.method“ zugeordnet.
- „url“ wurde „target.url“ zugeordnet.
- „prin_url“ wurde in „principal.url“ geändert.
- „response_code“ wurde in „network.http.response_code“ geändert.
- „RequestMethod“ wurde auf „network.http.method“ zugeordnet.
- „RequestPath“ wurde mit „target.url“ verknüpft.
- „DownstreamContentSize“ und „DownstreamStatus“ wurden auf „Additional.Fields“ zugeordnet.
- „ServiceAddr“ wurde „principal.hostname“ und „principal.port“ zugeordnet.
- „ClientAddr“ wurde „target.ip“ und „target.port“ zugeordnet.
- „user_agent“ wurde „network.http.user_agent“ zugeordnet.
- „level“ wurde „security_result.severity“ zugeordnet.
- „msg“ wurde in „security_result.description“ geändert.
- „protocol“ wurde „network.application_protocol“ zugeordnet.
2023-08-25
- Neu erstellter Parser.