Tutorial 5: Berechtigungen für Dienstendpunkte konfigurieren und testen

Einführung

In Tutorial 1 verwenden Sie dieselbe Rolle, um einen Dienst zu erstellen und zu testen. Die Rolle, mit der der Dienst erstellt wird, ist die Eigentümerrolle des Dienstes, sodass Sie über diese Rolle mit dem Dienst kommunizieren können.

In diesem Tutorial lernen Sie, wie Sie eine andere Rolle für die Kommunikation mit dem Dienst verwenden.

Sie erteilen dieser Rolle die Berechtigung USAGE mittels einer Dienstrolle, die Sie in der Dienstspezifikation definieren.

In diesem Tutorial ändern Sie Tutorial 1 wie folgt:

  1. Erstellen Sie eine neue Rolle, die Sie für die Kommunikation mit dem Dienst verwenden werden.

  2. Ändern Sie die Dienstspezifikation wie folgt:

    • Definieren Sie zwei Endpunkte anstelle von nur einem Endpunkt. Beachten Sie, dass der zweite Endpunkt nur hinzugefügt wurde, um zu demonstrieren, wie Endpunktberechtigungen funktionieren.

    • Definieren Sie eine Dienstrolle, die nur auf einen der beiden Endpunkte zugreifen darf.

  3. Weisen Sie die Dienstrolle der neuen Rolle zu, die Sie erstellt haben, um den Zugriff auf einen der Dienstendpunkte zu ermöglichen.

  4. Verwenden Sie die neue Rolle, um mit dem Dienstendpunkt zu kommunizieren.

Vorbereitung

Führen Sie die grundlegende Einrichtung mit den folgenden Modifikationen aus:

  1. Führen Sie die grundlegenden Einrichtungsschritte aus.

  2. Führen Sie mit der Rolle ACCOUNTADMIN das folgende Skript zum Erstellen einer weiterer Rolle (service_function_user_role) aus, wobei Sie user_name durch den Namen Ihres Snowflake-Benutzers ersetzen. Nachdem Sie den Echo-Dienst erstellt haben, verwenden Sie diese Rolle, um mit dem Dienst zu kommunizieren.

    USE ROLE ACCOUNTADMIN;
    CREATE ROLE service_function_user_role;
    GRANT ROLE service_function_user_role TO USER <user-name>;
    GRANT USAGE ON WAREHOUSE tutorial_warehouse TO ROLE service_function_user_role;
    
    Copy
  3. Führen Sie von Tutorial 1 die Schritte 1 und 2 aus, um ein Image zu erstellen und es in ein Repository Ihres Kontos hochzuladen. Fahren Sie nicht mit Schritt 3 fort, da Sie den Dienst im Rahmen dieses Tutorials erstellen werden.

Dienst erstellen

  1. Um sicherzustellen, dass Sie sich in diesem Schritt im korrekten Kontext für die SQL-Anweisungen befinden, führen Sie Folgendes aus:

    USE ROLE test_role;
    USE DATABASE tutorial_db;
    USE SCHEMA data_schema;
    USE WAREHOUSE tutorial_warehouse;
    
    Copy
  2. Um den Dienst zu erstellen, führen Sie mit der Rolle test_role (die Eigentümerrolle des Dienstes) den folgenden Befehl aus:

    CREATE SERVICE echo_service
      IN COMPUTE POOL tutorial_compute_pool
      FROM SPECIFICATION $$
        spec:
          containers:
          - name: echo
            image: /tutorial_db/data_schema/tutorial_repository/my_echo_service_image:latest
            env:
              SERVER_PORT: 8000
              CHARACTER_NAME: Bob
            readinessProbe:
              port: 8000
              path: /healthcheck
          endpoints:
          - name: echoendpoint
            port: 8000
            public: true
          - name: echoendpoint2
            port: 8002
            public: true
        serviceRoles:
        - name: echoendpoint_role
          endpoints:
          - echoendpoint
          $$;
    
    Copy

    Gemäß der Inline-Spezifikation stellt echo_service zwei öffentliche Endpunkte zur Verfügung, aber die Dienstrolle (echoendpoint_role) erteilt nur einem der Endpunkte die USAGE-Berechtigung.

  3. Überprüfen Sie, ob der Dienst ausgeführt wird.

    SHOW SERVICES;
    SELECT SYSTEM$GET_SERVICE_STATUS('echo_service');
    DESCRIBE SERVICE echo_service;
    
    Copy
  4. Weisen Sie mit test_role (die Eigentümerrolle des Dienstes) der neuen Rolle (service_function_user_role), die Sie im Rahmen der grundlegenden Einrichtung erstellt haben, die Dienstrolle zu, die in der Spezifikation definiert ist. Erteilen Sie außerdem USAGE-Berechtigungen für Datenbank und Schema zu.

    USE ROLE test_role;
    USE DATABASE tutorial_db;
    USE SCHEMA data_schema;
    
    GRANT USAGE ON DATABASE tutorial_db TO ROLE service_function_user_role;
    GRANT USAGE ON SCHEMA data_schema TO ROLE service_function_user_role;
    GRANT SERVICE ROLE echo_service!echoendpoint_Role TO ROLE service_function_user_role;
    
    Copy

    Diese Dienstrolle erteilt der Rolle service_function_user_role die USAGE-Berechtigung für den Endpunkt echoendpoint.

    Um zu demonstrieren, dass beim Namen der Dienstrolle die Groß-/Kleinschreibung nicht beachtet wird, verwendet das Beispiel den Rollennamen echoendpoint_Role.

Dienst verwenden

Dienstfunktion für die Kommunikation mit dem Dienst bereitstellen Sie erstellen eine Dienstfunktion unter Verwendung der service_function_user_role (nicht der Eigentümerrolle des Dienstes) und verwenden den Dienst.

  1. Erstellen Sie eine Dienstfunktion.

    USE ROLE service_function_user_role;
    CREATE OR REPLACE FUNCTION my_echo_udf_try1 (InputText VARCHAR)
      RETURNS varchar
      SERVICE=echo_service
      ENDPOINT=echoendpoint
      AS '/echo';
    
    Copy
  2. Versuchen Sie, eine weitere Dienstfunktion zu erstellen, die auf den Endpunkt echoservice2 verweist, für den die Rolle kein Zugriffsrecht hat. Daher sollte der Befehl fehlschlagen.

    CREATE OR REPLACE FUNCTION my_echo_udf_try2 (InputText varchar)
      RETURNS varchar
      SERVICE=echo_service
      ENDPOINT=echoendpoint2
      AS '/echo';
    
    Copy
  3. Verwenden Sie die Dienstfunktion.

    SELECT my_echo_udf_try1('Hello');
    
    Copy

Bereinigen

Um die von Ihnen erstellten Ressourcen zu entfernen, führen Sie die Schritte in Tutorial 1 aus, um andere in Tutorial 1 erstellte Ressourcen zu bereinigen.

Nächste Schritte

Nachdem Sie nun dieses Tutorial abgeschlossen haben, können Sie zu Verwenden von Diensten zurückkehren, um weitere Themen zu erkunden.