Servicenetzwerke

Bei den Snowpark Container Services sind drei Arten von Netzwerken zu berücksichtigen:

  • Eingehende Netzwerke: Wie Sie sich von außerhalb mit Ihrem Service verbinden können.

  • Eingang: Wie sich Ihr Service mit anderen Services im Internet oder über Ihre private Verbindung verbindet.

  • Kommunikation von Service zu Service in Snowpark Container Services.

In den folgenden Abschnitten wird erläutert, wie Sie die einzelnen Arten von Netzwerken konfigurieren können.

Konfigurieren des Netzwerkeingangs

Um eine Interaktion mit Ihrem Dienst vom Internet aus zu ermöglichen, deklarieren Sie die Netzwerkports, die von Ihrem Dienst überwacht werden, als Endpunkte in der Dienstspezifikationsdatei. Diese Endpunkte kontrollieren den eingehenden Datenverkehr.

Standardmäßig sind die Dienstendpunkte privat. Nur Dienstfunktionen und die Dienst-zu-Dienst-Kommunikation können Anforderungen an die privaten Endpunkte senden. Sie können einen Endpunkt als öffentlich deklarieren, um Anfragen an einen Endpunkt aus dem Internet zuzulassen. Die Erstellung eines öffentlichen Endpunkts ist eine privilegierte Operation und die Eigentümerrolle des Dienstes muss die Berechtigung BIND SERVICE ENDPOINT für das Konto haben.

endpoints:
- name: <endpoint name>
  port: <port number>
  protocol : < TCP / HTTP >
  public: true
  corsSettings:                  # optional CORS configuration
    Access-Control-Allow-Origin: # required list of allowed origins
      - <origin>                 # for example, "http://example.com"
      - <origin>
        ...
    Access-Control-Allow-Methods: # optional list of HTTP methods
      - <method>
      - <method>
        ...
    Access-Control-Allow-Headers: # optional list of HTTP headers
      - <header-name>
      - <header-name>
        ...
    Access-Control-Expose-Headers: # optional list of HTTP headers
      - <header-name>
      - <header-name>
        ...
Copy

Ein Beispiel dazu finden Sie unter Tutorial 1.

Timeout der eingehenden Verbindung

Eingangsendpunkte haben ein Timeout von 90 Sekunden. Wenn 90 Sekunden lang keine Aktivität bei einer Verbindung zu einem Endpunkt stattfindet, bricht Snowflake die Verbindung ab. Wenn Ihre Anwendung eine längere Konnektivität benötigt, verwenden Sie Polling oder WebSockets.

Eingangs-Webbrowser Authentifizierung Abmeldung

Wenn Sie eine Webanwendung erstellen, die als Dienst ausgeführt wird, haben Sie die Möglichkeit, Benutzern die Abmeldung von Ihrer Anwendung zu ermöglichen, indem Sie sie an /sfc-endpoint/logout weiterleiten.

Nach der Abmeldung muss sich der Benutzer erneut bei Snowflake authentifizieren, um auf den öffentlichen Endpunkt des Dienstes zuzugreifen.

Sicherheit von Eingangsdatenverkehr und Webanwendungen

Sie können einen Snowpark Container Services-Dienst für das Webhosting erstellen, indem Sie die Unterstützung für öffentliche Endpunkte (Netzwerkeingang) nutzen. Für zusätzliche Sicherheit setzt Snowflake einen Proxydienst ein, um eingehende Anforderungen von Clients an Ihren Dienst und ausgehende Antworten von Ihrem Dienst an die Clients zu überwachen. In diesem Abschnitt wird erklärt, was der Proxy tut und wie er sich auf einen Dienst auswirkt, der in Snowpark Container Services bereitgestellt wird.

Bemerkung

Wenn Sie einen Dienst lokal testen, verwenden Sie nicht den Snowflake-Proxy. Daher wird es Unterschiede zwischen der lokalen Ausführung eines Dienstes und der Bereitstellung in Snowpark Container Services geben. Lesen Sie diesen Abschnitt, und aktualisieren Sie Ihre lokalen Einstellungen, um das Testen zu optimieren.

