CircleCI-Audit-Logs erfassen
Dieser Parser extrahiert Felder aus CircleCI-Audit-Logs im CSV- und JSON-Format und wandelt sie in das einheitliche Datenmodell (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
Prüfen Sie, ob folgende Voraussetzungen erfüllt sind:
- Google SecOps-Instanz
- Berechtigter Zugriff auf CircleCI.
Feeds einrichten
Es gibt zwei verschiedene Einstiegspunkte zum Einrichten von Feeds auf der Google SecOps-Plattform:
- SIEM-Einstellungen > Feeds
- Content Hub > Content-Pakete
Feeds unter „SIEM-Einstellungen“ > „Feeds“ einrichten
So konfigurieren Sie einen Feed:
- Gehen Sie zu SIEM-Einstellungen > Feeds.
- Klicken Sie auf Neuen Feed hinzufügen.
- Klicken Sie auf der nächsten Seite auf Einzelnen Feed konfigurieren.
- Geben Sie im Feld Feedname einen Namen für den Feed ein, z. B. CircleCI-Protokolle.
- Wählen Sie als Quelltyp Webhook aus.
- Wählen Sie CircleCI 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 Geheimen Schlüssel generieren, um einen geheimen 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.
Feeds über den Content Hub einrichten
Geben Sie Werte für die folgenden Felder an:
- Trennzeichen für die Aufteilung: Das Trennzeichen, mit dem Logzeilen getrennt werden, z. B.
\n
.
Erweiterte Optionen
- Feedname: Ein vordefinierter Wert, der den Feed identifiziert.
- Quelltyp: Methode, mit der Protokolle in Google SecOps erfasst werden.
- Asset-Namespace: 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 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.
API-Schlüssel für den Webhook-Feed erstellen
Rufen Sie 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.
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 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
- Melden Sie sich in der CircleCI-Weboberfläche an.
- Wählen Sie das Projekt aus, aus dem Sie die Protokolle aufnehmen möchten.
- Klicken Sie auf Projekteinstellungen.
- Wählen Sie Webhooks aus.
- Klicken Sie auf Webhook hinzufügen.
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.
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.
Benötigen Sie weitere Hilfe? Antworten von Community-Mitgliedern und Google SecOps-Experten erhalten