Hybrid Cloud + On-Premises-Datenintegration mit Bright Data

Erfahren Sie, wie Bright Data und Azure Web- und interne Analysen für den Finanzbereich zusammenführen und dabei die Sicherheit, Konformität und Synchronisierung der Daten gewährleisten.
12 min lesen
Hybrid Cloud + On-Premises Data Integration with Bright Data

Ein globales Finanzinstitut muss Live-Marktdaten aus dem Internet mit vertraulichen internen Analysen kombinieren. Die Daten sind aufgeteilt zwischen einem lokalen Warehouse (für sensible Kundendaten) und Azure Data Lake (für skalierbare Analysen). In diesem Leitfaden erfahren Sie, wie Sie beide über die APIs von Bright Data für eine sichere Integration nahezu in Echtzeit verbinden können.

Sie erfahren:

  • Warum Finanzorganisationen hybride Datenkonfigurationen benötigen
  • Wie Sie mit Bright Data konforme Webdaten sammeln
  • Wie Sie eine sichere bidirektionale Synchronisierung zwischen Azure Data Lake und einem lokalen Warehouse einrichten
  • Wie Sie die End-to-End-Datensynchronisierung validieren
  • Wie Sie einheitliche Analysen durchführen, ohne sensible Daten zu verschieben
  • Wo Sie die Beispielkonfigurationen und Skripte in GitHub finden

Was ist hybride Datenintegration und warum braucht die Finanzbranche sie?

Finanzorganisationen unterliegen strengen Vorschriften wie DSGVO, SOC 2, MiFID II und Basel III, die regeln, wo Daten gespeichert werden dürfen. Öffentliche Webdaten liefern Echtzeit-Marktinformationen, während vorhandene interne Datensätze die langfristige Modellierung und Compliance unterstützen. Herkömmliche ETL-Systeme vereinen beide Aspekte selten auf sichere Weise.

Die Herausforderung: Wie lassen sich externe Marktdaten mit internen Analysen kombinieren, ohne die Sicherheit oder Compliance zu beeinträchtigen?

Die Lösung: Bright Data stellt strukturierte, konforme Webdaten über APIs bereit, während die hybride Infrastruktur von Azure sensible Daten vor Ort speichert.

Architekturübersicht: Sichere Verbindung zwischen Cloud und lokalen Systemen

Das System durchläuft vier wichtige Ebenen:

  • Datenerfassung: Bright Data-APIs (SERP-API, Custom Scraper, Datensätze)
  • Cloud-Landing-Zone: Azure Data Lake (Rohdaten- und kuratierte Zonen)
  • Sichere lokale Zone: Lokaler SQL Server oder Snowflake
  • Orchestrierung und Analyse: Azure Data Factory mit privaten Endpunkten, Synapse/Databricks für föderierte Abfragen

Dadurch wird sichergestellt, dass Webdaten einfließen, während sensible Daten geschützt bleiben.

Architecture diagram showing data collection, cloud landing zone, on-prem secure zone, and orchestration flow

Voraussetzungen

Vor dem Start:

  • Aktives Bright Data -Konto mit API-Zugriff
  • Azure-Abonnement mit Data Lake, Data Factory und Synapse oder Databricks
  • Lokale Datenbank, die über ein privates Netzwerk (ODBC oder JDBC) erreichbar ist
  • Sichere private Verbindung (ExpressRoute, Site-to-Site-VPN oder privater Endpunkt)
  • GitHub-Konto zum Klonen des Beispiel-Repositorys

💡 Tipp: Führen Sie alle Schritte zunächst in einem Nicht-Produktions-Arbeitsbereich aus.

Schrittweise Implementierung

1. Finanzdaten aus dem Internet mit Bright Data sammeln

Wir konfigurieren den benutzerdefinierten Scraper von Bright Data, um Aktienkurse, behördliche Meldungen und Finanznachrichten zu extrahieren. Der Scraper gibt strukturierte JSON-Daten aus, die für die Analyse bereit sind.
So sehen die Daten aus:

[
  {
    "symbol": "AAPL",
    "price": 230.66,
    "currency": "USD",
    "timestamp": "2026-11-10T20:15:36Z",
    "source": "https://finance.yahoo.com/quote/AAPL",
    "sector": "Technology",
    "scraped_at": "2026-11-10T20:16:10Z"
  },
  {
      ...
  }
]
Bright Data's dashboard