Beispiel:

  • Der Proxy leitet eine eingehende HTTP-Anforderung nicht weiter, wenn die Anforderung eine nicht zulässige HTTP-Methode verwendet.

  • Der Proxy sendet eine 403-Antwort an den Client, wenn der Content-Type-Header in der Antwort angibt, dass die Antwort eine ausführbare Datei enthält.

Darüber hinaus kann der Proxy auch neue Kopfzeilen einfügen und bestehende Kopfzeilen in der Anforderung und der Antwort ändern, wobei Ihr Container und Ihre Datensicherheit berücksichtigt werden.

Beispielsweise könnte Ihr Dienst nach Erhalt einer Anforderung in der Antwort HTML-, JavaScript-, CSS- und andere Inhalte für eine Webseite an den Client-Browser senden. Die Webseite im Browser ist Teil Ihres Dienstes und dient als Benutzerschnittstelle. Wenn Ihr Dienst aus Sicherheitsgründen Einschränkungen unterliegt (z. B. bezüglich des Herstellens von Netzwerkverbindungen zu anderen Standorten), möchten Sie vielleicht auch, dass die Webseite Ihres Dienstes denselben Einschränkungen unterliegt.

Standardmäßig haben Dienste nur begeschränkte Berechtigungen für den Zugriff auf das Internet. Der Browser sollte auch verhindern, dass die Clientanwendung auf das Internet zugreift und möglicherweise in den meisten Fällen Daten freigibt. Wenn Sie eine Integration des externen Zugriffs (EAI) eingerichtet haben, um Ihrem Dienst den Zugriff auf example.com zu ermöglichen (siehe Konfigurieren des Netzwerkausgangs), sollte die Webseite für Ihren Dienst auch über Ihren Browser auf example.com zugreifen können.

Der Snowflake-Proxy wendet dieselben Netzwerkbeschränkungen auf den Dienst und die Webseite an, indem er einen CSP-Header (Content-Security-Policy) in die Antwort einfügt. Standardmäßig fügt der Proxy eine Baseline-CSP in die Antwort ein, um Schutz vor allgemeinen Sicherheitsbedrohungen zu bieten. Bei der Browser-Sicherheit geht es darum, ein Gleichgewicht zwischen Funktionalität und Sicherheit zu finden. Es liegt in der gemeinsamen Verantwortung sicherzustellen, dass diese Basis für Ihren Anwendungsfall geeignet ist. Wenn Ihr Dienst so konfiguriert ist, dass eine EAI verwendet wird, wendet der Proxy außerdem dieselben Netzwerkregeln von der EAI auf die CSP der Webseite an. Diese CSP ermöglicht der Webseite im Browser auf dieselben Standorte zuzugreifen, auf die auch der Dienst zugreifen kann.

Snowflake bietet CORS-Unterstützung, die Sie in der Dienstspezifikation konfigurieren.

Der Snowflake-Proxy gibt die in der Dienstspezifikation definierten CORS-Einstellungen zurück. Beachten Sie, dass der Proxy alle vom Dienst zurückgegebenen CORS-Header entfernt.

Die folgenden CORS-Header sind standardmäßig eingestellt:

  • Access-Control-Expose-Headers-Header meldet immer die folgenden Header-Namen, zusätzlich zu den in der Dienstspezifikation für den Endpunkt konfigurierten Headern.

    • X-Frame-Options

    • Cross-Origin-Opener-Policy

    • Cross-Origin-Resource-Policy

    • X-Content-Type-Options

    • Cross-Origin-Embedder-Policy

    • Content-Security-Policy-Report-Only

    • Content-Security-Policy

  • Access-Control-Max-Age ist auf zwei Stunden eingestellt.

  • Access-Control-Allow-Credentials auf „true“ gesetzt ist.

