Private Azure-Endpunkte für interne Stagingbereiche

Unter diesem Thema werden Konzepte und detaillierte Anweisungen für die Verbindung zu internen Snowflake-Stagingbereichen über private Microsoft Azure-Endpunkte bereitgestellt.

Unter diesem Thema:

Übersicht

Private Azure-Endpunkte und Azure Private Link können kombiniert werden, um eine sichere Konnektivität zu Snowflake-internen Stagingbereichen bereitzustellen. Diese Einrichtung stellt sicher, dass die Operationen zum Laden von Daten in interne Snowflake-Stagingbereiche und das Entladen von Daten aus internen Snowflake-Stagingbereichen das interne Azure-Netzwerk verwenden und nicht über das öffentliche Internet erfolgen.

Bevor Microsoft private Endpunkte für den Zugriff auf den internen Stagingbereiche unterstützt hat, war es notwendig, eine Proxy-Farm innerhalb von Azure VNet zu erstellen, um den sicheren Zugriff auf interne Snowflake-Stagingbereich zu ermöglichen. Mit der zusätzlichen Unterstützung von privaten Endpunkten für interne Snowflake-Stagingbereiche können Benutzer und Clientanwendungen jetzt über das private Azure-Netzwerk auf interne Snowflake-Stagingbereiche zugreifen. Die folgende Abbildung fasst diese neue Funktion zusammen:

Connect to internal stage using Azure Private Link

Beachten Sie Folgendes in Bezug auf die Zahlen in der Abbildung für BEFORE:

  • Benutzer haben zwei Optionen, um eine Verbindung zu einem internen Snowflake-Stagingbereich herzustellen:

    • Option A ermöglicht eine direkte lokale (On-premises) Verbindung mit dem internen Stagingbereich, was mit Nummer 1 gekennzeichnet ist.

    • Option B ermöglicht eine Verbindung zum internen Stagingbereich über eine Proxy-Farm, was mit den Nummern 2 und 3 gekennzeichnet ist.

  • Wenn Sie die Proxy-Farm verwenden, können Benutzer auch direkt eine Verbindung zu Snowflake herstellen, was mit Nummer 4 gekennzeichnet ist.

Beachten Sie Folgendes in Bezug auf die Zahlen in der Abbildung für AFTER:

  • Durch die Aktualisierungen in dieser Funktion ist es nicht mehr erforderlich, für die Verbindung zu Snowflake oder zu einem internen Snowflake-Stagingbereich eine Proxy-Farm zu verwenden.

  • Ein lokaler Benutzer kann eine direkte Verbindung zu Snowflake herstellen, was mit Nummer 5 gekennzeichnet ist.

  • Um eine Verbindung zu einem internen Snowflake-Stagingbereich herzustellen, verbindet sich der lokale Benutzer mit einem privaten Endpunkt, Nummer 6, und verwendet dann Azure Private Link, um sich mit dem internen Snowflake-Stagingbereich zu verbinden, wie durch Nummer 7 gekennzeichnet.

In Azure hat jedes Snowflake-Konto ein dediziertes Speicherkonto, das als interner Stagingbereich verwendet wird. Die URIs der Speicherkonten sind unterschiedlich, je nachdem, ob die Verbindung zum Speicherkonto private Konnektivität (d. h. Azure Private Link) verwendet. Die URL für die private Konnektivität enthält ein privatelink-Segment.

URI für öffentliches Speicherkonto

<Name_des_Speicherkontos>.blob.core.windows.net

URI für Speicherkonto mit privater Konnektivität

<Name_des_Speicherkontos>.privatelink.blob.core.windows.net

Vorteile

Die Implementierung von privaten Endpunkten für den Zugriff auf interne Snowflake-Stagingbereiche bietet die folgenden Vorteile:

  • Daten in internen Stagingbereichen werden nicht über das öffentliche Internet übertragen.

  • Client- und SaaS-Anwendungen, wie Microsoft PowerBI, die außerhalb von Azure VNet ausgeführt werden, können sich sicher mit Snowflake verbinden.

  • Administratoren müssen keine Änderung an den Firewall-Einstellungen vornehmen, um auf die Daten in den internen Stagingbereichen zugreifen zu können.

  • Administratoren können konsistente Sicherheit und Überwachung hinsichtlich der Art und Weise implementieren, wie sich Benutzer mit Speicherkonten verbinden.

Einschränkungen

  • Ein einzelner privater Endpunkt kann mit einem einzelnen Dienstendpunkt kommunizieren. Konfigurieren Sie daher einen privaten Endpunkt für jedes Snowflake-Konto zur Verwendung von privater Konnektivität zu den internen Stagingbereichen. Beachten Sie, dass dies eine Einschränkung von Microsoft Azure und nicht von Snowflake ist.

Konfigurieren von privaten Endpunkten für den Zugriff auf interne Snowflake-Stagingbereiche

Um private Endpunkte für den Zugriff auf interne Snowflake-Stagingbereiche zu konfigurieren, ist die Unterstützung der folgenden drei Rollen in Ihrer Organisation erforderlich:

  1. Snowflake-Kontoadministrator (d. h. ein Benutzer mit der Snowflake-Systemrolle ACCOUNTADMIN)

  2. Microsoft Azure-Administrator

  3. Netzwerkadministrator

