Duo-Nutzerkontext-Logs erfassen
In diesem Dokument wird beschrieben, wie Sie Duo-Nutzerkontext-Logs mithilfe einer API in Google Security Operations aufnehmen. Der Parser verarbeitet JSON-Daten, ordnet Nutzerinformationen (einschließlich der Zuordnung von Alias-Nutzernamen zu E‑Mail-Adressen, Gruppen, Telefonnummern und Gerätedetails) dem UDM zu und erfasst den Status des Nutzerkontos. Außerdem werden verschachtelte Datenstrukturen verarbeitet und mehrere Datentransformationen und ‑zusammenführungen durchgeführt, um das endgültige UDM-Ereignis zu erstellen.
Hinweise
Prüfen Sie, ob folgende Voraussetzungen erfüllt sind:
- Google SecOps-Instanz
- Privilegierter Zugriff auf das Duo-Admin-Panel
Admin API-Anwendung konfigurieren und Schlüssel abrufen
- Melden Sie sich als Administrator im Duo-Admin-Steuerfeld an.
- Klicken Sie in der linken Seitenleiste auf Anwendungen > Anwendungen verwalten.
- Klicken Sie auf die Schaltfläche Anwendung hinzufügen.
- Geben Sie in das Suchfeld Admin API ein und klicken Sie neben Duo Admin API auf Hinzufügen.
- Auf dem nächsten Bildschirm werden die folgenden Informationen angezeigt:
- Integrationsschlüssel:Ein String wie
DIYYYYYYYYYYYYYY
. - Geheimer Schlüssel: ein String mit 40 Zeichen.
- API-Hostname: Zum Beispiel
api-abcd1234.duosecurity.com
.
- Integrationsschlüssel:Ein String wie
- Kopieren und speichern Sie den Integrationsschlüssel, den geheimen Schlüssel und den API-Hostname an einem sicheren Ort.
- Scrollen Sie zu Einstellungen und legen Sie Berechtigungen auf Leseberechtigung für Ressource erteilen fest.
- Klicken Sie auf Änderungen speichern.
Feeds einrichten
- Rufen Sie die SIEM-Einstellungen> Feeds auf.
- Klicken Sie auf + Neuen Feed hinzufügen.
- Geben Sie im Feld Feed name einen Namen für den Feed ein, z. B.
Duo Users Logs
. - Wählen Sie Drittanbieter-API als Quelltyp aus.
- Wählen Sie den Protokolltyp Duo-Nutzerkontext aus.
- Klicken Sie auf Weiter.
- Geben Sie Werte für die folgenden Eingabeparameter an:
- Nutzername: Geben Sie den zuvor kopierten Integrationsschlüssel ein.
- Secret: Geben Sie den zuvor kopierten Secret Key (geheimen Schlüssel) ein.
- API-Hostname: Geben Sie die Duo API-Server-URL an (z. B.
api-abcd1234.duosecurity.com
). - Asset-Namespace: Der Asset-Namespace.
- Aufnahmelabels: Das Label, das auf die Ereignisse aus diesem Feed angewendet wird.
- Klicken Sie auf Weiter.
- Prüfen Sie die Feedkonfiguration auf dem Bildschirm Finalize (Abschließen) und klicken Sie dann auf Submit (Senden).
UDM-Zuordnungstabelle
Logfeld | UDM-Zuordnung | Logik |
---|---|---|
access_device.browser |
event.idm.entity.entity.resource.attribute.labels.value |
Der Wert wird direkt aus dem Feld access_device.browser übernommen oder aus surfaced_auth.access_device.browser , wenn das Feld leer ist. Der Schlüssel ist auf „access_device browser“ gesetzt. |
access_device.browser_version |
event.idm.entity.entity.resource.attribute.labels.value |
Der Wert wird direkt aus dem Feld access_device.browser_version übernommen oder aus surfaced_auth.access_device.browser_version , wenn das Feld leer ist. Der Schlüssel ist auf „access_device browser_version“ gesetzt. |
access_device.ip.address |
event.idm.entity.entity.ip |
Der Wert wird direkt aus dem Feld access_device.ip.address übernommen oder aus surfaced_auth.access_device.ip , wenn das Feld leer ist. |
access_device.location.city |
event.idm.entity.entity.location.city |
Der Wert wird direkt aus dem Feld access_device.location.city übernommen oder aus surfaced_auth.access_device.location.city , wenn das Feld leer ist. |
access_device.location.country |
event.idm.entity.entity.location.country_or_region |
Der Wert wird direkt aus dem Feld access_device.location.country übernommen oder aus surfaced_auth.access_device.location.country , wenn das Feld leer ist. |
access_device.location.state |
event.idm.entity.entity.location.state |
Der Wert wird direkt aus dem Feld access_device.location.state übernommen oder aus surfaced_auth.access_device.location.state , wenn das Feld leer ist. |
access_device.os |
event.idm.entity.entity.asset.platform_software.platform |
Der Wert wird aus dem Feld access_device.os abgeleitet oder aus surfaced_auth.access_device.os , wenn das Feld leer ist. Wenn der Wert (unabhängig von der Groß-/Kleinschreibung) mit „ios“ oder „mac“ übereinstimmt, wird das UDM-Feld auf „MAC“ gesetzt. Wenn es mit „windows“ übereinstimmt, wird das UDM-Feld auf „WINDOWS“ gesetzt. Wenn es mit „linux“ übereinstimmt, wird das UDM-Feld auf „LINUX“ gesetzt. |
access_device.os_version |
event.idm.entity.entity.asset.platform_software.platform_version |
Der Wert wird direkt aus dem Feld access_device.os_version übernommen oder aus surfaced_auth.access_device.os_version , wenn das Feld leer ist. |
action.details |
event.idm.entity.sec_result.action_details |
Der Wert wird aus diesem Feld übernommen, wenn action leer ist. |
action.name |
event.idm.entity.sec_result.detection_fields.value |
Der Wert wird direkt aus dem Feld übernommen. Der Schlüssel ist auf „action_name“ festgelegt. |
activity_id |
event.idm.entity.sec_result.detection_fields.value |
Der Wert wird direkt aus dem Feld übernommen. Der Schlüssel ist auf „activity_id“ festgelegt. |
actor.details.created |
event.idm.entity.entity.user.attribute.labels.value |
Der Wert wird direkt aus dem Feld übernommen. Der Schlüssel ist auf „created“ gesetzt. |
actor.details.email |
event.idm.entity.entity.user.email_addresses |
Der Wert wird direkt aus dem Feld übernommen. |
actor.details.groups.key |
event.idm.entity.entity.user.group_identifiers |
Der Wert wird direkt aus dem Feld übernommen. |
actor.details.groups.name |
event.idm.entity.entity.user.group_identifiers |
Der Wert wird direkt aus dem Feld übernommen. |
actor.details.last_login |
event.idm.entity.entity.user.attribute.labels.value |
Der Wert wird direkt aus dem Feld übernommen. Der Schlüssel ist auf „last_login“ gesetzt. |
actor.details.status |
event.idm.entity.entity.user.attribute.labels.value |
Der Wert wird direkt aus dem Feld übernommen. Der Schlüssel ist auf „status“ festgelegt. |
actor.key |
event.idm.entity.entity.resource.product_object_id |
Der Wert wird direkt aus dem Feld übernommen. |
actor.name |
event.idm.entity.entity.user.user_display_name |
Der Wert wird direkt aus dem Feld übernommen oder surfaced_auth.user.name , wenn das Feld leer ist. |
actor.type |
event.idm.entity.entity.user.attribute.labels.value |
Der Wert wird direkt aus dem Feld übernommen. Der Schlüssel ist auf „actor type“ festgelegt. |
akey |
event.idm.entity.metadata.product_entity_id |
Der Wert wird direkt aus dem Feld übernommen oder ist sekey , wenn akey leer ist. |
application |
event.idm.entity.entity.application |
Der Wert wird direkt aus dem Feld übernommen. |
collection_time.seconds , create_time.seconds |
event.idm.entity.metadata.collected_timestamp.seconds , event.timestamp.seconds |
Der größere Wert von collection_time.seconds und create_time.seconds wird sowohl für collected_timestamp.seconds als auch für timestamp.seconds auf oberster Ebene verwendet. |
collection_time.nanos , create_time.nanos |
event.idm.entity.metadata.collected_timestamp.nanos , event.timestamp.nanos |
Der Nanosekundenwert, der dem größeren Wert von collection_time.seconds und create_time.seconds entspricht, wird sowohl für collected_timestamp.nanos als auch für timestamp.nanos auf oberster Ebene verwendet. |
email |
event.idm.entity.entity.user.email_addresses |
Der Wert wird direkt aus dem Feld übernommen. |
explanations |
event.idm.entity.entity.resource.attribute.labels |
Die Schlüssel/Wert-Paare in jedem Objekt im explanations -Array werden in Labels umgewandelt. Dem Schlüssel für jedes Label wird „explanation “ vorangestellt. |
firstname |
event.idm.entity.entity.user.first_name |
Der Wert wird direkt aus dem Feld übernommen. |
from_common_netblock |
event.idm.entity.entity.resource.attribute.labels.value |
Der Wert wird direkt aus dem Feld übernommen. Der Schlüssel ist auf „from_common_netblock“ gesetzt. |
from_new_user |
event.idm.entity.entity.resource.attribute.labels.value |
Der Wert wird direkt aus dem Feld übernommen. Der Schlüssel ist auf „from_new_user“ gesetzt. |
groups.N.name (N=0..10) |
event.idm.entity.entity.user.group_identifiers |
Der Wert wird direkt aus dem Feld übernommen. |
lastname |
event.idm.entity.entity.user.last_name |
Der Wert wird direkt aus dem Feld übernommen. |
low_risk_ip |
event.idm.entity.entity.resource.attribute.labels.value |
Der Wert wird direkt aus dem Feld übernommen. Der Schlüssel ist auf „low_risk_ip“ gesetzt. |
phones.0.model |
event.idm.entity.relations.entity.asset.hardware.model |
Der Wert wird direkt aus dem Feld übernommen. |
phones.0.number |
event.idm.entity.entity.user.phone_numbers |
Der Wert wird direkt aus dem Feld übernommen. |
phones.0.phone_id |
event.idm.entity.relations.entity.asset.product_object_id |
Der Wert wird direkt aus dem Feld übernommen. |
phones.0.platform |
event.idm.entity.relations.entity.asset.hardware.manufacturer |
Der Wert wird direkt aus dem Feld übernommen. |
priority_event |
event.idm.entity.entity.resource.attribute.labels.value |
Der Wert wird direkt aus dem Feld übernommen. Der Schlüssel wird auf „priority_event“ festgelegt. |
realname |
event.idm.entity.entity.user.user_display_name |
Der Wert wird direkt aus dem Feld übernommen. |
sekey |
event.idm.entity.metadata.product_entity_id |
Der Wert wird direkt aus dem Feld übernommen, wenn akey leer ist. |
state |
event.idm.entity.entity.resource.attribute.labels.value |
Der Wert wird direkt aus dem Feld übernommen. Der Schlüssel ist auf „state“ gesetzt. |
status |
event.idm.entity.entity.user.attribute.labels.value , event.idm.entity.entity.user.user_authentication_status |
Der Wert wird direkt aus dem Feld übernommen. Der Schlüssel für das Label ist auf „status“ festgelegt. Der Wert wird auch verwendet, um die user_authentication_status zu bestimmen. „active“ und „bypass“ werden „ACTIVE“ zugeordnet, „disabled“ und „pending deletion“ werden „SUSPENDED“ zugeordnet und „locked out“ wird „NO_ACTIVE_CREDENTIALS“ zugeordnet. |
surfaced_auth.access_device.browser |
event.idm.entity.entity.resource.attribute.labels.value |
Der Wert wird aus diesem Feld übernommen, wenn access_device.browser leer ist. Der Schlüssel ist auf „surfaced_auth access_device browser“ gesetzt. |
surfaced_auth.access_device.browser_version |
event.idm.entity.entity.resource.attribute.labels.value |
Der Wert wird aus diesem Feld übernommen, wenn access_device.browser_version leer ist. Der Schlüssel ist auf „surfaced_auth access_device browser_version“ gesetzt. |
surfaced_auth.access_device.ip |
event.idm.entity.entity.ip |
Der Wert wird aus diesem Feld übernommen, wenn access_device.ip.address leer ist. |
surfaced_auth.access_device.location.city |
event.idm.entity.entity.location.city |
Der Wert wird aus diesem Feld übernommen, wenn access_device.location.city leer ist. |
surfaced_auth.access_device.location.country |
event.idm.entity.entity.location.country_or_region |
Der Wert wird aus diesem Feld übernommen, wenn access_device.location.country leer ist. |
surfaced_auth.access_device.location.state |
event.idm.entity.entity.location.state |
Der Wert wird aus diesem Feld übernommen, wenn access_device.location.state leer ist. |
surfaced_auth.access_device.os |
event.idm.entity.entity.asset.platform_software.platform |
Der Wert wird aus diesem Feld übernommen, wenn access_device.os leer ist. Die Logik für die Zuordnung zum UDM-Feld ist dieselbe wie für access_device.os . |
surfaced_auth.access_device.os_version |
event.idm.entity.entity.asset.platform_software.platform_version |
Der Wert wird aus diesem Feld übernommen, wenn access_device.os_version leer ist. |
surfaced_auth.user.key |
event.idm.entity.entity.user.userid |
Der Wert wird aus diesem Feld übernommen, wenn username leer ist. |
surfaced_auth.user.name |
event.idm.entity.entity.user.user_display_name |
Der Wert wird aus diesem Feld übernommen, wenn actor.name leer ist. |
target.details.biometrics_status |
event.idm.entity.entity.asset.attribute.labels.value |
Der Wert wird direkt aus dem Feld übernommen. Der Schlüssel ist auf „biometrics_status“ festgelegt. |
target.details.country_code |
event.idm.entity.entity.asset.attribute.labels.value |
Der Wert wird direkt aus dem Feld übernommen. Der Schlüssel ist auf „country_code“ festgelegt. |
target.details.extension |
event.idm.entity.entity.asset.attribute.labels.value |
Der Wert wird direkt aus dem Feld übernommen. Der Schlüssel ist auf „extension“ gesetzt. |
target.details.manufacturer |
event.idm.entity.entity.asset.hardware.manufacturer |
Der Wert wird direkt aus dem Feld übernommen. |
target.details.model |
event.idm.entity.entity.asset.hardware.model |
Der Wert wird direkt aus dem Feld übernommen. |
target.details.number |
event.idm.entity.entity.user.phone_numbers |
Der Wert wird direkt aus dem Feld übernommen. |
target.details.os |
event.idm.entity.entity.asset.software.name |
Der Wert wird direkt aus dem Feld übernommen. |
target.details.os_version |
event.idm.entity.entity.asset.software.version |
Der Wert wird direkt aus dem Feld übernommen. |
target.details.passcode_status |
event.idm.entity.entity.asset.attribute.labels.value |
Der Wert wird direkt aus dem Feld übernommen. Der Schlüssel ist auf „passcode_status“ festgelegt. |
target.details.tampered_status |
event.idm.entity.entity.asset.attribute.labels.value |
Der Wert wird direkt aus dem Feld übernommen. Der Schlüssel ist auf „tampered_status“ gesetzt. |
target.key |
event.idm.entity.entity.asset.asset_id |
Der Wert wird direkt aus dem Feld übernommen. |
target.name |
event.idm.entity.entity.asset.attribute.labels.value |
Der Wert wird direkt aus dem Feld übernommen. Der Schlüssel ist auf „name“ festgelegt. |
target.type |
event.idm.entity.entity.asset.attribute.labels.value |
Der Wert wird direkt aus dem Feld übernommen. Der Schlüssel ist auf „type“ festgelegt. |
triage_event_uri |
event.idm.entity.entity.url |
Der Wert wird direkt aus dem Feld übernommen. |
triaged_as_interesting |
event.idm.entity.entity.resource.attribute.labels.value |
Der Wert wird direkt aus dem Feld übernommen. Der Schlüssel ist auf „triaged_as_interesting“ gesetzt. |
ts |
event.timestamp.seconds , event.idm.entity.metadata.collected_timestamp.seconds |
Der Zeitstempel wird aus diesem Feld geparst, sofern vorhanden, und zwar im ISO8601- oder RFC 3339-Format. Die extrahierten Sekunden und Nanosekunden werden sowohl für timestamp auf oberster Ebene als auch für collected_timestamp verwendet. |
type |
event.idm.entity.entity.resource.attribute.labels.value |
Der Wert wird direkt aus dem Feld übernommen. Der Schlüssel ist auf „type“ festgelegt. |
user_id |
event.idm.entity.metadata.product_entity_id |
Der Wert wird direkt aus dem Feld übernommen. |
username |
event.idm.entity.entity.user.userid |
Der Wert wird direkt aus dem Feld übernommen oder ist surfaced_auth.user.key , wenn username leer ist. |
(Parserlogik) | event.idm.entity.metadata.vendor_name |
Fest codiert auf „Duo“. |
(Parserlogik) | event.idm.entity.metadata.product_name |
Fest codiert auf „Duo User Context“. |
(Parserlogik) | event.idm.entity.metadata.entity_type |
Wird anhand des Vorhandenseins anderer Felder bestimmt. Wenn user_present „true“ ist, wird „USER“ festgelegt. Wenn asset_mid_present „true“ ist, wird es auf „ASSET“ gesetzt. Wenn ip_present „true“ ist, wird es auf „IP_ADDRESS“ gesetzt. Wenn resource_present „true“ ist, wird der Wert auf „RESOURCE“ gesetzt. Andernfalls wird er auf „UNKNOWN_ENTITYTYPE“ gesetzt. |
(Parserlogik) | event.idm.entity.relations.entity_type |
Wird auf „ASSET“ gesetzt, wenn phones[0] nicht leer ist. |
(Parserlogik) | event.idm.entity.relations.relationship |
Wird auf „OWNS“ gesetzt, wenn phones[0] nicht leer ist. |
(Parserlogik) | event.idm.entity.relations.entity.asset.type |
Wird auf „MOBILE“ gesetzt, wenn phones[0] nicht leer ist. |
Benötigen Sie weitere Hilfe? Antworten von Community-Mitgliedern und Google SecOps-Experten erhalten