Einfache Konfiguration: Die Datei scraper_config.yaml legt fest, was wie oft gescrapt werden soll. Sie zielt auf Finanzwebsites ab, extrahiert bestimmte Datenpunkte und plant stündliche Erfassungen mit Webhook-Benachrichtigungen.

Dieser Ansatz stellt sicher, dass Sie saubere, strukturierte Daten ohne manuellen Eingriff erhalten.

# scraper_config.yaml
name: financial_data_aggregator
description: >
  Sammelt Echtzeit-Aktienkurse, SEC-Meldungen und Finanznachrichten-Schlagzeilen
  für die Hybrid-Cloud-Integration.

targets:
  - https://finance.yahoo.com/quote/AAPL
  - https://finance.yahoo.com/quote/MSFT
  - https://www.reuters.com/markets/
  - https://www.sec.gov/edgar/search/

selectors:
  - name: symbol
    type: text
    selector: "h1[data-testid='quote-header'] span"
  - name: price
    type: text
    selector: "fin-streamer[data-field='regularMarketPrice']"
  - name: headline
    type: text
    selector: "article h3 a"
  - name: filing_type
    type: text
    selector: "td[class*='filetype']"
  - name: filing_date
    type: text
    selector: "td[class*='filedate']"
  - name: filing_url
    type: link
    selector: "td[class*='filedesc'] a"

pagination:
  type: next-link
  selector: "a[aria-label='Next']"

output:
  format: json
  file_name: financial_data.json

schedule:
  frequency: hourly
  timezone: UTC
  webhook: "https://<your-webhook-endpoint>/brightdata/ingest"

notifications:
  email_on_success: [email protected]
  email_on_failure: [email protected]

2. Daten sicher in Azure Data Lake einlesen

Nun leiten wir die gesammelten Daten mithilfe einer Azure-Funktion an Azure Data Lake weiter. Diese Funktion dient als sicheres Gateway:

  • Empfängt JSON-Daten über HTTPS POST von Bright Data
  • Authentifizierung mithilfe von Managed Identity (keine Geheimnisse zu verwalten)
  • Organisiert Dateien nach Quelle und Zeitstempel, um die Nachverfolgung zu erleichtern
  • Fügt Metadaten-Tags für die Compliance-Verfolgung hinzu

Das Ergebnis: Ihre Marktdaten landen in partitionierten Ordnern, wodurch sie einfach zu verwalten und abzufragen sind.

Diagram showing secure ingestion of JSON data into Azure Data Lake through an Azure Function

azure_ingest.py

# azure_function_ingest.py
import azure.functions as func
import json
import os
from datetime import datetime
from azure.identity import ManagedIdentityCredential
from azure.storage.blob import BlobServiceClient, ContentSettings

# Umgebungsvariablen
STORAGE_ACCOUNT_URL = os.getenv("STORAGE_ACCOUNT_URL")  # z. B. „https://myaccount.blob.core.windows.net”
CONTAINER_NAME = os.getenv("CONTAINER_NAME", "brightdata-market")

# Blob-Client mit verwalteter Identität initialisieren
credential = ManagedIdentityCredential()
blob_service_client = BlobServiceClient(account_url=STORAGE_ACCOUNT_URL, credential=credential)


def main(req: func.HttpRequest) -> func.HttpResponse:
    try:
        # Eingehende JSON-Daten von Bright Data analysieren
        payload = req.get_json()
        source = detect_source(payload)
        now = datetime.utcnow()
        date_str = now.strftime("%Y-%m-%d")

        # Zielpfad vorbereiten
        blob_path = f"raw/source={source}/date={date_str}/financial_data_{now.strftime('%H%M%S')}.json"

        # JSON-Datei hochladen
        blob_client = blob_service_client.get_blob_client(container=CONTAINER_NAME, blob=blob_path)
        data_bytes = json.dumps(payload, indent=2).encode("utf-8")

        blob_client.upload_blob(
            data_bytes,
            overwrite=True,
            content_settings=ContentSettings(content_type="application/json"),
            metadata={
                "classification": "public",
                "data_category": "market_data",
                "source": source,
                "ingested_at": now.isoformat(),
            },
        )

        return func.HttpResponse(
            f"Daten aus {source} gespeichert unter {blob_path}",
            status_code=200
        )

    except Exception as ex:
        return func.HttpResponse(str(ex), status_code=500)