Außerdem setzt Snowflake den Header Vary mit dem Wert Origin, um dem Browser anzuzeigen, dass der Wert für Access-Control-Allow-Origin je nach dem Wert von Origin unterschiedlich sein kann.

Der Header Authorization ist erforderlich, um die CORS-Anforderung zu erstellen. Sie können ein programmgesteuertes Zugriffstoken angeben (PAT) – in diesem Header (Authorization: "Snowflake Token=\"${patToken}\""). Informationen zum Generieren eines programmgesteuerten Zugriffstokens finden Sie unter Verwenden von programmatische Zugriffstoken für die Authentifizierung.

In den folgenden Abschnitten wird erläutert, wie der Snowflake-Proxy eingehende Anforderungen für Ihren Dienst verarbeitet und die ausgehenden Antworten Ihres Dienstes an die Clients modifiziert.

Beim Dienst eingehende Anforderungen

Wenn eine Anforderung eintrifft, führt der Proxy folgende Schritte aus, bevor er die Anforderung an den Dienst weiterleitet:

  • Eingehende Anforderungen mit nicht zulässigen HTTP-Methoden: Wenn eine eingehende HTTP-Anforderung eine der folgenden nicht zulässigen HTTP-Methoden verwendet, leitet der Proxy die Anforderung nicht an Ihren Dienst weiter:

    • TRACE

    • CONNECT

  • Header-Scrubbing für eingehende Anfragen: Der Snowflake-Proxy entfernt die folgenden Anfrage-Header, falls vorhanden:

    • X-SF-SPCS-Authorization

    • Authorization: Wird nur entfernt, wenn er ein Snowflake-Token enthält; andernfalls wird er an Ihren Dienst weitergeleitet.

An die Clients ausgehende Antworten

