Azure DevOps-Überwachungsprotokolle erfassen

Unterstützt in:

Übersicht

Dieser Parser verarbeitet Azure DevOps-Audit-Logs im JSON-Format. Sie extrahiert Felder aus verschachtelten und JSON-Strukturen der obersten Ebene und ordnet sie dem UDM zu. Durch bedingte Logik, die auf bestimmten Feldwerten basiert, werden Ereignisse kategorisiert und die Ausgabe mit relevanten Sicherheitsinformationen angereichert. Der Parser verarbeitet auch Nachrichten, die nicht im JSON-Format vorliegen. Dabei wird versucht, eine JSON-Nutzlast mithilfe von Grok-Mustern zu extrahieren.

Hinweise

Prüfen Sie, ob die folgenden Voraussetzungen erfüllt sind:

  • Google SecOps-Instanz
  • Eine aktive Azure DevOps-Organisation
  • Privilegierter Zugriff auf Azure DevOps-Organisation und Azure

Feeds einrichten

Es gibt zwei verschiedene Einstiegspunkte zum Einrichten von Feeds in der Google SecOps-Plattform:

  • SIEM-Einstellungen > Feeds
  • Content Hub> Content-Pakete

Feeds über die SIEM-Einstellungen > „Feeds“ einrichten

Informationen zum Konfigurieren mehrerer Feeds für verschiedene Logtypen in dieser Produktfamilie finden Sie unter Feeds nach Produkt konfigurieren.

So konfigurieren Sie einen einzelnen Feed:

  1. Rufen Sie die SIEM-Einstellungen> Feeds auf.
  2. Klicken Sie auf Neuen Feed hinzufügen.
  3. Klicken Sie auf der nächsten Seite auf Einen einzelnen Feed konfigurieren.
  4. Geben Sie im Feld Feed name (Feedname) einen Namen für den Feed ein, z. B. Azure Devops Logs (Azure DevOps-Protokolle).
  5. Wählen Sie Webhook als Quelltyp aus.
  6. Wählen Sie Azure DevOps Audit als Logtyp aus.
  7. Klicken Sie auf Weiter.
  8. Optional: Geben Sie Werte für die folgenden Eingabeparameter an:
    • Trennzeichen für Aufteilung: Das Trennzeichen, das zum Trennen von Logzeilen verwendet wird, z. B. \n.
    • Asset-Namespace: Der Asset-Namespace.
    • Aufnahmelabels: Das Label, das auf die Ereignisse aus diesem Feed angewendet wird.
  9. Klicken Sie auf Weiter.
  10. Prüfen Sie die Feedkonfiguration auf dem Bildschirm Finalize (Abschließen) und klicken Sie dann auf Submit (Senden).
  11. Klicken Sie auf Geheimen Schlüssel generieren, um einen geheimen Schlüssel zur Authentifizierung dieses Feeds zu generieren.
  12. Kopieren Sie den geheimen Schlüssel und speichern Sie ihn. Sie können diesen geheimen Schlüssel nicht noch einmal aufrufen. Bei Bedarf können Sie einen neuen geheimen Schlüssel generieren. Dadurch wird der vorherige geheime Schlüssel jedoch ungültig.
  13. Kopieren Sie auf dem Tab Details die Feed-Endpunkt-URL aus dem Feld Endpunktinformationen. Sie müssen diese Endpunkt-URL in Ihrer Clientanwendung angeben.
  14. Klicken Sie auf Fertig.

Feeds über den Content Hub einrichten

Geben Sie Werte für die folgenden Felder an:

  • Trennzeichen für Aufteilung: Das Trennzeichen, das zum Trennen von Logzeilen verwendet wird, z. B. \n.

Erweiterte Optionen

  • Feedname: Ein vorausgefüllter Wert, der den Feed identifiziert.
  • Quelltyp: Methode, die zum Erfassen von Logs in Google SecOps verwendet wird.
  • 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).
  • Klicken Sie auf Geheimen Schlüssel generieren, um einen geheimen Schlüssel zur Authentifizierung dieses Feeds zu generieren.

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

Endpunkt-URL angeben

  1. Geben Sie in Ihrer Clientanwendung die HTTPS-Endpunkt-URL an, die im Webhook-Feed bereitgestellt wird.
  2. 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 Headern unterstützt, können Sie den API-Schlüssel und den geheimen Schlüssel mit Suchparametern im folgenden Format angeben:

    ENDPOINT_URL?key=API_KEY&secret=SECRET
    

