Tutoriel 5 : Configurer et tester les privilèges des points de terminaison de service¶
Introduction¶
Dans le tutoriel 1, vous utilisez le même rôle pour créer et tester un service. Le rôle qui crée le service est le rôle propriétaire du service, vous pouvez donc communiquer avec le service en utilisant ce rôle.
Dans ce tutoriel, vous explorerez l’utilisation d’un rôle différent pour communiquer avec le service.
Vous accordez à ce rôle le privilège USAGE à l’aide d’un rôle de service que vous définissez dans la spécification du service.
Dans ce tutoriel, vous modifiez le tutoriel 1 comme suit :
Créez un nouveau rôle que vous utiliserez pour communiquer avec le service.
Modifiez la spécification du service comme suit :
Définissez deux points de terminaison, au lieu d’un seul. Notez que le deuxième point de terminaison n’est ajouté que pour démontrer le fonctionnement des autorisations des points de terminaison.
Définissez un rôle de service autorisé à accéder à un seul des deux points de terminaison.
Attribuez le rôle de service au nouveau rôle que vous avez créé pour permettre l’accès à l’un des points de terminaison de service.
Utilisez le nouveau rôle pour communiquer avec le point de terminaison de service.
Préparer¶
Suivez Configuration commune avec les modifications suivantes :
Complétez les étapes de la configuration commune.
En utilisant le rôle ACCOUNTADMIN, exécutez le script suivant pour créer un autre rôle (
service_function_user_role
), en remplaçantuser_name
par le nom de votre utilisateur Snowflake. Après avoir créé le service echo, vous utilisez ce rôle pour communiquer avec le service.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;
Suivez le tutoriel 1, étapes 1 et 2, pour créer et télécharger une image dans un référentiel de votre compte. Ne passez pas à l’étape 3 car vous allez créer le service dans le cadre de ce tutoriel.
Créez un service¶
Pour vous assurer que vous êtes dans le bon contexte pour les instructions SQL dans cette étape, exécutez ce qui suit :
USE ROLE test_role; USE DATABASE tutorial_db; USE SCHEMA data_schema; USE WAREHOUSE tutorial_warehouse;
Pour créer le service, exécutez la commande suivante en utilisant
test_role
(le rôle de propriétaire du service).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 $$;
Conformément à la spécification en ligne,
echo_service
expose deux points de terminaison publics, mais le rôle de service (echoendpoint_role
) n’accorde le privilège à USAGE que sur l’un des points de terminaison.Vérifiez que le service fonctionne.
SHOW SERVICES; SELECT SYSTEM$GET_SERVICE_STATUS('echo_service'); DESCRIBE SERVICE echo_service;
En utilisant
test_role
(le rôle de propriétaire du service), accordez le rôle de service défini dans la spécification au nouveau rôle (service_function_user_role
) que vous avez créé dans le cadre de la configuration commune. Accordez aussi les privilèges USAGE sur la base de données et le schéma.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;
Ce rôle de service accorde le privilège
service_function_user_role
USAGE sur le point de terminaisonechoendpoint
.Pour démontrer que le nom du rôle de service n’est pas sensible à la casse, l’exemple utilise le nom de rôle
echoendpoint_Role
.
Utilisez le service¶
Créez une fonction de service pour communiquer avec le service. Vous créez une fonction de service à l’aide de service_function_user_role
(et non du rôle de propriétaire du service) et vous utilisez le service.
Créez une fonction de service.
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';
Essayez de créer une autre fonction de service faisant référence au point de terminaison
echoservice2
pour lequel le rôle ne dispose d’aucun privilège d’accès. Par conséquent, la commande devrait échouer.CREATE OR REPLACE FUNCTION my_echo_udf_try2 (InputText varchar) RETURNS varchar SERVICE=echo_service ENDPOINT=echoendpoint2 AS '/echo';
Utilisez la fonction de service.
SELECT my_echo_udf_try1('Hello');
Nettoyage¶
Pour supprimer les ressources que vous avez créées, suivez les étapes décrites dans Tutoriel 1 pour nettoyer les autres ressources créées dans le tutoriel 1.
Quelle est la prochaine étape ?¶
Maintenant que vous avez terminé ce tutoriel, vous pouvez retourner à Travailler avec les services pour explorer d’autres sujets.