MuleSoft Anypoint-Logs erfassen

Unterstützt in:

In diesem Dokument wird beschrieben, wie Sie Audit-Trail-Ereignisse aus MuleSoft Anypoint-Plattform-Logs mit AWS S3 in Google Security Operations aufnehmen.

Hinweise

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

  • Google SecOps-Instanz
  • Privilegierter Zugriff auf MuleSoft
  • Privilegierter Zugriff auf AWS

MuleSoft-Organisations-ID abrufen

  1. Melden Sie sich in der Anypoint Platform an.
  2. Klicken Sie auf das Dreistrich-Menü > Zugriffsverwaltung.
  3. Klicken Sie in der Tabelle Unternehmensgruppen auf den Namen Ihrer Organisation.
  4. Kopieren Sie die Organisations-ID (z. B. 0a12b3c4-d5e6-789f-1021-1a2b34cd5e6f).

AWS S3-Bucket und IAM für Google SecOps konfigurieren

  1. Erstellen Sie einen Amazon S3-Bucket. Folgen Sie dazu dieser Anleitung: Bucket erstellen.
  2. Speichern Sie den Namen und die Region des Buckets zur späteren Verwendung (z. B. mulesoft-audit-logs).
  3. Erstellen Sie einen Nutzer gemäß dieser Anleitung: IAM-Nutzer erstellen.
  4. Wählen Sie den erstellten Nutzer aus.
  5. Wählen Sie den Tab Sicherheitsanmeldedaten aus.
  6. Klicken Sie im Abschnitt Zugriffsschlüssel auf Zugriffsschlüssel erstellen.
  7. Wählen Sie Drittanbieterdienst als Anwendungsfall aus.
  8. Klicken Sie auf Weiter.
  9. Optional: Fügen Sie ein Beschreibungstag hinzu.
  10. Klicken Sie auf Zugriffsschlüssel erstellen.
  11. Klicken Sie auf CSV-Datei herunterladen, um den Access Key (Zugriffsschlüssel) und den Secret Access Key (geheimer Zugriffsschlüssel) für die zukünftige Verwendung zu speichern.
  12. Klicken Sie auf Fertig.
  13. Wählen Sie den Tab Berechtigungen aus.
  14. Klicken Sie im Bereich Berechtigungsrichtlinien auf Berechtigungen hinzufügen.
  15. Wählen Sie Berechtigungen hinzufügen aus.
  16. Wählen Sie Richtlinien direkt anhängen aus.
  17. Suchen Sie nach der Richtlinie AmazonS3FullAccess und wählen Sie sie aus.
  18. Klicken Sie auf Weiter.
  19. Klicken Sie auf Berechtigungen hinzufügen.

Verbundene MuleSoft-App erstellen

  1. Melden Sie sich in der Anypoint Platform an.
  2. Klicken Sie auf Zugriffsverwaltung > Verknüpfte Apps > App erstellen.
  3. Geben Sie die folgenden Konfigurationsdetails an:
    • App-Name: Geben Sie einen eindeutigen Namen ein, z. B. Google SecOps export.
    • Wählen Sie App acts on its own behalf (client credentials) (App handelt in eigenem Namen (Clientanmeldedaten)) aus.
    • Klicken Sie auf Bereiche hinzufügen → Audit Log Viewer → Weiter.
    • Wählen Sie alle Unternehmensgruppen aus, deren Protokolle Sie benötigen.
    • Klicken Sie auf Weiter > Bereiche hinzufügen.
  4. Klicken Sie auf Speichern und kopieren Sie die Client-ID und den Clientschlüssel.

IAM-Richtlinie und -Rolle für S3-Uploads konfigurieren

  1. Richtlinien-JSON (ersetzen Sie mulesoft-audit-logs durch Ihren Bucket-Namen):

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Sid": "AllowPutAuditObjects",
          "Effect": "Allow",
          "Action": ["s3:PutObject"],
          "Resource": "arn:aws:s3:::mulesoft-audit-logs/*"
        }
      ]
    }
    
  2. Rufen Sie die AWS-Konsole > IAM > Richtlinien > Richtlinie erstellen > JSON-Tab auf.

  3. Kopieren Sie die Richtlinie und fügen Sie sie ein.

  4. Klicken Sie auf Weiter > Richtlinie erstellen.

  5. Rufen Sie IAM > Rollen > Rolle erstellen > AWS-Service > Lambda auf.

  6. Hängen Sie die neu erstellte Richtlinie an.

  7. Geben Sie der Rolle den Namen WriteMulesoftToS3Role und klicken Sie auf Rolle erstellen.

Lambda-Funktion erstellen

