CircleCI-Audit-Logs erfassen
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
- 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. 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 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
: 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.