Ersetzen Sie Folgendes:

  • ENDPOINT_URL: Die Feed-Endpunkt-URL.
  • API_KEY: Der API-Schlüssel für die Authentifizierung bei Google Security Operations.
  • SECRET: Der geheime Schlüssel, den Sie zur Authentifizierung des Feeds generiert haben.

Überwachungsfunktion in Azure DevOps konfigurieren

  1. Melden Sie sich in Ihrer Organisation (https://dev.azure.com/{yourorganization}) an.
  2. Klicken Sie auf das Zahnradsymbol für Organisationseinstellungen.
  3. Wählen Sie unter Sicherheit die Option Richtlinien aus.
  4. Stellen Sie die Schaltfläche Audit-Ereignisse protokollieren auf EIN.

Event Grid-Thema in Azure konfigurieren

  1. Melden Sie sich im Azure-Portal an.
  2. Suchen Sie nach Event Grid und greifen Sie darauf zu.
  3. Suchen Sie unter Benutzerdefinierte Ereignisse nach Themen.
  4. Klicken Sie auf + Erstellen.
  5. Wählen Sie Ihr Abo und Ihre Ressourcengruppe aus. Geben Sie einen Namen an (z. B. DevopsAuditLog) und wählen Sie die Region aus. Klicken Sie auf Prüfen und erstellen.
  6. Rufen Sie das neue Thema auf und kopieren Sie die Themenendpunkt-URL.
  7. Rufen Sie die Einstellungen > Zugriffsschlüssel auf und kopieren Sie Schlüssel 1.

Azure DevOps-Logstream für Event Grid konfigurieren

  1. Melden Sie sich in Ihrer Organisation (https://dev.azure.com/{yourorganization}) an.
  2. Klicken Sie auf das Zahnradsymbol für Organisationseinstellungen.
  3. Wählen Sie Audit aus.
  4. Klicken Sie auf den Tab Streams und wählen Sie Neuer Stream > Event Grid aus.
  5. Geben Sie den Themenendpunkt und den Zugriffsschlüssel ein, die Sie unter Event Grid-Thema in Azure konfigurieren erstellt haben.

Webhook in Azure DevOps für Google SecOps konfigurieren

  1. Suchen Sie im Azure-Portal nach Event Grid und greifen Sie darauf zu.
  2. Wählen Sie das zuvor erstellte Thema aus.
  3. Rufen Sie Entitäten > Event-Abo auf.
  4. Klicken Sie auf + Event-Abo.
  5. Geben Sie einen aussagekräftigen Namen an, z. B. *Google SecOps Integration.
  6. Wählen Sie Web-Hook aus und klicken Sie auf Endpunkt konfigurieren.
  7. Endpunkt konfigurieren:
    1. Subscriber endpoint (Abonnentenendpunkt): Geben Sie die Google SecOps API-Endpunkt-URL ein.
    2. Fügen Sie im Bereich HTTP-Header die folgenden Header hinzu:
    3. Legen Sie den Content-Type-Header auf application/json fest.
  8. Klicken Sie auf Erstellen.

UDM-Zuordnungstabelle

Logfeld UDM-Zuordnung Logik
ActivityId metadata.product_log_id Direkt aus dem Feld Id im Rohlog, wenn das Feld records nicht vorhanden ist, oder aus dem Feld ActivityId im Objekt data, wenn records vorhanden ist.
ActionId metadata.product_event_type Direkt aus dem Feld ActionId im Objekt data zugeordnet.
ActorCUID additional.fields Als zusätzliches Feld mit dem Schlüssel „Actor CUID“ enthalten.
ActorDisplayName principal.user.user_display_name Wird direkt aus dem Feld ActorDisplayName zugeordnet, wenn es nicht „Azure DevOps Service“ ist. Wenn es sich um „Azure DevOps Service“ handelt, wird es als Label zu principal.resource.attribute.labels hinzugefügt.
ActorUPN principal.user.email_addresses Direkt aus dem Feld ActorUPN zugeordnet, wenn es einem E-Mail-Adressmuster entspricht.
ActorUserId principal.user.userid Direkt aus dem Feld ActorUserId zugeordnet.
Area target.application Wird verwendet, um das Feld target.application zu erstellen, indem dem Wert Area „DevOps “ vorangestellt wird.
AuthenticationMechanism extensions.auth.auth_details, security_result.rule_id Gepasst, um Authentifizierungsdetails und die Regel-ID zu extrahieren. Die Authentifizierungsdetails werden extensions.auth.auth_details zugeordnet. Die extrahierte Regel-ID ist security_result.rule_id zugeordnet.
CategoryDisplayName security_result.action_details Direkt security_result.action_details zugeordnet.
City principal.location.city Direkt aus dem Feld City zugeordnet.
Conditions additional.fields Als zusätzliches Feld mit dem Schlüssel „Conditions“ hinzugefügt.
Country principal.location.country_or_region Direkt aus dem Feld Country zugeordnet.
Data.* Verschiedene Felder im Objekt Data werden je nach Name und Kontext verschiedenen UDM-Feldern zugeordnet. Unten finden Sie konkrete Beispiele.
Data.AccessLevel target.resource.attribute.labels Als Label mit dem Schlüssel „AccessLevel“ hinzugefügt.
Data.AgentId target.resource.product_object_id Wird target.resource.product_object_id zugeordnet, wenn PipelineId und AuthorizationId nicht vorhanden sind.
Data.AgentName target.resource.name Wird target.resource.name zugeordnet, wenn PipelineName, NamespaceName und DisplayName nicht vorhanden sind.
Data.AuthorizationId target.resource.product_object_id Wird target.resource.product_object_id zugeordnet, wenn PipelineId nicht vorhanden ist.
Data.CallerProcedure additional.fields Als zusätzliches Feld mit dem Schlüssel „CallerProcedure“ hinzugefügt.
Data.CheckSuiteId additional.fields Wird als zusätzliches Feld mit dem Schlüssel „CheckSuiteId“ hinzugefügt.
Data.CheckSuiteStatus additional.fields Als zusätzliches Feld mit dem Schlüssel „CheckSuiteStatus“ hinzugefügt.
Data.ConnectionId additional.fields Als zusätzliches Feld mit dem Schlüssel „ConnectionId“ hinzugefügt.
Data.ConnectionName additional.fields Wird als zusätzliches Feld mit dem Schlüssel „ConnectionName“ hinzugefügt.
Data.ConnectionType additional.fields Als zusätzliches Feld mit dem Schlüssel „ConnectionType“ hinzugefügt.
Data.DefinitionId additional.fields Als zusätzliches Feld mit dem Schlüssel „DefinitionId“ hinzugefügt.
Data.DeploymentResult additional.fields Wird als zusätzliches Feld mit dem Schlüssel „DeploymentResult“ hinzugefügt.
Data.DisplayName target.resource.name Wird target.resource.name zugeordnet, wenn PipelineName und NamespaceName nicht vorhanden sind.
Data.EndpointIdList additional.fields Als zusätzliches Feld mit dem Schlüssel „EndpointIdList“ hinzugefügt.
Data.EnvironmentName additional.fields Als zusätzliches Feld mit dem Schlüssel „EnvironmentName“ hinzugefügt.
Data.Filter.continuationToken target.resource.attribute.labels Wird als Label mit dem Schlüssel „continuation_token“ hinzugefügt.
Data.Filter.endTime target.resource.attribute.labels Wird als Label mit dem Schlüssel „filter_end_time“ hinzugefügt.
Data.Filter.startTime target.resource.attribute.labels Wird als Label mit dem Schlüssel „filter_start_time“ hinzugefügt.
Data.FinishTime additional.fields Als zusätzliches Feld mit dem Schlüssel „FinishTime“ hinzugefügt.
Data.GroupId target.group.product_object_id Wird direkt target.group.product_object_id zugeordnet, wenn Data.Updates.0.GroupId nicht vorhanden ist.
Data.GroupName target.group.group_display_name Direkt target.group.group_display_name zugeordnet.
Data.JobName additional.fields Als zusätzliches Feld mit dem Schlüssel „JobName“ hinzugefügt.
Data.MemberId target.user.userid Wird direkt target.user.userid zugeordnet, wenn Data.Updates.0.MemberId nicht vorhanden ist.
Data.MemberDisplayName target.user.user_display_name Direkt target.user.user_display_name zugeordnet.
Data.NamespaceId target.resource.product_object_id Wird target.resource.product_object_id zugeordnet, wenn PipelineId, AuthorizationId und AgentId nicht vorhanden sind.
Data.NamespaceName target.resource.name Wird target.resource.name zugeordnet, wenn PipelineName nicht vorhanden ist.
Data.ownerDetails additional.fields Als zusätzliches Feld mit dem Schlüssel „OwnerDetails“ hinzugefügt.
Data.OwnerId additional.fields Als zusätzliches Feld mit dem Schlüssel „OwnerId“ hinzugefügt.
Data.PipelineId target.resource.product_object_id Direkt target.resource.product_object_id zugeordnet.
Data.PipelineName target.resource.name Direkt target.resource.name zugeordnet.
Data.PipelineRevision target.resource.attribute.labels Als Label mit dem Schlüssel „PipelineRevision“ hinzugefügt.
Data.PipelineScope target.resource.attribute.labels Als Label mit dem Schlüssel „PipelineScope“ hinzugefügt.
Data.PlanType additional.fields Als zusätzliches Feld mit dem Schlüssel „PlanType“ hinzugefügt.
Data.PreviousAccessLevel target.resource.attribute.labels Als Label mit dem Schlüssel „PreviousAccessLevel“ hinzugefügt.
Data.PublisherName target.resource.attribute.labels Als Label mit dem Schlüssel „PublisherName“ hinzugefügt.
Data.Reason additional.fields Als zusätzliches Feld mit dem Schlüssel „Reason“ hinzugefügt.
Data.ReleaseId additional.fields Als zusätzliches Feld mit dem Schlüssel „ReleaseId“ hinzugefügt.
Data.ReleaseName additional.fields Als zusätzliches Feld mit dem Schlüssel „ReleaseName“ hinzugefügt.
Data.RequesterId additional.fields Als zusätzliches Feld mit dem Schlüssel „RequesterId“ hinzugefügt.
Data.RetentionLeaseId additional.fields Als zusätzliches Feld mit dem Schlüssel „RetentionLeaseId“ hinzugefügt.
Data.RetentionOwnerId additional.fields Als zusätzliches Feld mit dem Schlüssel „RetentionOwnerId“ hinzugefügt.
Data.RunName additional.fields Als zusätzliches Feld mit dem Schlüssel „RunName“ hinzugefügt.
Data.Scopes target.resource.attribute.labels Als Labels mit dem Schlüssel „Scope“ hinzugefügt.
Data.StageName additional.fields Als zusätzliches Feld mit dem Schlüssel „StageName“ hinzugefügt.
Data.StartTime additional.fields Als zusätzliches Feld mit dem Schlüssel „StartTime“ hinzugefügt.
Data.TargetUser target.user.userid Direkt target.user.userid zugeordnet.
Data.Timestamp metadata.event_timestamp Geprüft und metadata.event_timestamp zugeordnet.
Data.TokenType target.resource.attribute.labels Wird als Label mit dem Schlüssel „TokenType“ hinzugefügt.
Data.Updates.0.GroupId target.group.product_object_id Direkt target.group.product_object_id zugeordnet.
Data.Updates.0.MemberId target.user.userid Direkt target.user.userid zugeordnet.
Data.ValidFrom target.resource.attribute.labels Als Label mit dem Schlüssel „ValidFrom“ hinzugefügt.
Data.ValidTo target.resource.attribute.labels Als Label mit dem Schlüssel „ValidTo“ hinzugefügt.
DewPoint additional.fields Als zusätzliches Feld mit dem Schlüssel „DewPoint“ hinzugefügt.
Details metadata.description Direkt metadata.description zugeordnet.
Humidity additional.fields Als zusätzliches Feld mit dem Schlüssel „Humidity“ hinzugefügt.
Icon additional.fields Als zusätzliches Feld mit dem Schlüssel „Icon“ hinzugefügt.
Id metadata.product_log_id Direkt metadata.product_log_id zugeordnet.
IpAddress principal.ip Direkt principal.ip zugeordnet.
MoonPhase additional.fields Als zusätzliches Feld mit dem Schlüssel „MoonPhase“ hinzugefügt.
Moonrise additional.fields Als zusätzliches Feld mit dem Schlüssel „Moonrise“ hinzugefügt.
Moonset additional.fields Als zusätzliches Feld mit dem Schlüssel „Moonset“ hinzugefügt.
OperationName metadata.product_event_type Direkt metadata.product_event_type zugeordnet.
Precipitation additional.fields Als zusätzliches Feld mit dem Schlüssel „Precipitation“ (Niederschlag) hinzugefügt.
Pressure additional.fields Als zusätzliches Feld mit dem Schlüssel „Pressure“ hinzugefügt.
ProjectId target.resource_ancestors.product_object_id Wird verwendet, um das Feld product_object_id in target.resource_ancestors auszufüllen, wenn der übergeordnete Knoten vom Typ CLOUD_PROJECT ist.
ProjectName target.resource_ancestors.name, target.resource.attribute.labels Wird verwendet, um das Feld name in target.resource_ancestors auszufüllen, wenn der übergeordnete Knoten vom Typ CLOUD_PROJECT ist. Wird auch als Label für target.resource.attribute.labels mit dem Schlüssel „ProjectName“ hinzugefügt.
RoleLocation target.location.name Direkt target.location.name zugeordnet.
ScopeDisplayName target.resource_ancestors.name Wird verwendet, um das Feld name in target.resource_ancestors auszufüllen, wenn der übergeordnete Knoten vom Typ CLOUD_ORGANIZATION ist.
ScopeId target.resource_ancestors.product_object_id Wird verwendet, um das Feld product_object_id in target.resource_ancestors auszufüllen, wenn der übergeordnete Knoten vom Typ CLOUD_ORGANIZATION ist.
ScopeType additional.fields Als zusätzliches Feld mit dem Schlüssel „ScopeType“ hinzugefügt.
Sunrise additional.fields Als zusätzliches Feld mit dem Schlüssel „Sunrise“ hinzugefügt.
Sunset additional.fields Als zusätzliches Feld mit dem Schlüssel „Sunset“ hinzugefügt.
Temperature additional.fields Als zusätzliches Feld mit dem Schlüssel „Temperature“ hinzugefügt.
TenantId metadata.product_deployment_id, additional.fields Direkt metadata.product_deployment_id zugeordnet. Wird auch als zusätzliches Feld mit dem Schlüssel „TenantId“ hinzugefügt.
TimeGenerated metadata.event_timestamp Geprüft und metadata.event_timestamp zugeordnet.
UserAgent network.http.user_agent, network.http.parsed_user_agent Direkt network.http.user_agent zugeordnet. Wird auch geparst und network.http.parsed_user_agent zugeordnet.
UVIndex additional.fields Wird als zusätzliches Feld mit dem Schlüssel „UVIndex“ hinzugefügt.
Visibility additional.fields Als zusätzliches Feld mit dem Schlüssel „Visibility“ hinzugefügt.
WindDirection additional.fields Als zusätzliches Feld mit dem Schlüssel „WindDirection“ hinzugefügt.
WindSpeed additional.fields Als zusätzliches Feld mit dem Schlüssel „WindSpeed“ hinzugefügt.
_Internal_WorkspaceResourceId additional.fields Wird als zusätzliches Feld mit dem Schlüssel „workspace_resource_id“ hinzugefügt.
metadata.event_type Wird durch Logik basierend auf OperationName und anderen Feldern bestimmt. Wenn kein bestimmter Ereignistyp gefunden wird, wird standardmäßig „GENERIC_EVENT“ verwendet. Mögliche Werte sind „STATUS_SHUTDOWN“, „RESOURCE_CREATION“, „STATUS_UPDATE“, „USER_RESOURCE_DELETION“, „RESOURCE_READ“, „RESOURCE_WRITTEN“, „RESOURCE_DELETION“ und „GROUP_MODIFICATION“.
metadata.vendor_name Legen Sie diesen Wert auf „Microsoft“ fest.
metadata.product_name Legen Sie diesen Wert auf „Azure DevOps“ fest.
metadata.log_type Legen Sie diesen Wert auf „AZURE_DEVOPS“ fest.
principal.user.account_type Auf „SERVICE_ACCOUNT_TYPE“ festlegen, wenn AuthenticationMechanism „ServicePrincipal“ enthält. Andernfalls auf „CLOUD_ACCOUNT_TYPE“ festlegen.
target.asset.attribute.cloud.environment Legen Sie MICROSOFT_AZURE fest.
security_result.action Auf „ALLOW“ für erfolgreiche Vorgänge (Succeeded, Created, Modified, executed, updated, removed) und „BLOCK“ für fehlgeschlagene Vorgänge (Failed, TimedOut) festgelegt.
extensions.auth.mechanism Legen Sie diesen Wert auf „USERNAME_PASSWORD“ fest, wenn summary „UserAuthToken“ ist.
target.resource.resource_type Wird auf „SETTING“ festgelegt, wenn pipeline_id vorhanden ist, auf „CREDENTIAL“, wenn authorization_id vorhanden ist, auf „DEVICE“, wenn agent_id vorhanden ist, oder auf „DATABASE“, wenn namespace_id vorhanden ist. Andernfalls wird er in einigen Fällen basierend auf operationName auf „STORAGE_BUCKET“ gesetzt.
target.resource.resource_subtype Wird auf „Pipeline“ festgelegt, wenn pipeline_id vorhanden ist, auf „Token“, wenn authorization_id vorhanden ist, auf „Agent“, wenn agent_id vorhanden ist, oder auf „Namespace“, wenn namespace_id vorhanden ist.

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