Der Snowflake-Proxy wendet diese Änderungen auf die von Ihrem Dienst gesendete Antwort an, bevor er die Antwort an den Client weiterleitet.

  • Header Scrubbing: Der Snowflake-Proxy entfernt diese Antwort-Header, falls vorhanden:

    • X-XSS-Protection

    • Server

    • X-Powered-By

    • Public-Key-Pins

  • CORS Header-Manipulation: Siehe Überlegungen zum Zugriff und CORS.

  • Antwort-Header „Content-Type“: Wenn die Antwort Ihres Dienstes den „Content-Type“-Header mit einem der folgenden Werte des MIME-Typs (der auf eine ausführbare Datei hinweist) enthält, leitet der Snowflake-Proxy diese Antwort nicht an den Client weiter. Stattdessen sendet der Proxy eine 403 Forbidden-Antwort.

    • application/x-msdownload: ausführbare Microsoft-Datei.

    • application/exe: allgemeine ausführbare Datei.

    • application/x-exe: eine weitere allgemeine ausführbare Datei.

    • application/dos-exe: ausführbare DOS-Datei.

    • application/x-winexe: ausführbare Windows-Datei.

    • application/msdos-windows: ausführbare MS-DOS-Windows-Datei.

    • application/x-msdos-program: ausführbare MS-DOS-Datei.

    • application/x-sh: Unix-Shell-Skript.

    • application/x-bsh: Bourne-Shell-Skript.

    • application/x-csh: C-Shell-Skript.

    • application/x-tcsh: Tcsh-Shell-Skript.

    • application/batch: Windows-Batch-Datei.

  • Antwort-Header „X-Frame-Options“: Um Clickjacking-Angriffe zu verhindern, setzt der Snowflake-Proxy diesen Antwort-Header auf DENY und verhindert so, dass andere Webseiten einen iFrame zur Webseite für Ihren Dienst verwenden.

  • Antwort-Header „Cross-Origin-Opener-Policy“ (COOP): Snowflake setzt den COOP-Antwort-Header auf same-origin, um zu verhindern, dass verweisende Cross-Origin-Fenster auf Ihre Dienst-Registerkarte zugreifen.

  • Antwort-Header „Cross-Origin-Resource-Policy“ (CORP): Snowflake setzt den CORP-Header auf same-origin, um zu verhindern, dass externe Websites Ressourcen laden, die vom Eingangsendpunkt bereitgestellt werden (z. B. in einem iFrame).

  • Antwort-Header „X-Content-Type-Options“: Snowflake-Proxy setzt diesen Header auf nosniff, um sicherzustellen, dass die Clients den von Ihrem Dienst in der Antwort angegebenen MIME-Typ nicht ändern.

  • Antwort-Header „Cross-Origin-Embedder-Policy“ (COEP): Snowflake-Proxy setzt den COEP-Antwort-Header auf credentialless, was bedeutet, dass Snowflake beim Laden eines Cross-Origin-Objekts, z. B. eines Images oder eines Skripts, die Anmeldeinformationen nicht sendet, wenn das Remoteobjekt das „Cross-Origin Resource Sharing“ (CORS)-Protokoll nicht unterstützt.

  • Antwort-Header „Content-Security-Policy-Report-Only“: Snowflake-Proxy ersetzt diesen Antwort-Header durch einen neuen Wert, der den Client anweist, die CSP-Berichte an Snowflake zu senden.

  • Antwort-Header „Content-Security-Policy“ (CSP): Standardmäßig fügt der Snowflake-Proxy die folgende Baseline-CSP hinzu, um sich gegen gängige Webangriffe zu schützen.

    default-src 'self' 'unsafe-inline' 'unsafe-eval' blob: data:; object-src 'none'; connect-src 'self'; frame-ancestors 'self';
    
    Copy

    Es gibt zwei Überlegungen zur Inhaltssicherheitsrichtlinie:

    • Zusätzlich zur Baseline-Sicherheitsrichtlinie für Inhalte, die der Proxy hinzufügt, kann der Dienst selbst explizit eine CSP in der Antwort hinzufügen. Ein Dienst könnte sich dafür entscheiden, die Sicherheit durch Hinzufügen einer strengeren CSP zu erhöhen. Ein Dienst könnte zum Beispiel folgendes CSP hinzufügen, um nur Skripte von self zuzulassen.

      script-src 'self'
      
      Copy

      In der Antwort, die an den Client gesendet wird, sind zwei CSP-Header enthalten. Nach Erhalt der Antwort wenden die Client-Browser dann die strengste Inhaltssicherheitsrichtlinie an, die die in den einzelnen Richtlinien angegebenen zusätzlichen Einschränkungen enthält.

    • Wenn Sie eine Integration für den externen Zugriff (EAI) konfigurieren, um Ihrem Dienst den Zugriff auf eine externe Website (Konfigurieren des Netzwerkausgangs) zu ermöglichen, erstellt der Snowflake-Proxy eine CSP, die Ihrer Webseite den Zugriff auf diese Site ermöglicht. Angenommen, eine mit einer EAI verknüpfte Netzwerkregel erlaubt Ihrem Dienst den Ausgangsdatenzugriff auf example.com. Dann fügt der Snowflake-Proxy diesen CSP-Antwort-Header hinzu:

      default-src 'self' 'unsafe-inline' 'unsafe-eval' http://example.com https://example.com blob: data:; object-src 'none'; connect-src 'self' http://example.com https://example.com wss://example.com; frame-ancestors 'self';
      
      Copy

      Die Browser halten sich an die in der Antwort enthaltene Inhaltszugriffsrichtlinie. In diesem Beispiel erlauben die Browser der App den Zugriff auf example.com, aber nicht auf andere Websites.

Überlegungen zum Zugriff und CORS

Standardmäßig verhindern Browser, dass Webanwendungen, die auf einem Server gehostet werden, Anfragen an einen anderen Server mit einem anderen Hostnamen senden. Wenn Sie beispielsweise eine Webanwendung außerhalb von Snowpark Container Services hosten, die mit einem in Snowpark Container Services bereitgestellten Backend-Dienst interagieren muss, gilt diese Einschränkung.

