GitLab-Logs erfassen

Unterstützt in:

Übersicht

Dieser Parser extrahiert Felder aus GitLab-JSON-Logs, normalisiert sie im Unified Data Model (UDM) und reichert die Daten mit zusätzlichem Kontext an. Es verarbeitet verschiedene GitLab-Ereignistypen, wobei der Schwerpunkt auf Nutzeraktionen, Ressourcenzugriff und Sicherheitsergebnissen liegt. Außerdem werden netzwerk- und anwendungsbezogene Informationen verarbeitet. Der Parser führt auch Logik basierend auf Rollen und Aktionen in GitLab aus, kategorisiert Ereignisse und weist ihnen entsprechende Schweregrade zu.

Hinweise

Prüfen Sie, ob die folgenden Voraussetzungen erfüllt sind:

  • Google SecOps-Instanz.
  • Privilegierter Zugriff auf GitLab.

Feeds einrichten

Es gibt zwei verschiedene Einstiegspunkte zum Einrichten von Feeds in der Google SecOps-Plattform:

  • SIEM-Einstellungen > Feeds
  • Content Hub> Content-Pakete

Feeds über „SIEM-Einstellungen“ > „Feeds“ einrichten

So konfigurieren Sie einen Feed:

  1. Rufen Sie die SIEM-Einstellungen > Feeds auf.
  2. Klicken Sie auf Neuen Feed hinzufügen.
  3. Klicken Sie auf der nächsten Seite auf Einen einzelnen Feed konfigurieren.
  4. Geben Sie im Feld Feed name (Feedname) einen Namen für den Feed ein, z. B. GitLab Logs (GitLab-Logs).
  5. Wählen Sie Webhook als Quelltyp aus.
  6. Wählen Sie Gitlab als Logtyp aus.
  7. Klicken Sie auf Weiter.
  8. Optional: Geben Sie Werte für die folgenden Eingabeparameter an:
    • Trennzeichen für Aufteilung: Das Trennzeichen, das zum Trennen von Logzeilen verwendet wird, z. B. \n.
    • Asset-Namespace: der Asset-Namespace.
    • Aufnahmelabels: Das Label, das auf die Ereignisse aus diesem Feed angewendet wird.
  9. Klicken Sie auf Weiter.
  10. Prüfen Sie die Feedkonfiguration auf dem Bildschirm Finalize (Abschließen) und klicken Sie dann auf Submit (Senden).
  11. Klicken Sie auf Geheimen Schlüssel generieren, um einen geheimen Schlüssel zur Authentifizierung dieses Feeds zu generieren.
  12. Kopieren Sie den geheimen Schlüssel und speichern Sie ihn. Sie können diesen geheimen Schlüssel nicht noch einmal aufrufen. Bei Bedarf können Sie einen neuen geheimen Schlüssel generieren. Dadurch wird der vorherige geheime Schlüssel jedoch ungültig.
  13. Kopieren Sie auf dem Tab Details die Feed-Endpunkt-URL aus dem Feld Endpunktinformationen. Sie müssen diese Endpunkt-URL in Ihrer Clientanwendung angeben.
  14. Klicken Sie auf Fertig.

Feeds über den Content Hub einrichten

Geben Sie Werte für die folgenden Felder an:

  • Trennzeichen für Aufteilung: Das Trennzeichen, das zum Trennen von Logzeilen verwendet wird, z. B. \n.

Erweiterte Optionen

  • Feedname: Ein vorausgefüllter Wert, der den Feed identifiziert.
  • Quelltyp: Methode, die zum Erfassen von Logs in Google SecOps verwendet wird.
  • Asset-Namespace: Der Namespace, der dem Feed zugeordnet ist.
  • Aufnahmelabels: Labels, die auf alle Ereignisse aus diesem Feed angewendet werden.

  • Klicken Sie auf Geheimen Schlüssel generieren, um einen geheimen Schlüssel zur Authentifizierung dieses Feeds zu generieren.

  • Kopieren Sie den geheimen Schlüssel und speichern Sie ihn. Sie können diesen geheimen Schlüssel nicht noch einmal aufrufen. Bei Bedarf können Sie einen neuen geheimen Schlüssel generieren. Dadurch wird der vorherige geheime Schlüssel jedoch ungültig.

  • Kopieren Sie auf dem Tab Details die Feed-Endpunkt-URL aus dem Feld Endpunktinformationen. Sie müssen diese Endpunkt-URL in Ihrer Clientanwendung angeben.