def detect_source(payload: dict) -> str:
    """Einfacher Helfer zur Identifizierung des Quellennamens."""
    # Suche nach dem Feld „source” im ersten Element des Arrays
    if isinstance(payload, list) and payload:
        src_url = payload[0].get("source", "")
        if "yahoo" in src_url:
            return "finance_yahoo"
        elif "reuters" in src_url:
            return "reuters"
        elif "sec" in src_url:
            return "sec"
    return "unknown"

3. Nicht sensible Teilmengen mit lokalen Systemen synchronisieren

Nicht alle Daten müssen zwischen Umgebungen übertragen werden. Wir verwenden Azure Data Factory als intelligenten Filter, der sorgfältig nur die Teilmengen auswählt, die sicher mit Ihrem lokalen Warehouse synchronisiert werden können.

So funktioniert der Prozess in der Praxis:

Die Pipeline beginnt mit der Suche nach neuen Dateien, die in Ihrem Data Lake gelandet sind. Anschließend wendet sie eine intelligente Filterung an, um nur öffentliche, nicht sensible Daten einzubeziehen – denken Sie dabei an Marktpreise und Börsenkürzel, nicht an Kundeninformationen oder proprietäre Analysen.

Was macht dies sicher und zuverlässig?

Private Endpunkte erstellen einen dedizierten Tunnel zwischen Azure und Ihrer lokalen Infrastruktur, der das öffentliche Internet vollständig umgeht. Dadurch werden externe Bedrohungen ausgeschlossen und eine konsistente Leistung gewährleistet.

Durch inkrementelles Laden mit Wasserzeichen-Tracking werden nur neue oder geänderte Datensätze verschoben. In Kombination mit der automatischen Schema-Validierung werden so Duplikate vermieden und beide Umgebungen bleiben perfekt aufeinander abgestimmt.

Sehen wir uns nun an, wie sich dies in tatsächlichem Pipeline-Code niederschlägt:

{
  "name": "Hybrid_Cloud_OnPrem_Sync",
  "properties": {
    "activities": [
      {
        "name": "Lookup_NewFiles",
        "type": "Lookup",
        "dependsOn": [],
        "typeProperties": {
          "source": {
            "type": "JsonSource"
          },
          "dataset": {
            "referenceName": "ADLS_NewFiles_Dataset",
            "type": "DatasetReference"
          },
          "firstRowOnly": false
        }
      },
      {
        "name": "Get_Metadata",
        "type": "GetMetadata",
        "dependsOn": [
          {
            "activity": "Lookup_NewFiles",
            "dependencyConditions": ["Succeeded"]
          }
        ],
        "typeProperties": {
          "dataset": {
            "referenceName": "ADLS_NewFiles_Dataset",
            "type": "DatasetReference"
          },
          "fieldList": ["childItems", "size", "lastModified"]
        }
      },
      {
        "name": "Filter_PublicData",
        "type": "Filter",
        "dependsOn": [
          {
            "activity": "Get_Metadata",
            "dependencyConditions": ["Succeeded"]
          }
        ],
        "typeProperties": {
          "items": {
            "value": "@activity('Lookup_NewFiles').output.value",
            "type": "Expression"
          },
          "condition": "@equals(item().metadata.classification, 'public')"
        }
      },
      {
        "name": "Copy_To_OnPrem_SQL",
        "type": "Copy",
        "dependsOn": [
          {
            "activity": "Filter_PublicData",
            "dependencyConditions": ["Succeeded"]
          }
        ],
        "typeProperties": {
          "source": {
            "type": "JsonSource",
            "treatEmptyAsNull": true
          },
          "sink": {
            "type": "SqlSink",
            „preCopyScript“: „IF OBJECT_ID('stg_market_data') IS NULL CREATE TABLE stg_market_data (symbol NVARCHAR(50), price FLOAT, currency NVARCHAR(10), timestamp DATETIME2, source NVARCHAR(500));“
          }
        },
        "inputs": [
          {
            "referenceName": "ADLS_PublicData_Dataset",
            "type": "DatasetReference"
          }
        ],
        "outputs": [
          {
            "referenceName": "OnPrem_SQL_Dataset",
            "type": "DatasetReference"
          }
        ]
      },
      {
        "name": "Log_Load_Status",
        "type": "StoredProcedure",
        "dependsOn": [
          {
            "activity": "Copy_To_OnPrem_SQL",
            "dependencyConditions": ["Succeeded", "Failed"]
          }
        ],
        "typeProperties": {
          "storedProcedureName": "usp_Log_HybridLoad",
          "storedProcedureParameters": {
            "load_source": {
              "value": "BrightData",
              "type": "String"
            },
            "status_msg": {
              "value": "@activity('Copy_To_OnPrem_SQL').output",
              "type": "Expression"
            }
          }
        },
        „linkedServiceName”: {
          „referenceName”: „OnPrem_SQL_LinkedService”,
          „type”: „LinkedServiceReference”
        }
      }
    ],
    „annotations”: [„HybridIntegrationDemo”]
  }
}