CORS (Cross-Origin Resource Sharing) ermöglicht es einem Snowpark Container Services-Dienst, den Browsern mitzuteilen, dass er Anfragen von Webanwendungen zulässt, die außerhalb seiner Umgebung gehostet werden. Sie können jeden öffentlichen Endpunkt konfigurieren, um festzulegen, wie er sowohl auf CORS Preflight-Anfragen als auch auf Standard-Anfragen reagiert.

Snowflake-Proxy setzt die folgenden Antwort-Header immer außer Kraft:

  • Access-Control-Allow-Origin

  • Access-Control-Allow-Methods

  • Access-Control-Allow-Headers

  • Access-Control-Expose-Headers

  • Access-Control-Max-Age

  • Access-Control-Allow-Credentials

Der Snowflake-Proxy nimmt keinen dieser CORS-Header in die Antwort auf, wenn einer der folgenden Punkte zutrifft:

  • CORS ist nicht für den Dienstendpunkt konfiguriert. Das heißt, es gibt kein corsSettings in der Dienstspezifikation

  • CORS ist für den Dienstendpunkt konfiguriert, aber der Origin-Header in der Anfrage stimmt nicht mit dem angegebenen Feld Access-Control-Allow-Origin in der Dienstspezifikation überein

In der Dienstspezifikation können Sie CORS-Einstellungen für jeden öffentlichen Endpunkt konfigurieren. Wenn der origin-Header in der Anfrage mit dem Feld Access-Control-Allow-Origin übereinstimmt, das in der Spezifikation für den Endpunkt angegeben ist, fügt der Proxy in die Antwort die in der Spezifikation definierten CORS-Header mit den folgenden Anpassungen ein:

  • Access-Control-Allow-Origin: Gibt den Origin-Header der Anfrage zurück.

  • Access-Control-Expose-Headers: Fügt die Liste der erlaubten Header, die Sie konfiguriert haben, mit diesen immer sichtbaren Headern zusammen: X-Frame-Options, Cross-Origin-Opener-Policy, Cross-Origin-Resource-Policy, X-Content-Type-Options, Cross-Origin-Embedder-Policy, Content-Security-Policy-Report-Only, Content-Security-Policy.

  • Access-Control-Max-Age: Ist auf zwei Stunden eingestellt.

  • Access-Control-Allow-Credentials: Ist auf „true“ gesetzt.

Überlegungen zum Zugriff und SSO

Wenn Sie vom Internet aus auf den öffentlichen Endpunkt zugreifen, kann es sein, dass die Authentifizierung mit Benutzername und Kennwort funktioniert, aber SSO zu einer leeren Seite oder dem Fehler führt: „OAuth Clientintegration mit der angegebenen Client-ID wurde nicht gefunden.“

Dies passiert, wenn Sie die alte Methode der föderierten Authentifizierung (SSO) mit Snowflake anstelle der neueren Version der Sicherheitsintegration verwenden, wie unter Konfigurieren von Snowflake für die Verwendung der Verbundauthentifizierung beschrieben. Gehen Sie wie folgt vor, um dies zu überprüfen:

  1. Führen Sie die folgende Abfrage aus:

    SHOW PARAMETERS LIKE 'SAML_IDENTITY_PROVIDER' IN ACCOUNT;
    
    Copy

    Wenn Sie diesen Parameter gesetzt haben, haben Sie zu irgendeinem Zeitpunkt die alte föderierte Authentifizierung verwendet.

  2. Wenn der obige Parameter gesetzt wurde, führen Sie die folgende Abfrage aus, um festzustellen, ob Sie über eine SAML-Sicherheitsintegration verfügen:

    SHOW INTEGRATIONS
      ->> SELECT * FROM $1 WHERE "type" = 'SAML2';
    
    Copy

    Wenn Sie keine Integrationen des Typs SAML2 haben, dann verwenden Sie die alte Methode der föderierten Authentifizierung.

In diesem Fall besteht die Lösung darin, von der alten Methode der föderierten Authentifizierung auf die neue, integrative Methode der föderierten Authentifizierung umzusteigen. Weitere Informationen dazu finden Sie unter Migration zu einer SAML2-Sicherheitsintegration.