Abhängig von der Organisation kann es notwendig sein, den Konfigurationsaufwand mit mehr als einer Person oder einem Team zu koordinieren, um die folgenden Konfigurationsschritte zu implementieren.

Führen Sie die folgenden Schritte aus, um den sicheren Zugriff auf interne Snowflake-Stagingbereiche über private Azure-Endpunkte zu konfigurieren und zu implementieren:

  1. Führen Sie als Snowflake-Kontoadministrator die folgenden Anweisungen in Ihrem Snowflake-Konto aus, und notieren Sie sich die ResourceID des Speicherkontos im internen Stagingbereich, die durch den Schlüssel privatelink_internal_stage definiert ist. Weitere Informationen dazu finden Sie unter ENABLE_INTERNAL_STAGES_PRIVATELINK.

    use role accountadmin;
    alter account set ENABLE_INTERNAL_STAGES_PRIVATELINK = true;
    select system$get_privatelink_config();
    
  2. Erstellen Sie als Azure-Administrator einen privaten Endpunkt über das Azure-Portal.

    Notieren Sie sich den Wert von privateEndpointResourceID, der auf der Registerkarte Properties der Benutzeroberfläche in den Details des privaten Endpunkts angezeigt wird und im nächsten Schritt benötigt wird.

    Stellen Sie sicher, dass der Wert Target sub-resource auf blob gesetzt ist.

  3. Führen Sie als Snowflake-Administrator die folgende Anweisung mit dem Zeichenfolgenwert privateEndpointResourceID als Funktionsargument aus. Durch diesen Schritt wird der Zugriff auf den internen Snowflake-Stagingbereich über den privaten Endpunkt autorisiert.

    use role accountadmin;
    select system$authorize_stage_privatelink_access('privateEndpointResourceID');
    
  4. Ändern Sie als Netzwerkadministrator die DNS-Einstellungen wie folgt, um die URLs aufzulösen:

    <Name_des_Speicherkontos>.blob.core.windows.net in <Name_des_Speicherkontos>.privatelink.blob.core.windows.net

    Wenn Sie eine private DNS-Zone in einem Azure VNet verwenden, erstellen Sie den Alias-Eintrag für <Name_des_Speicherkontos>.privatelink.blob.core.windows.net.

    Weitere Informationen dazu finden Sie unter DNS-Konfiguration für private Azure-Endpunkte.

    Tipp

    • Verwenden Sie zum Testen der Funktion ein separates Snowflake-Konto, und konfigurieren Sie eine private DNS-Zone in einem Test-VNet, damit die Tests isoliert sind und sich nicht auf Ihre anderen Workloads auswirken.

    • Wenn die Verwendung eines separaten Snowflake-Kontos nicht möglich ist, verwenden Sie einen Testbenutzer für den Zugriff auf Snowflake von einer Test-VPC aus, in der die DNS-Änderungen vorgenommen werden.

    • Um von lokalen Anwendungen aus zu testen, verwenden Sie die DNS-Weiterleitung, um Anforderung an das private Azure-DNS in VNet weiterzuleiten, in dem die DNS-Einstellungen vorgenommen werden. Führen Sie den folgenden Befehl auf dem Clientcomputer aus, um zu überprüfen, ob die zurückgegebene IP-Adresse die private IP-Adresse des Speicherkontos ist:

      dig <storage_account_name>.blob.core.windows.net
      

Problembehandlung

Azure-Anwendungen, die über das öffentliche Internet auf Snowflake-Stagingbereiche zugreifen und außerdem einen privaten DNS-Dienst zur Auflösung von Dienst-Hostnamen verwenden, können nicht auf Snowflake-Stagingbereiche zugreifen, wenn eine private Endpunktverbindung zu dem Stagingbereich hergestellt wird, wie unter diesem Thema beschrieben.

Sobald eine private Endpunktverbindung erstellt ist, erstellt Microsoft Azure automatisch einen CNAME-Datensatz im öffentlichen DNS-Dienst, der den Speicherkonto-Host auf sein Azure Private Link-Gegenstück (d. h. .privatelink.core.windows.net) verweist. Wenn eine Anwendung eine private DNS-Region für dieselbe Domäne konfiguriert hat, versucht Microsoft Azure, den Speicherkonto-Host durch Abfragen des privaten DNS-Dienstes aufzulösen. Wenn der Eintrag für das Speicherkonto nicht im privaten DNS-Dienst gefunden wird, tritt ein Verbindungsfehler auf.

Es gibt zwei Möglichkeiten, dieses Problem zu lösen:

  1. Entfernen oder trennen Sie den privaten DNS-Bereich von der Anwendung.

  2. Erstellen Sie einen CNAME-Datensatz für den privaten Hostnamen des Speicherkontos (d. h. <Speicherkontoname>.privatelink.core.windows.net) im privaten DNS-Dienst, und verweisen Sie ihn auf den Hostnamen, der durch die Ausgabe dieses Befehls angegeben wird:

    dig CNAME <storage_account_name>.privatelink.core.windows.net