Kontextprotokolle für Duo-Nutzer erfassen

Parserversion: 1.0

Unterstützt in:

In diesem Dokument wird beschrieben, wie Sie Duo-Nutzerkontextlogs über eine API in Google Security Operations aufnehmen. Der Parser verarbeitet JSON-Daten und ordnet Nutzerinformationen (einschließlich Aliasing von 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.

Hinweis

Prüfen Sie, ob folgende Voraussetzungen erfüllt sind:

Admin API-Anwendung konfigurieren und Schlüssel abrufen

  1. Melden Sie sich als Administrator im Duo-Admin-Bereich an.
  2. Klicken Sie in der linken Seitenleiste auf Anwendungen > Anwendungen verwalten.
  3. Klicken Sie auf den Button Add Application (Anwendung hinzufügen).
  4. Geben Sie im Suchfeld Admin API ein und klicken Sie neben Duo Admin API auf Hinzufügen.
  5. 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: z. B. api-abcd1234.duosecurity.com.
  6. Kopieren und speichern Sie den Integrationsschlüssel, den geheimen Schlüssel und den API-Hostnamen an einem sicheren Ort.
  7. Scrollen Sie zu Einstellungen und legen Sie für Berechtigungen die Option Leseberechtigung für Ressource gewähren fest.
  8. Klicken Sie auf Änderungen speichern.

Feeds einrichten

  1. Rufen Sie die Einstellungen > Datenverwaltung > Feeds auf. Wenn Sie eine reine SIEM-Plattform verwenden, rufen Sie die Einstellungen > Feeds auf.
  2. Klicken Sie auf + Neuen Feed hinzufügen.
  3. Geben Sie im Feld Feedname einen Namen für den Feed ein, z. B. Duo Users Logs.
  4. Wählen Sie Drittanbieter-API als Quelltyp aus.
  5. Wählen Sie den Protokolltyp Duo User Context aus.
  6. Klicken Sie auf Weiter.
  7. 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 ein.
    • API-Hostname: Geben Sie die URL des Duo-API-Servers an (z. B. api-abcd1234.duosecurity.com).
    • Asset-Namespace: Der Asset-Namespace.
    • Aufnahmelabels: Das Label, das auf die Ereignisse aus diesem Feed angewendet wird.
  8. Klicken Sie auf Weiter.
  9. Prüfen Sie die Feedkonfiguration auf dem Bildschirm Abschließen und klicken Sie dann auf 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 oder surfaced_auth.access_device.browser übernommen, wenn das erstere leer ist. Der Schlüssel ist auf „access_device browser“ festgelegt.
access_device.browser_version event.idm.entity.entity.resource.attribute.labels.value Der Wert wird direkt aus dem Feld access_device.browser_version oder surfaced_auth.access_device.browser_version übernommen, wenn das erstere leer ist. Der Schlüssel ist auf „access_device browser_version“ festgelegt.
access_device.ip.address event.idm.entity.entity.ip Der Wert wird direkt aus dem Feld access_device.ip.address oder surfaced_auth.access_device.ip übernommen, wenn das erstere leer ist.
access_device.location.city event.idm.entity.entity.location.city Der Wert wird direkt aus dem Feld access_device.location.city oder surfaced_auth.access_device.location.city übernommen, wenn das erstere 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 oder surfaced_auth.access_device.location.country übernommen, wenn das erstere leer ist.
access_device.location.state event.idm.entity.entity.location.state Der Wert wird direkt aus dem Feld access_device.location.state oder surfaced_auth.access_device.location.state übernommen, wenn das erstere leer ist.
access_device.os event.idm.entity.entity.asset.platform_software.platform Der Wert wird aus dem Feld access_device.os oder surfaced_auth.access_device.os abgeleitet, wenn das erstere leer ist. Wenn der Wert (unabhängig von der Groß-/Kleinschreibung) „ios“ oder „mac“ entspricht, wird das UDM-Feld auf „MAC“ gesetzt. Wenn „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 oder surfaced_auth.access_device.os_version übernommen, wenn das erstere 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 „erstellt“ 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“ festgelegt.
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 aus 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 das übergeordnete timestamp.seconds 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 den 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“ festgelegt.
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“ festgelegt.
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“ festgelegt.
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 ist 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“ festgelegt.
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“ festgelegt.
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“ festgelegt.
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“ festgelegt.
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“ festgelegt.
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“ festgelegt.
ts event.timestamp.seconds, event.idm.entity.metadata.collected_timestamp.seconds Der Zeitstempel wird aus diesem Feld geparst, falls vorhanden, im ISO8601- oder RFC 3339-Format. Die extrahierten Sekunden und Nanosekunden werden sowohl für die timestamp- als auch für die collected_timestamp-Ebene 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.
(Parser-Logik) event.idm.entity.metadata.vendor_name Festgelegt auf „Duo“.
(Parser-Logik) event.idm.entity.metadata.product_name Hartcodiert auf „Duo User Context“.
(Parser-Logik) event.idm.entity.metadata.entity_type Wird anhand des Vorhandenseins anderer Felder bestimmt. Wenn user_present „true“ ist, wird der Wert auf „USER“ gesetzt. Wenn asset_mid_present „true“ ist, wird der Wert auf „ASSET“ gesetzt. Wenn ip_present „true“ ist, wird der Wert auf „IP_ADDRESS“ gesetzt. Wenn resource_present „true“ ist, wird es auf „RESOURCE“ gesetzt. Andernfalls wird er auf „UNKNOWN_ENTITYTYPE“ gesetzt.
(Parser-Logik) event.idm.entity.relations.entity_type Wird auf „ASSET“ gesetzt, wenn phones[0] nicht leer ist.
(Parser-Logik) event.idm.entity.relations.relationship Wird auf „OWNS“ gesetzt, wenn phones[0] nicht leer ist.
(Parser-Logik) event.idm.entity.relations.entity.asset.type Wird auf „MOBILE“ gesetzt, wenn phones[0] nicht leer ist.

Änderungsprotokoll

Änderungsprotokoll für diesen Parser ansehen

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