API-Schlüssel für den Webhook-Feed erstellen

  1. Rufen Sie die Google Cloud Console > Anmeldedaten auf.

    Zu den Anmeldedaten

  2. Klicken Sie auf Anmeldedaten erstellen und wählen Sie anschließend API-Schlüssel aus.

  3. Schränken Sie den API-Schlüsselzugriff auf die Chronicle API ein.

Endpunkt-URL angeben

  1. Geben Sie in Ihrer Clientanwendung die HTTPS-Endpunkt-URL an, die im Webhook-Feed bereitgestellt wird.
  2. Aktivieren Sie die Authentifizierung, indem Sie den API-Schlüssel und den geheimen Schlüssel als Teil des benutzerdefinierten Headers im folgenden Format angeben:

    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 Headern unterstützt, können Sie den API-Schlüssel und den geheimen Schlüssel mit Suchparametern im folgenden Format angeben:

    ENDPOINT_URL?key=API_KEY&secret=SECRET
    

Ersetzen Sie Folgendes:

  • ENDPOINT_URL: Die URL des Feed-Endpunkts.
  • API_KEY: Der API-Schlüssel für die Authentifizierung bei Google Security Operations.
  • SECRET: Der geheime Schlüssel, den Sie zur Authentifizierung des Feeds generiert haben.

Webhook in GitLab für Google SecOps konfigurieren

  1. Öffnen Sie Ihren Webbrowser und rufen Sie das GitLab-Projekt auf, für das Sie den Webhook konfigurieren möchten.
  2. Rufen Sie in Ihrem Projekt die Einstellungen > Webhooks auf.
  3. Klicken Sie auf Neuen Webhook hinzufügen.
  4. Fügen Sie im Feld URL die Google SecOps-Endpunkt-URL ein.
  5. Klicken Sie auf Benutzerdefinierten Header hinzufügen.
  6. Geben Sie X-Webhook-Access-Key in das Feld Header Name (Header-Name) ein.
  7. Kopieren Sie für das Feld Header Value (Header-Wert) den geheimen Schlüssel, der bei der Konfiguration des Google SecOps-Feeds generiert wurde.
  8. Klicken Sie auf Benutzerdefinierten Header hinzufügen.
  9. Geben Sie X-goog-api-key in das Feld Header Name ein.
  10. Kopieren Sie für das Feld Header Value (Header-Wert) den API-Schlüssel, der bei der Konfiguration des Google SecOps-Feeds generiert wurde. Hinweis: Aus Sicherheitsgründen sollten Sie ein geheimes Token generieren und sowohl der GitLab-Webhook-Konfiguration als auch der entsprechenden Google SecOps Feed-Konfiguration hinzufügen. So kann die Authentizität eingehender Webhooks überprüft werden.
  11. Wählen Sie die GitLab-Ereignisse aus, die den Webhook auslösen sollen. Sie können beispielsweise Push-Ereignisse auswählen, um jedes Mal, wenn Code in das Repository übertragen wird, Daten an Google SecOps zu senden. Überlegen Sie genau, welche Ereignisse für Ihre Sicherheitsüberwachung relevant sind. Zu viele Ereignisse können zu unnötiger Last führen.
  12. Geben Sie dem Webhook einen aussagekräftigen Namen, z. B. Google SecOps-Webhook, damit Sie seinen Zweck besser nachvollziehen können.
  13. Achten Sie darauf, dass das Kästchen SSL-Überprüfung aktivieren angeklickt ist. Dies ist für eine sichere Kommunikation entscheidend.
  14. Klicken Sie auf Webhook hinzufügen, um die Konfiguration zu speichern.

UDM-Zuordnungstabelle

