Pinning privater Konnektivitätendpunkte für eingehenden Datenverkehr

Für Snowflake -Konten auf Amazon Web Services (AWS) und Microsoft Azure (Azure) können Sie private Endpunkte für Konnektivität Ihrem Konto anheften (festlegen, registrieren und zuordnen). Durch das Pinning privater Endpunkte an Ihr Konto stellt Snowflake sicher, dass der eingehende Datenverkehr, der von den angehefteten Endpunkten ausgeht, nur an das Konto geht, das sie angeheftet hat. Snowflake empfiehlt die Verwendung von angehefteten Endpunkten, Netzwerkrichtlinien und Netzwerkregeln, um Ihre Sicherheitslage zu verbessern, indem Sie die Angriffsfläche für Ihr Snowflake-Konto reduzieren.

Tipp

Mit Pinning können nur autorisierte private Endpunkte verwendet werden, um Datenverkehr aus dem Kundennetzwerk an ein bestimmtes Snowflake-Konto zu senden. Wenn Sie den eingehenden Zugriff auf Snowflake-Konten aus bestimmten Listen von IPs und VPCE IDs/LinkIDs beschränken möchten, verwenden Sie Netzwerkrichtlinien und Netzwerkregeln.

Snowflake erzwingt für jede über eine private Konnektivität empfangene Anfrage eine Überprüfung des privaten Endpunkts am Eingangspunkt. Diese Überprüfung vergleicht zwei wichtige Informationen:

  • Die Endpunkt-ID, die im Header der Anfrage angegeben ist.

  • Das Konto, das den Endpunkt angeheftet hat, wie in den Metadaten von Snowflake aufgezeichnet.

Wenn diese übereinstimmen – mit anderen Worten, wenn die Anfrage von dem Konto ausgeht, das den Endpunkt registriert hat –, dann erlaubt Snowflake die Verbindung. Andernfalls blockiert Snowflake die Verbindung.

Beispiel:

Überprüfung des autorisierten Zugriffs für eingehenden Datenverkehr über angeheftete private Konnektivitätsendpunkte

Angehefteter privater Endpunkt

Snowflake-Konto, das einen privaten Endpunkt angeheftet hat

Angefragtes Snowflake-Zielkonto

Entscheidung der Snowflake Pinning-Überprüfung

PE1

A1

A1

ALLOW

PE1

A1

A2

DENY

PE2

A2

A1

DENY

PE2

A2

A2

ALLOW

Voraussetzungen

Bevor Sie einen privaten Endpunkt anheften, müssen Sie Folgendes tun:

  • Konfigurieren Sie einen privaten Link für Ihr Snowflake-Konto auf AWS oder Azure.

  • Schränken Sie den Geltungsbereich des Zugriffstokens ein, mit dem Sie einen Endpunkt bei Ihrem Snowflake-Konto registrieren.

Weitere Informationen zur Konfiguration von privaten Links finden Sie unter AWS PrivateLink oder Azure Private Link.

Verwalten Sie die Durchsetzung mit dem Argument „Verzögerungszeit“

Nachdem Sie Ihre privaten Links konfiguriert haben, rufen Sie die Systemfunktion SYSTEM$REGISTER_PRIVATELINK_ENDPOINT auf, um einen privaten Konnektivitätsendpunkt für Ihr Snowflake-Konto zu registrieren. In diesem Funktionsaufruf können Sie optional eine Verzögerungszeit angeben. Verzögerungszeit ist die Anzahl der Minuten, die gewartet wird, bevor die Registrierung des privaten Endpunkts erzwungen wird. Der Wert für die Verzögerungszeit verhindert, dass Sie sich selbst versehentlich den Zugriff auf Snowflake verwehren, wenn Sie einen neuen privaten Endpunkt registrieren. Die maximale Verzögerungszeit beträgt 1.440 Minuten (24 Stunden), und der Standardwert ist 60 Minuten.

Der private Endpunkt, den Sie für Ihr Snowflake-Konto registrieren, kann auch für andere Snowflake-Konten registriert werden. Sie könnten beispielsweise drei Snowflake-Konten haben und sicherstellen wollen, dass die Verbindung zu jedem Snowflake-Konto nur über einen registrierten privaten Endpunkt läuft. Wenn Sie das Argument „Verzögerungszeit“ auf 60 Minuten setzen, haben Sie genügend Zeit, um den privaten Konnektivitätsendpunkt für jedes Snowflake-Konto zu registrieren.