Konfigurieren des Netzwerkausgangs

Der Code Ihrer Anwendung erfordert möglicherweise einen Zugang zum Internet. Standardmäßig haben Anwendungscontainer keine Berechtigung für den Zugriff auf das Internet. Sie müssen daher den Internetzugang über Integrationen für den externen Zugriff (External Access Integrations, EAIs) aktivieren.

In der Regel werden EAIs von einem Kontoadministrator erstellt, um den von Diensten (einschließlich Jobdiensten) erlaubten externen Zugriff zu verwalten. Kontoadministratoren können dann die Berechtigung zur EAI-Nutzung bestimmten Rollen zuweisen, die Entwickler zum Ausführen von Diensten verwenden.

Im folgenden Beispiel werden die Schritte zum Erstellen einer EAI beschrieben, die ausgehenden Datenverkehr zu bestimmten Zielen zulässt, die mithilfe von Netzwerkregeln spezifiziert werden. Sie können sich dann auf diese EAI beziehen, wenn Sie einen Dienst erstellen, um Anforderungen an bestimmte Internetziele zuzulassen.

Beispiel

Angenommen, Sie möchten, dass Ihr Anwendungscode Anforderungen an die folgenden Ziele sendet:

  • HTTPS-Anforderung an translation.googleapis.com

  • HTTP- und HTTPS-Anforderung an google.com