Aufschlüsselung der wichtigsten Komponenten:

  • Lookup_NewFiles fungiert als Prüffunktion Ihrer Pipeline und identifiziert zunächst, welche neuen Daten im Data Lake angekommen sind und verarbeitet werden müssen. Dadurch wird verhindert, dass das System alte Dateien unnötigerweise erneut verarbeitet.
  • Get_Metadata untersucht diese Dateien dann genau und überprüft ihre Größe, Änderungsdaten und Struktur. Dieser Schritt stellt sicher, dass wir mit vollständigen, gültigen Dateien arbeiten, bevor wir fortfahren.
  • Filter_PublicData ist der Ort, an dem die Sicherheitsmagie stattfindet. Mithilfe der zuvor eingebetteten Klassifizierungsmetadaten filtert es automatisch alle sensiblen Daten heraus und stellt sicher, dass nur öffentliche Marktinformationen die Pipeline durchlaufen.
  • Copy_To_OnPrem_SQL übernimmt die eigentliche Übertragung, jedoch mit intelligenten Sicherheitsvorkehrungen. Das preCopyScript stellt sicher, dass die Zieltabelle mit dem richtigen Schema vorhanden ist, während die private Endpunktverbindung dafür sorgt, dass alles innerhalb Ihres sicheren Netzwerks bleibt.
  • Log_Load_Status bietet wichtige Transparenz, da jeder Synchronisierungsvorgang in Ihrer lokalen Datenbank aufgezeichnet wird. Dadurch wird der von Compliance-Teams geforderte Prüfpfad erstellt, während das Betriebspersonal sofort Einblick in den Zustand der Pipeline erhält.

Der eigentliche Vorteil: Ihr lokales Team erhält den erforderlichen Marktkontext und Echtzeitinformationen, während Ihre sensiblen Kundendaten und proprietären Modelle sicher dort bleiben, wo sie hingehören. Das Beste aus beiden Welten: Agilität trifft auf Sicherheit.

4. Bidirektionale Synchronisierungsvalidierung aktivieren

Datenkonsistenz ist für zuverlässige Geschäftsentscheidungen unerlässlich. Sie müssen darauf vertrauen können, dass Ihre Cloud-Analysen und lokalen Berichte die gleichen Zahlen anzeigen. Wir haben automatisierte Datenvalidierungsprüfungen entwickelt, die kontinuierlich ausgeführt werden, um diese Sicherheit zu gewährleisten.

So funktioniert der Validierungsprozess:

  • Der Vergleich der Zeilenanzahl dient als erstes Warnsystem. Diese erste Überprüfung identifiziert schnell größere Probleme wie fehlgeschlagene Übertragungen oder unvollständige Datenladungen. Wenn die Zahlen in der Cloud und vor Ort nicht übereinstimmen, wissen Sie sofort, dass etwas untersucht werden muss.
  • Hash-Prüfsummen erstellen digitale Fingerabdrücke Ihrer Daten. Anstatt Tausende von Datensätzen manuell zu vergleichen, generieren wir für jeden Datensatz einzigartige kryptografische Hashes. Selbst eine einzige Zeichenänderung erzeugt einen völlig anderen Hash. Mit dieser Methode lassen sich Datenbeschädigungen oder unvollständige Übertragungen sofort erkennen.
  • Durch die Synchronisierung in Echtzeit werden Validierungen alle paar Minuten durchgeführt. Sie müssen nicht auf Batch-Jobs über Nacht warten, um Probleme zu entdecken. Das System erkennt Probleme innerhalb von Minuten statt Tagen und hält Ihre Daten aktuell und zuverlässig.
  • Automatische Warnmeldungen verwandeln Datenprobleme in sofortige Maßnahmen. Wenn das System Unstimmigkeiten feststellt, sendet es Benachrichtigungen über Slack, E-Mail oder Ihre vorhandenen Überwachungstools. Ihr Team kann Probleme beheben, bevor sie sich auf Geschäftsentscheidungen auswirken.

So sieht das in der Praxis aus:

def validate_sync():
    # Vergleich der Datensatzanzahl zwischen den Systemen
    cloud_count = get_cloud_record_count()
    onprem_count = get_onprem_record_count()

    if cloud_count != onprem_count:
        alert_team(f"Datensatzanzahl stimmt nicht überein: Cloud {cloud_count} vs. On-Prem {onprem_count}")
        return False

    # Prüfsummen für die Validierung der Datenintegrität generieren
    cloud_checksum = generate_data_checksum('cloud')
    onprem_checksum = generate_data_checksum('onprem')

    if cloud_checksum != onprem_checksum:
        alert_team(f"Fehler bei der Datenintegrität: Prüfsummen stimmen nicht überein")
        return False

    # Überprüfen der Synchronisierungszeit
    last_sync_time = get_last_sync_timestamp()
    if is_sync_delayed(last_sync_time):
        alert_team(f"Synchronisierungsverzögerung erkannt: Letzte Synchronisierung {last_sync_time}")
        return False

    return True

5. Erstellen Sie einheitliche Analysen, ohne sensible Daten zu verschieben

Das Besondere daran: Sie können Cloud- und lokale Daten virtuell zusammenführen, ohne sensible Informationen zu verschieben.

Beispielabfrage:

SELECT c.symbol,
       c.stock_price,
       o.risk_score
FROM adls.market_data c
JOIN external.onprem_portfolio o
    ON c.symbol = o.ticker
WHERE o.client_tier = 'premium';

Azure Synapse erstellt externe Tabellen, die auf Ihr lokales Warehouse verweisen, während Databricks JDBC-Verbindungen mit rollenbasierten Zugriffskontrollen verwendet.

Best Practices für Compliance und Prüfpfade

Die Erfüllung von Audit- und gesetzlichen Anforderungen erfordert einen systematischen Ansatz für die Datenverfolgung und -sicherheit. So erstellen wir ein konformes Framework:

  • Durch die vollständige Protokollierung der Datenbewegungen wird sichergestellt, dass jede Übertragung in Azure Monitor und Ihrem lokalen SIEM aufgezeichnet wird. So entsteht eine unveränderliche Aufzeichnung darüber, welche Daten wann und wohin übertragen wurden, wodurch Auditoren eine vollständige Rückverfolgbarkeit erhalten.
  • Die eindeutige Datenherkunft nutzt Bright Data-Quell-IDs als digitale Fingerabdrücke. Diese Tags bleiben während des gesamten Lebenszyklus Ihrer Daten erhalten, sodass Sie jede Analyse bis zu ihrer ursprünglichen Quelle zurückverfolgen können.
  • Die automatisierte Herkunftsverfolgung mit Azure Purview bildet ab, wie sich Daten durch Ihre Pipelines transformieren. Es dokumentiert automatisch, welche Rohdaten zu bestimmten Berichten beitragen und welche Transformationen angewendet wurden.
  • Die zentralisierte Zugriffskontrolle synchronisiert Azure AD mit lokalem LDAP. Dadurch werden Ihre bestehenden Sicherheitsrichtlinien auf beide Umgebungen angewendet, was eine konsistente Berechtigungsverwaltung über Cloud- und lokale Systeme hinweg gewährleistet.

Das Ergebnis sind automatisierte Compliance-Berichte, eine zentralisierte Sicherheitsverwaltung und ein Framework, das Daten schützt, ohne Ihr Team zu verlangsamen.

Häufige Herausforderungen und wie Bright Data hilft

Herausforderung Bright Data-Funktion
IP-Blöcke oder Ratenbeschränkungen Residential- und ISP-Proxys (über 150 Millionen IPs)
CAPTCHAs oder Anmeldebarrieren Web Unlocker für automatisierte Lösung
JavaScript-intensive Websites Scraping-Browser (Playwright-basiertes Rendering)
Häufige Website-Änderungen Verwaltete Datendienste mit automatischer Korrektur durch KI

Fazit und nächste Schritte

Finanzorganisationen können öffentliche und private Daten sicher zusammenführen, indem sie die APIs von Bright Data zusammen mit der Hybrid-Infrastruktur von Azure nutzen.

Das Ergebnis ist ein konformes System, das sowohl Agilität als auch Kontrolle bietet.

💡 Wenn Sie einen vollständig verwalteten Datenzugriff bevorzugen, nutzen Sie die Managed Data Services von Bright Data, um das Scraping und die Bereitstellung durchgängig zu verwalten.