Einstellung Wert
Name mulesoft_audit_to_s3
Laufzeit Python 3.13
Architektur x86_64
Ausführungsrolle > WriteMulesoftToS3Role verwenden
  1. Nachdem die Funktion erstellt wurde, öffnen Sie den Tab Code, löschen Sie den Stub und geben Sie den folgenden Code ein (mulesoft_audit_to_s3.py).

    #!/usr/bin/env python3
    
    import os, json, gzip, io, uuid, datetime as dt, urllib.request, urllib.error, urllib.parse
    import boto3
    
    ORG_ID        = os.environ["MULE_ORG_ID"]
    CLIENT_ID     = os.environ["CLIENT_ID"]
    CLIENT_SECRET = os.environ["CLIENT_SECRET"]
    S3_BUCKET     = os.environ["S3_BUCKET_NAME"]
    
    TOKEN_URL = "https://anypoint.mulesoft.com/accounts/api/v2/oauth2/token"
    QUERY_URL = f"https://anypoint.mulesoft.com/audit/v2/organizations/{ORG_ID}/query"
    
    def http_post(url, data, headers=None):
        raw = json.dumps(data).encode() if headers else urllib.parse.urlencode(data).encode()
        req = urllib.request.Request(url, raw, headers or {})
        try:
            with urllib.request.urlopen(req, timeout=30) as r:
                return json.loads(r.read())
        except urllib.error.HTTPError as e:
            print("MuleSoft error body →", e.read().decode())
            raise
    
    def get_token():
        return http_post(TOKEN_URL, {
            "grant_type": "client_credentials",
            "client_id":  CLIENT_ID,
            "client_secret": CLIENT_SECRET
        })["access_token"]
    
    def fetch_audit(token, start, end):
        headers = {
            "Authorization": f"Bearer {token}",
            "Content-Type":  "application/json"
        }
        body = {
            "startDate": f"{start.isoformat(timespec='milliseconds')}Z",
            "endDate":   f"{end.isoformat(timespec='milliseconds')}Z",
            "limit": 200,
            "offset": 0,
            "ascending": False
        }
        while True:
            data = http_post(QUERY_URL, body, headers)
            if not data.get("data"):
                break
            yield from data["data"]
            body["offset"] += body["limit"]
    
    def upload(events, ts):
        key = f"{ts:%Y/%m/%d}/mulesoft-audit-{uuid.uuid4()}.json.gz"
        buf = io.BytesIO()
        with gzip.GzipFile(fileobj=buf, mode="w") as gz:
            for ev in events:
                gz.write((json.dumps(ev) + "\n").encode())
        buf.seek(0)
        boto3.client("s3").upload_fileobj(buf, S3_BUCKET, key)
    
    def lambda_handler(event=None, context=None):
        now   = dt.datetime.utcnow().replace(microsecond=0)
        start = now - dt.timedelta(days=1)
    
        token  = get_token()
        events = list(fetch_audit(token, start, now))
    
        if events:
            upload(events, start)
            print(f"Uploaded {len(events)} events")
        else:
            print("No events in the last 24 h")
    
    # For local testing
    if __name__ == "__main__":
        lambda_handler()
    
  2. Klicken Sie auf Konfiguration > Umgebungsvariablen > Bearbeiten > Neue Umgebungsvariable hinzufügen.

  3. Geben Sie die folgenden Umgebungsvariablen ein und ersetzen Sie die Platzhalter durch Ihre Werte.

    Schlüssel Beispielwert
    MULE_ORG_ID your_org_id
    CLIENT_ID your_client_id
    CLIENT_SECRET your_client_secret
    S3_BUCKET_NAME mulesoft-audit-logs

Lambda-Funktion planen (EventBridge Scheduler)

  1. Gehen Sie zu Konfiguration > Trigger > Trigger hinzufügen > EventBridge Scheduler > Regel erstellen.
  2. Geben Sie die folgenden Konfigurationsdetails an:
    • Name: daily-mulesoft-audit export.
    • Zeitplanmuster: Cron-Ausdruck.
    • Ausdruck: 0 2 * * * (wird täglich um 02:00 Uhr UTC ausgeführt).
  3. Lassen Sie die restlichen Einstellungen unverändert und klicken Sie auf Erstellen.

Feed in Google SecOps konfigurieren, um die MuleSoft-Logs aufzunehmen

  1. Rufen Sie die SIEM-Einstellungen> Feeds auf.
  2. Klicken Sie auf Neu hinzufügen.
  3. Geben Sie im Feld Feed name einen Namen für den Feed ein, z. B. MuleSoft Logs.
  4. Wählen Sie Amazon S3 V2 als Quelltyp aus.
  5. Wählen Sie Mulesoft als Logtyp aus.
  6. Klicken Sie auf Weiter.
  7. Geben Sie Werte für die folgenden Eingabeparameter an:

    • S3-URI: Der Bucket-URI
      • s3://mulesoft-audit-logs/
        • Ersetzen Sie mulesoft-audit-logs durch den tatsächlichen Namen des Buckets.
    • Optionen zum Löschen der Quelle: Wählen Sie die gewünschte Option aus.

    • Maximales Dateialter: Dateien einschließen, die in den letzten Tagen geändert wurden. Der Standardwert ist 180 Tage.

    • Access Key ID (Zugriffsschlüssel-ID): Nutzerzugriffsschlüssel mit Zugriff auf den S3-Bucket.

    • Geheimer Zugriffsschlüssel: Geheimer Schlüssel des Nutzers mit Zugriff auf den S3-Bucket.

    • Asset-Namespace: Der Asset-Namespace.

    • Aufnahmelabels: Das Label, das auf die Ereignisse aus diesem Feed angewendet werden soll.

  8. Klicken Sie auf Weiter.

  9. Prüfen Sie die neue Feedkonfiguration auf dem Bildschirm Abschließen und klicken Sie dann auf Senden.

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