CircleCI-Audit-Logs erfassen

Unterstützt in:

Dieser Parser extrahiert Felder aus CircleCI-Audit-Logs im CSV- und JSON-Format und wandelt sie in das Unified Data Model (UDM) um. Es unterstützt beide Formate, führt Datentransformationen und -anreicherungen durch und ordnet die extrahierten Felder den entsprechenden UDM-Feldern im Ereignis-Objekt zu. Der Schwerpunkt liegt auf Nutzeraktionen, Ressourcenzugriff und Aktualisierungsereignissen. Diese werden kategorisiert und relevante UDM-Felder wie principal, target, network und metadata werden ausgefüllt.

Hinweise

  • Sie benötigen eine Google SecOps-Instanz.
  • Sie benötigen erhöhte Zugriffsrechte für CircleCI.

Feed in Google SecOps konfigurieren, um CircleCI-Protokolle aufzunehmen

  1. Gehen Sie zu SIEM-Einstellungen > Feeds.
  2. Klicken Sie auf Neu hinzufügen.
  3. Geben Sie im Feld Feedname einen Namen für den Feed ein, z. B. CircleCI-Protokolle.
  4. Wählen Sie als Quelltyp Webhook aus.
  5. Wählen Sie CircleCI als Logtyp aus.
  6. Klicken Sie auf Weiter.
  7. 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.
  8. Klicken Sie auf Weiter.
  9. Überprüfen Sie die Feedkonfiguration auf dem Bildschirm Abschließen und klicken Sie dann auf Senden.
  10. Klicken Sie auf Secret-Schlüssel generieren, um einen Secret-Schlüssel zur Authentifizierung dieses Feeds zu generieren.
  11. 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.
  12. Kopieren Sie auf dem Tab Details die Feedendpunkt-URL aus dem Feld Endpunktinformationen. Sie müssen diese Endpunkt-URL in Ihrer Clientanwendung angeben.
  13. Klicken Sie auf Fertig.

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. Beschränken Sie den API-Schlüsselzugriff auf die Google Security Operations API.

Endpunkt-URL angeben

  1. Geben Sie in Ihrer Clientanwendung die HTTPS-Endpunkt-URL an, die im Webhook-Feed angegeben ist.
  2. 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.

  3. 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: den geheimen Schlüssel, den Sie zur Authentifizierung des Feeds generiert haben.

Webhook in CircleCI konfigurieren

  1. Melden Sie sich in der CircleCI-Weboberfläche an.
  2. Wählen Sie das Projekt aus, aus dem Sie die Protokolle aufnehmen möchten.
  3. Klicken Sie auf Projekteinstellungen.
  4. Wählen Sie Webhooks aus.
  5. Klicken Sie auf Webhook hinzufügen.
  6. Geben Sie Werte für die folgenden Eingabeparameter an:

    • Webhook-Name: Geben Sie einen aussagekräftigen Namen ein, z. B. Google SecOps.
    • Endpunkt-URL: Geben Sie die <ENDPOINT_URL> des Endpunkts der Google SecOps API ein.
    • Ereignisse:Wählen Sie die CircleCI-Ereignisse aus, die den Webhook auslösen sollen. Wählen Sie beispielsweise workflow-completed aus, um Daten nach Abschluss eines Workflows zu senden.
  7. Klicken Sie auf Speichern, um den Webhook zu erstellen.

UDM-Zuordnungstabelle