Führen Sie die folgenden Schritte aus, damit Ihr Dienst auf diese Domänen im Internet zugreifen kann:

  1. Erstellen Sie eine Integration für den externen Zugriff (EAI). Dafür sind die entsprechenden Berechtigungen erforderlich. Sie können zum Beispiel die Rolle ACCOUNTADMIN verwenden, um eine EAI zu erstellen. Dies ist ein zweistufiger Prozess:

    1. Verwenden Sie den Befehl CREATE NETWORK RULE, um eine oder mehrere Netzwerkregeln für den ausgehenden Datenverkehr zu erstellen, wobei in den Regeln die externen Ziele aufgeführt sind, für die Sie den Zugriff erlauben möchten. Sie können benötigen für dieses Beispiel normalerweise nur eine Netzwerkregel, aber zur Veranschaulichung erstellen wir hier zwei Netzwerkregeln:

      1. Erstellen Sie eine Netzwerkregel namens translate_network_rule.

        CREATE OR REPLACE NETWORK RULE translate_network_rule
          MODE = EGRESS
          TYPE = HOST_PORT
          VALUE_LIST = ('translation.googleapis.com');
        
        Copy

        Diese Regel erlaubt TCP-Verbindungen zum Ziel translation.googleapis.com. Die Domäne in der Eigenschaft VALUE_LIST gibt keine optionale Portnummer an, sodass der Standardport 443 (HTTPS) angenommen wird. Dadurch kann Ihre Anwendung eine Verbindung zu jeder URL herstellen, die mit https://translation.googleapis.com/ beginnt.

      2. Erstellen Sie eine Netzwerkregel namens google_network_rule.

        CREATE OR REPLACE NETWORK RULE google_network_rule
          MODE = EGRESS
          TYPE = HOST_PORT
          VALUE_LIST = ('google.com:80', 'google.com:443');
        
        Copy

        Dadurch kann Ihre Anwendung eine Verbindung zu jeder URL herstellen, die mit http://google.com/ oder https://google.com/ beginnt.

      Bemerkung

      Für den Parameter VALUE_LIST müssen Sie einen vollständigen Hostnamen angeben. Platzhalter (z. B. *.googleapis.com) werden nicht unterstützt.

      Snowpark Container Services unterstützt nur die Netzwerkregeln, die die Ports 22, 80, 443 und 1024+ erlauben. Wenn eine referenzierte Netzwerkregel den Zugriff auf andere Ports zulässt, schlägt das Erstellen des Dienstes fehl. Wenden Sie sich an Ihren Kundenbetreuer, wenn Sie zusätzliche Ports benötigen.

      Bemerkung

      Damit Ihr Dienst HTTP- oder HTTPS-Anforderungen an ein beliebiges Ziel im Internet senden kann, geben Sie in der VALUE_LIST-Eigenschaft „0.0.0.0“ als Domäne an. Die folgende Netzwerkregel erlaubt es, sowohl „HTTP“- als auch „HTTPS“-Anforderungen an beliebige Ziele im Internet zu senden. Mit „0.0.0.0“ werden nur die Ports 80 oder 443 unterstützt.

      CREATE NETWORK RULE allow_all_rule
        TYPE = 'HOST_PORT'
        MODE= 'EGRESS'
        VALUE_LIST = ('0.0.0.0:443','0.0.0.0:80');
      
      Copy
    2. Erstellen Sie eine Integration für den externe Zugriff (EAI), die festlegt, dass die beiden obigen Netzwerkregeln für ausgehenden Datenverkehr zulässig sind:

      CREATE EXTERNAL ACCESS INTEGRATION google_apis_access_integration
        ALLOWED_NETWORK_RULES = (translate_network_rule, google_network_rule)
        ENABLED = true;
      
      Copy

      Nun kann der Kontoadministrator Entwicklern die Nutzung (USAGE) der Integration gestatten, damit diese einen Dienst ausführen können, der auf bestimmte Ziele im Internet zugreifen kann.

      GRANT USAGE ON INTEGRATION google_apis_access_integration TO ROLE test_role;
      
      Copy
  2. Erstellen Sie den Dienst durch Angabe der EAI wie in den folgenden Beispielen gezeigt. Die Eigentümerrolle, die den Dienst erstellt, benötigt die Berechtigung USAGE für die EAI und die Berechtigung READ für die referenzierten Geheimnisse. Beachten Sie, dass Sie mit der Rolle ACCOUNTADMIN keine Dienste erstellen können.

    • Erstellen Sie einen Dienst:

      USE ROLE test_role;
      
      CREATE SERVICE eai_service
        IN COMPUTE POOL MYPOOL
        EXTERNAL_ACCESS_INTEGRATIONS = (GOOGLE_APIS_ACCESS_INTEGRATION)
        FROM SPECIFICATION
        $$
        spec:
          containers:
            - name: main
              image: /db/data_schema/tutorial_repository/my_echo_service_image:tutorial
              env:
                TEST_FILE_STAGE: source_stage/test_file
              args:
                - read_secret.py
          endpoints:
            - name: read
              port: 8080
        $$;
      
      Copy

      Diese CREATE SERVICE-Beispielanforderung verwendet eine Inline-Dienstspezifikation und gibt die optionale Eigenschaft EXTERNAL_ACCESS_INTEGRATIONS an, um die EAI einzuschließen. Die EAI gibt die Netzwerkregeln an, die den ausgehenden Datenverkehr vom Dienst zu den spezifischen Zielen erlauben.

    • Führen Sie einen Jobdienst aus:

      EXECUTE JOB SERVICE
        IN COMPUTE POOL tt_cp
        NAME = example_job_service
        EXTERNAL_ACCESS_INTEGRATIONS = (GOOGLE_APIS_ACCESS_INTEGRATION)
        FROM SPECIFICATION $$
        spec:
          container:
          - name: curl
            image: /tutorial_db/data_schema/tutorial_repo/alpine-curl:latest
            command:
            - "curl"
            - "http://google.com/"
        $$;
      
      Copy

      Dieser EXECUTE JOB SERVICE-Beispielbefehl gibt die Inline-Spezifikation und die optionale Eigenschaft EXTERNAL_ACCESS_INTEGRATIONS an, um die EAI einzuschließen. Dadurch wird der ausgehende Datenverkehr vom Job zu den in den Netzwerkregeln angegebenen Zielen zugelassen, die die EAI zulässt.

Netzwerkausgang über private Konnektivität