Wenn Sie jedoch einen privaten Konnektivitätsendpunkt registrieren und eine Verzögerungszeit angeben, müssen Sie den lokalen Zeitstempel des ersten Kontos beachten, in dem Sie die Systemfunktion aufrufen. Die Durchsetzungszeit basiert auf dem lokalen Zeitstempel des ersten Kontos, wenn Sie die Systemfunktion aufrufen, plus einer von Ihnen angegebenen Verzögerungszeit, relativ zu einem bestimmten privaten Konnektivitätsendpunkt.

Nehmen wir zum Beispiel einen einzelnen privaten Konnektivitätsendpunkt mit drei Konten in derselben Zeitzone:

  • Wenn Sie die Systemfunktion in account1 um 10:00 AM aufrufen und eine Verzögerungszeit von 60 Minuten angeben, ist die Durchsetzungszeit 11:00 AM.

  • Wenn Sie die Systemfunktion in account2 um 10:30 AM aufrufen, ist die Durchsetzungszeit 11:00 AM.

  • Wenn Sie die Systemfunktion in account3 um 11:01 AM aufrufen, ist die Durchsetzungszeit sofort (jetzt).

Tipp

Speichern Sie den Zeitstempel, wann Sie den privaten Endpunkt im ersten Konto registriert haben. Zeichnen Sie die Konten auf, die an einen bestimmten privaten Endpunkt gebunden sind.

Wenn Sie voraussichtlich mehrere Konten registrieren werden und eine Verzögerungszeit von 1.440 Minuten nicht ausreicht, wenden Sie sich an den Snowflake Support.

Verwalten des Geltungsbereichs von Zugriffstoken auf Microsoft Azure

Bevor Sie einen privaten Endpunkt an Ihr Snowflake-Konto auf Azure anheften, müssen Sie den Geltungsbereich des Zugriffstokens begrenzen, das Sie an die Systemfunktion SYSTEM$REGISTER_PRIVATELINK_ENDPOINT übergeben. Indem der Aufrufer aufgefordert wird, das Zugriffstoken auf den privaten Endpunkt zu übertragen, kann Snowflake den Zugriff des Aufrufers auf den Endpunkt autorisieren. Das bedeutet, dass das Token nur für den privaten Endpunkt und das Snowflake-Konto gültig ist, über das Sie die Systemfunktion aufrufen.

Wichtig

Verwenden Sie nicht das in der Systemfunktion SYSTEM$AUTHORIZE_PRIVATELINK verwendete Token. Die folgenden Schritte erzeugen ein eindeutiges Token für SYSTEM$REGISTER_PRIVATELINK_ENDPOINT.

Um den Geltungsbereich des Zugriffstokens für Ihren privaten Endpunkt auf Azure einzuschränken, führen Sie die folgenden Schritte in Ihrem Microsoft Azure-Konto aus:

  1. Erstellen Sie eine kundenspezifische Rollendefinition für eine Rolle mit dem Namen snowflake-pep-role, und ersetzen Sie den Platzhalter subscription_id durch die ID Ihres Abonnements.

    az role definition create --role-definition '{"Name":"snowflake-pep-role","Description":
    "To generate advanced proof of access token for Snowflake private endpoint pinning","Actions":
    ["Microsoft.Network/privateEndpoints/read"],"AssignableScopes":["/subscriptions/<subscription_id>"]}'
    
    Copy

    Die Abonnement-ID muss mit dem Abonnement übereinstimmen, in dem der private Endpunkt existiert. Sie müssen die Rollendefinition nur einmal für Ihr Abonnement erstellen.

  2. Erstellen Sie die Rollenzuweisung, und weisen Sie die Rolle snowflake-pep-role und den privaten Endpunktbereich einem Benutzer (oder einer Gruppe) zu. Ersetzen Sie die Platzhalter für user und private_endpoint_resource_id.

    az role assignment create --assignee <user> --role snowflake-pep-role --scope <private_endpoint_resource_id>
    
    Copy
  3. Erzeugen Sie das Zugriffstoken zur Verwendung mit der Systemfunktion SYSTEM$REGISTER_PRIVATELINK_ENDPOINT. Ersetzen Sie den Platzhalter subscription_id durch die ID Ihres Abonnements.

    az account get-access-token --subscription <subscription_id>
    
    Copy