Logfeld UDM-Zuordnung Logik
account.id read_only_udm.about.resource.attribute.labels.value Der Wert von account.id aus dem Rohprotokoll wird dem UDM-Feld read_only_udm.about.resource.attribute.labels.value zugewiesen, wobei account_id der entsprechende Schlüssel ist.
action read_only_udm.metadata.product_event_type Der Wert von action aus dem Rohprotokoll wird dem UDM-Feld read_only_udm.metadata.product_event_type zugewiesen.
actor.id read_only_udm.principal.user.product_object_id Der Wert von actor.id aus dem Rohprotokoll wird dem UDM-Feld read_only_udm.principal.user.product_object_id zugewiesen.
actor.name read_only_udm.principal.user.userid Das Präfix „github:“ wird aus dem Feld actor.name im Rohprotokoll entfernt. Der verbleibende Wert wird dem UDM-Feld read_only_udm.principal.user.userid zugewiesen. Wenn actor.name im Rohprotokoll vorhanden ist, wird USER_RESOURCE_UPDATE_CONTENT dem Attribut read_only_udm.metadata.event_type zugewiesen. Andernfalls wird USER_RESOURCE_ACCESS zugewiesen.
id read_only_udm.metadata.product_log_id Der Wert von id aus dem Rohprotokoll wird dem UDM-Feld read_only_udm.metadata.product_log_id zugewiesen. Der Parser legt read_only_udm.metadata.log_type auf CIRCLECI fest. Der Parser setzt read_only_udm.metadata.product_name auf CIRCLECI. Der Parser setzt read_only_udm.metadata.vendor_name auf CIRCLECI.
occurred_at read_only_udm.metadata.event_timestamp Der Wert von occurred_at aus dem Rohprotokoll wird als Zeitstempel geparst und dem UDM-Feld read_only_udm.metadata.event_timestamp zugewiesen.
organization.name read_only_udm.target.administrative_domain Das Präfix „github:“ wird aus dem Feld organization.name im Rohprotokoll entfernt. Der verbleibende Wert wird dem UDM-Feld read_only_udm.target.administrative_domain zugewiesen.
payload.job.id read_only_udm.about.resource.attribute.labels.value Der Wert von payload.job.id aus dem Rohprotokoll wird dem UDM-Feld read_only_udm.about.resource.attribute.labels.value zugewiesen, wobei job_id der entsprechende Schlüssel ist.
payload.job.job_name read_only_udm.about.resource.attribute.labels.value Der Wert von payload.job.job_name aus dem Rohprotokoll wird dem UDM-Feld read_only_udm.about.resource.attribute.labels.value zugewiesen, wobei job_name der entsprechende Schlüssel ist.
payload.job.job_status read_only_udm.about.resource.attribute.labels.value Der Wert von payload.job.job_status aus dem Rohprotokoll wird dem UDM-Feld read_only_udm.about.resource.attribute.labels.value zugewiesen, wobei job_status der entsprechende Schlüssel ist.
payload.workflow.id read_only_udm.about.resource.attribute.labels.value Der Wert von payload.workflow.id aus dem Rohprotokoll wird dem UDM-Feld read_only_udm.about.resource.attribute.labels.value zugewiesen, wobei workflow_id der entsprechende Schlüssel ist.
request.id read_only_udm.network.session_id Der Wert von request.id aus dem Rohprotokoll wird dem UDM-Feld read_only_udm.network.session_id zugewiesen.
scope.id read_only_udm.about.resource.attribute.labels.value Der Wert von scope.id aus dem Rohprotokoll wird dem UDM-Feld read_only_udm.about.resource.attribute.labels.value zugewiesen, wobei scope_id der entsprechende Schlüssel ist. Der Parser setzt sec_action anfangs auf BLOCK. Wenn das Feld success im Rohprotokoll den Wert „true“ hat, wird sec_action in ALLOW geändert. Der Wert von sec_action wird dann dem UDM-Feld read_only_udm.security_result.action zugewiesen.
target.id read_only_udm.target.resource.product_object_id Der Wert von target.id aus dem Rohprotokoll wird dem UDM-Feld read_only_udm.target.resource.product_object_id zugewiesen.
target.name read_only_udm.target.resource.name Das Präfix „github:“ wird aus dem Feld target.name im Rohprotokoll entfernt. Der verbleibende Wert wird dem UDM-Feld read_only_udm.target.resource.name zugewiesen. Der Parser setzt read_only_udm.target.resource.resource_type auf STORAGE_OBJECT.
version read_only_udm.target.resource.attribute.labels.value Der Wert von version aus dem Rohprotokoll wird in einen String umgewandelt und dem UDM-Feld read_only_udm.target.resource.attribute.labels.value zugewiesen, wobei version der entsprechende Schlüssel ist.

Änderungen

9. März 2023

  • Neu erstellter Parser.