Anstatt den Netzwerkausgag über das öffentliche Internet zu routen, können Sie sich dafür entscheiden, den Ausgangverkehr Ihres Dienstes über einen privaten Konnektivitätsendpunkt zu leiten.

Zunächst müssen Sie den privaten Konnektivitätsendpunkt in Ihrem Snowflake-Konto erstellen. Konfigurieren Sie dann eine Netzwerkregel, um den ausgehenden Datenverkehr über die private Konnektivität zuzulassen. Der Prozess zur Einrichtung einer External Access Integration (EAI) bleibt derselbe wie im vorangegangenen Abschnitt beschrieben.

Bemerkung

Private Kommunikation erfordert, dass sowohl Snowflake als auch das Cloud-Konto des Kunden denselben Cloudanbieter und dieselbe Region verwenden.

Wenn Sie zum Beispiel den ausgehenden Internetzugang Ihres Dienstes zu einem Amazon S3-Bucket über private Konnektivität aktivieren möchten, gehen Sie wie folgt vor:

  1. Aktivieren Sie die private Link-Konnektivität für den selbstverwalteten Endpunktdienst (Amazon S3). Eine Schritt-für-Schritt-Anleitung finden Sie unter AWS Private Link for Amazon S3.

  2. Rufen Sie die Systemfunktion SYSTEM$PROVISION_PRIVATELINK_ENDPOINT auf, um einen privaten Konnektivitätsendpunkt in Ihrem Snowflake-VNet bereitzustellen. Dadurch kann Snowflake über private Konnektivität eine Verbindung zum externen Dienst (in diesem Beispiel Amazon S3) herstellen.

    USE ROLE ACCOUNTADMIN;
    
    SELECT SYSTEM$PROVISION_PRIVATELINK_ENDPOINT(
      'com.amazonaws.us-west-2.s3',
      '*.s3.us-west-2.amazonaws.com'
    );
    
    Copy
  3. Genehmigen Sie den Endpunkt im Konto des Cloudanbieters. In diesem Beispiel für Amazon AWS, siehe Verbindungsanfragen annehmen oder ablehnen in der AWS-Dokumentation. Um den Endpunkt in Azure zu genehmigen, lesen Sie auch die Azure-Dokumentation.

  4. Verwenden Sie den Befehl CREATE NETWORK RULE, um eine Netzwerkegel für den ausgehenden Datenverkehr zu erstellen, in der Sie die externen Ziele angeben, für die Sie den Zugriff erlauben möchten.

    CREATE OR REPLACE NETWORK RULE private_link_network_rule
      MODE = EGRESS
      TYPE = PRIVATE_HOST_PORT
      VALUE_LIST = ('<bucket-name>.s3.us-west-2.amazonaws.com');
    
    Copy

    Der Parameters TYPE ist auf PRIVATE_HOST_PORT eingestellt. Er zeigt an, dass die Netzwerkregel den ausgehenden Datenverkehr über die private Konnektivität zulässt.

  5. Die übrigen Schritte zur Erstellung eines EAI und dessen Verwendung zur Erstellung eines Dienstes sind die gleichen wie im vorangegangenen Abschnitt (siehe Konfigurieren des Netzwerkausgangs) erklärt.

Weitere Informationen zur Arbeit mit privaten Konnektivitätsendpunkten finden Sie unter:

Konfigurieren der Netzwerkkommunikation zwischen Containern

Es gibt zwei Konzepte:

  • Kommunikation zwischen Containern einer Dienstinstanz: Wenn eine Dienstinstanz mehrere Container ausführt, können diese Container über „localhost“ miteinander kommunizieren (es ist nicht erforderlich, in der Dienstspezifikation Endpunkte zu definieren).

  • Kommunikation zwischen Containern verschiedener Dienste oder mehrerer Dienstinstanzen: Container, die zu verschiedenen Diensten (oder verschiedenen Instanzen desselben Dienstes) gehören, können über Endpunkte kommunizieren, die in Spezifikationsdateien definiert sind. Weitere Informationen dazu finden Sie unter Dienst-zu-Dienst-Kommunikation.