Logfeld UDM-Zuordnung Logik
author_id principal.user.userid In String umgewandelt.
author_name principal.user.email_addresses Wenn der Wert mit einem Regex für E-Mail-Adressen übereinstimmt.
author_name principal.user.user_display_name Wenn der Wert nicht mit einem Regex für E-Mail-Adressen übereinstimmt.
details.as principal.resource.attribute.labels Als Label mit dem Schlüssel „as“ hinzugefügt.
details.add principal.resource.attribute.labels Als Label mit dem Schlüssel „add“ hinzugefügt.
details.as principal.user.role_name Der Rohwert des Logfelds.
details.as principal.user.attribute.roles.type Auf „ADMINISTRATOR“ festgelegt, wenn details.as „Owner“ ist, auf „SERVICE_ACCOUNT“, wenn details.as „Developer“, „Maintainer“ oder „Reporter“ ist, und auf „TYPE_UNSPECIFIED“, wenn details.as „Guest“ ist.
details.custom_message security_result.description Der Rohwert des Logfelds.
details.custom_message.action security_result.summary Der Rohwert des Logfelds.
details.entity_path target.file.full_path Der Rohwert des Logfelds.
details.target_id target.resource.id In String umgewandelt.
entity_path target.file.full_path Der Rohwert des Logfelds.
entity_type target.resource.attribute.labels Als Label mit dem Schlüssel „Entity Type“ hinzugefügt.
event_type metadata.product_event_type Der Rohwert des Logfelds.
insertId metadata.product_log_id Der Rohwert des Logfelds.
ip_address principal.ip, principal.asset.ip Der Rohwert des Logfelds.
jsonPayload.action additional.fields Wird als Feld mit dem Schlüssel „action“ und dem String-Wert hinzugefügt.
jsonPayload.controller additional.fields Wird als Feld mit dem Schlüssel „controller“ und einem Stringwert hinzugefügt.
jsonPayload.correlation_id principal.asset_id Beginnt mit „id: “.
jsonPayload.cpu_s additional.fields Als Feld mit dem Schlüssel „cpu_s“ und String-Wert hinzugefügt.
jsonPayload.details.custom_message.protocol network.application_protocol Wird auf „UNKNOWN_APPLICATION_PROTOCOL“ gesetzt, wenn der Wert „web“ ist. Andernfalls wird er in Großbuchstaben konvertiert. Wird auch als zusätzliches Feld mit dem Schlüssel „Application Protocol“ (Anwendungsprotokoll) hinzugefügt, wenn der Wert „web“ ist.
jsonPayload.mem_total_bytes additional.fields Als Feld mit dem Schlüssel „mem_total_bytes“ und dem Stringwert hinzugefügt.
jsonPayload.meta_caller_id additional.fields Als Feld mit dem Schlüssel „Caller Id“ und dem String-Wert hinzugefügt.
jsonPayload.meta_client_id target.user.userid Der Rohwert des Logfelds.
jsonPayload.meta_feature_category additional.fields Als Feld mit dem Schlüssel „Feature Category“ und einem String-Wert hinzugefügt.
jsonPayload.meta_remote_ip principal.ip, principal.asset.ip Der Rohwert des Logfelds, der als JSON-Array geparst und in die IP-Felder zusammengeführt wird.
jsonPayload.meta_user principal.user.userid Wird als Fallback verwendet, wenn jsonPayload.username leer ist.
jsonPayload.method network.http.method Der Rohwert des Logfelds.
jsonPayload.path target.process.file.full_path Der Rohwert des Logfelds.
jsonPayload.pid target.process.pid In String umgewandelt.
jsonPayload.remote_ip principal.ip, principal.asset.ip Der Rohwert des Logfelds.
jsonPayload.request_urgency additional.fields Als Feld mit dem Schlüssel „Request Urgency“ und dem Stringwert hinzugefügt.
jsonPayload.severity security_result.severity Setzen Sie den Wert auf „INFORMATIONAL“, wenn der Wert „INFO“ ist, auf „ERROR“, wenn der Wert „ERROR“ ist, und auf „MEDIUM“, wenn der Wert „NOTICE“ ist.
jsonPayload.status network.http.response_code Wird in eine Ganzzahl umgewandelt, wenn nicht „ACTIVE“.
jsonPayload.ua network.http.user_agent Der Rohwert des Logfelds.
jsonPayload.username principal.user.userid Der Rohwert des Logfelds.
jsonPayload.worker_id principal.application Der Rohwert des Logfelds.
labels.instance_name principal.hostname, principal.asset.hostname Der Rohlogfeldwert, der verwendet wird, wenn die Nachricht „Nutzer entfernen“ enthält.
logName security_result.category_details Der Rohwert des Logfelds.
message security_result.summary Der Rohlogfeldwert, der verwendet wird, wenn jsonPayload.severity „ERROR“ ist.
protoPayload.@type additional.fields Wird als Feld mit dem Schlüssel „protoPayload type“ und dem String-Wert hinzugefügt.
protoPayload.authenticationInfo.principalEmail principal.user.email_addresses, principal.user.userid Der Rohwert des Logfelds.
protoPayload.authenticationInfo.principalSubject additional.fields Wird als Feld mit dem Schlüssel „authenticationInfo principalSubject“ und dem Stringwert hinzugefügt.
protoPayload.authenticationInfo.serviceAccountKeyName additional.fields Wird als Feld mit dem Schlüssel „authenticationInfo serviceAccountKeyName“ und dem Stringwert hinzugefügt.
protoPayload.authorizationInfo target.resource.attribute.labels, security_result.action Werte in diesem Feld werden als Labels mit Schlüsseln hinzugefügt, denen „authenticationInfo“ vorangestellt ist. security_result.action wird auf „ALLOW“ gesetzt, wenn ein Wert in granted „true“ ist, und auf „BLOCK“, wenn „false“. Verschachtelte Felder wie resourceAttributes werden ebenfalls als Labels mit Schlüsseln hinzugefügt, deren Präfix „authenticationInfo_resourceAttributes“ lautet.
protoPayload.methodName additional.fields Wird als Feld mit dem Schlüssel „protoPayload methodName“ und String-Wert hinzugefügt.
protoPayload.request.@type additional.fields Als Feld mit dem Schlüssel „Request Type“ und dem Stringwert hinzugefügt.
protoPayload.request.resource target.resource.attribute.labels Als Label mit dem Schlüssel „Request resource“ hinzugefügt.
protoPayload.requestMetadata.callerIp additional.fields Wird als Feld mit dem Schlüssel „requestMetadata callerIp“ und dem Stringwert hinzugefügt.
protoPayload.requestMetadata.callerSuppliedUserAgent additional.fields Wird als Feld mit dem Schlüssel „requestMetadata callerSuppliedUserAgent“ und einem Stringwert hinzugefügt.
protoPayload.serviceName additional.fields Wird als Feld mit dem Schlüssel „serviceName“ und einem Stringwert hinzugefügt.
protoPayload.status.code additional.fields Wird als Feld mit dem Schlüssel „protoPayload status code“ und dem Stringwert hinzugefügt.
protoPayload.status.message additional.fields, target.user.email_addresses, target.user.userid Wird als Feld mit dem Schlüssel „protoPayload status message“ und dem Stringwert hinzugefügt. Wenn eine E-Mail-Adresse aus der Nachricht extrahiert werden kann, wird sie target.user.email_addresses und target.user.userid hinzugefügt.
receiveTimestamp metadata.event_timestamp, timestamp Wird als Zeitstempel des Ereignisses geparst.
resource.labels.project_id target.resource.attribute.labels Als Label mit dem Schlüssel „Project id“ hinzugefügt.
resource.labels.zone target.cloud.availability_zone Der Rohwert des Logfelds.
resource.type target.cloud.environment Legen Sie den Wert auf „GOOGLE_CLOUD_PLATFORM“ fest, wenn er „gce“ entspricht.
security_result.action security_result.action Abgeleitet von protoPayload.authorizationInfo.granted.
security_result.category_details security_result.category_details Mit logName zusammengeführt.
security_result.description security_result.description Abgeleitet von jsonPayload.details.custom_message.
security_result.severity security_result.severity Abgeleitet von severity oder jsonPayload.severity.
security_result.summary security_result.summary Abgeleitet von jsonPayload.details.custom_message.action oder jsonPayload.message.
severity security_result.severity Setzen Sie den Wert auf „INFORMATIONAL“, wenn der Wert „INFO“ ist, auf „ERROR“, wenn der Wert „ERROR“ ist, und auf „MEDIUM“, wenn der Wert „NOTICE“ ist.
sourceLocation principal.resource.attribute.labels Werte in diesem Feld werden als Labels hinzugefügt.
target_details target.resource.attribute.labels Wird als Label mit dem Schlüssel „Target Details“ hinzugefügt.
target_type target.resource.attribute.labels Wird als Label mit dem Schlüssel „target type“ hinzugefügt.
timestamp timestamp Der Rohwert des Logfelds. Wird basierend auf dem Vorhandensein von Haupt- und Zielfeldern festgelegt. Der Standardwert ist „GENERIC_EVENT“, wenn keine bestimmte Bedingung erfüllt ist. Mögliche Werte sind „USER_RESOURCE_UPDATE_CONTENT“, „USER_RESOURCE_ACCESS“ und „USER_UNCATEGORIZED“. Legen Sie diesen Wert auf „GITLAB“ fest. Legen Sie diesen Wert auf „GITLAB“ fest.

Benötigen Sie weitere Hilfe? Antworten von Community-Mitgliedern und Google SecOps-Experten erhalten