Verwalten des Geltungsbereichs von Zugriffstoken auf Amazon Web Services

Bevor Sie einen privaten Endpunkt an Ihr Snowflake-Konto auf AWS anheften, müssen Sie den Geltungsbereich des Zugriffstokens begrenzen, das Sie an die Systemfunktion SYSTEM$REGISTER_PRIVATELINK_ENDPOINT übergeben. Indem der Aufrufer aufgefordert wird, das Zugriffstoken auf den privaten Endpunkt zu übertragen, kann Snowflake den Zugriff des Aufrufers auf den Endpunkt autorisieren. Das bedeutet, dass das Token nur für den privaten Endpunkt und das Snowflake-Konto gültig ist, über das Sie die Systemfunktion aufrufen.

Wichtig

Verwenden Sie nicht das in der Systemfunktion SYSTEM$AUTHORIZE_PRIVATELINK verwendete Token. Die folgenden Schritte erzeugen ein eindeutiges Token für SYSTEM$REGISTER_PRIVATELINK_ENDPOINT.

Um den Geltungsbereich des Zugriffstokens für Ihren privaten Endpunkt auf AWS einzuschränken, generieren Sie ein Verbundtoken, wie im folgenden Beispiel gezeigt:

aws sts get-federation-token --name snowflake --policy
'{ "Version": "2012-10-17", "Statement":
  [ {
  "Effect": "Allow", "Action": ["ec2:DescribeVpcEndpoints"],
  "Resource": ["*"] }
  ] }'
Copy

Beispiel

Als repräsentatives Beispiel registrieren Sie einen Endpunkt, um Ihre Verbindung zum Snowflake-Dienst zu routen.

  1. Konfigurieren Sie AWS PrivateLink oder Azure Private Link für Ihr Snowflake-Konto. Wenn Sie diesen Dienst bereits konfiguriert haben, fahren Sie mit dem nächsten Schritt fort.

  2. Melden Sie sich bei Snowflake über das öffentliche Internet an, d. h. über die URL, die Sie verwenden und die kein privatelink-Segment in der URL enthält.

  3. Rufen Sie die Systemfunktion SYSTEM$REGISTER_PRIVATELINK_ENDPOINT auf, um den VPC-Endpunkt für Ihr Snowflake-Konto zu registrieren. Die token-Argumente enthalten abgeschnittene Werte, und die Verzögerungszeiteinheit ist Minuten:

    AWS

    SELECT SYSTEM$REGISTER_PRIVATELINK_ENDPOINT(
      'vpce-0c1...',
      '123.....',
      '{
        "Credentials": {
          "AccessKeyId": "ASI...",
          "SecretAccessKey": "alD...",
          "SessionToken": "IQo...",
          "Expiration": "2024-12-10T08:20:20+00:00"
        },
        "FederatedUser": {
          "FederatedUserId": "0123...:snowflake",
          "Arn": "arn:aws:sts::174...:federated-user/snowflake"
        },
        "PackedPolicySize": 9,
        }',
      120
      );
    
    Copy

    Azure

    SELECT SYSTEM$REGISTER_PRIVATELINK_ENDPOINT(
      '123....',
      '/subscriptions/0cc51670-.../resourceGroups/dbsec_test_rg/providers/Microsoft.Network/
      privateEndpoints/...',
      'eyJ...',
      120
    );
    
    Copy

#. Confirm the private connectivity endpoint mapping by calling the SYSTEM$GET_PRIVATELINK_ENDPOINT_REGISTRATIONS system function.

Sie können die Registrierung des privaten Konnektivitätsendpunkts von Ihrem Snowflake-Konto aufheben, indem Sie die Systemfunktion SYSTEM$UNREGISTER_PRIVATELINK_ENDPOINT aufrufen.

Wichtig

Wenn Sie einen VPC-Endpunkt oder einen privaten Endpunkt in Snowflake registrieren und den Endpunkt in Ihrem VPC oder VNet löschen, müssen Sie die Systemfunktion SYSTEM$UNREGISTER_PRIVATELINK_ENDPOINT in Ihrem Snowflake-Konto aufrufen, um die Registrierung des Endpunktes aufzuheben. Andernfalls kann Ihre Verbindung zum Snowflake-Dienst keine private Konnektivität nutzen, sondern wird über das öffentliche Internet hergestellt.