Création d’une interface utilisateur pour demander des privilèges et des références

Cette rubrique décrit comment créer une interface utilisateur à l’aide de Streamlit et de Snowsight pour permettre aux consommateurs d’accorder des privilèges et de créer des références pour une Snowflake Native App installée. Snowflake Native App Framework fournit le Python Permission SDK qui permet aux fournisseurs d’intégrer des demandes pour le consommateur à l’aide d’une application Streamlit.

À propos des privilèges et des références

Pour des informations générales sur la demande de privilèges et de références auprès du consommateur à l’aide du Snowflake Native App Framework, reportez-vous à Demander l’accès aux objets d’un compte de consommateur.

À propos des Python Permission SDK

Snowflake Native App Framework fournit les Python Permission SDK qui permettent à un fournisseur d’effectuer les opérations suivantes à l’intérieur d’une Snowflake Native App :

  • Vérifier les privilèges au niveau du compte.

  • Demander les privilèges globaux qui sont répertoriés dans le fichier manifeste.

  • Demander des références à des objets et aux privilèges correspondants au niveau de l’objet, tels qu’ils sont définis dans le fichier manifeste.

  • Demander des actions privilégiées, par exemple la création d’une intégration d’API ou la création d’un partage.

À l’aide des Python Permission SDK, Snowsight affiche les demandes d’accès dans l’onglet Security de l”Snowflake Native App installée.

Workflow de création d’une interface pour approuver les privilèges et lier les références

Le workflow général suivant décrit les étapes nécessaires à la mise en œuvre d’une application Streamlit pour demander des attributions de privilèges et de références au consommateur.

  1. Créer un paquet d’application.

  2. Dans le fichier manifeste, spécifiez les privilèges et définissez les références nécessaires à l”Snowflake Native App.

  3. Ajouter une application Streamlit à votre paquet d’application.

  4. Ajoutez un fichier environment.yml à votre paquet d’application.

    Note

    Le fichier environment.yml doit se trouver dans le même répertoire que le fichier principal Streamlit utilisé pour implémenter l’interface Snowsight.

  5. Ajouter la bibliothèque snowflake-native-apps-permission comme dépendance.

  6. Importez la bibliothèque snowflake.permissions dans votre application Streamlit.

  7. Ajoutez à votre application Streamlit des fonctions qui appellent les fonctions fournies par le SDK.

Ajouter le Python Permission SDK à un environnement Streamlit

Pour utiliser les Python Permission SDK dans une application Streamlit, ajoutez le paquet snowflake-native-apps-permission en tant que dépendance dans votre fichier environment.yml comme indiqué dans l’exemple suivant :

name: sf_env
channels:
- snowflake
dependencies:
- snowflake-native-apps-permission
Copy

Importer le Python Permission SDK dans une application Streamlit

Pour importer les Python Permission SDK dans votre application Streamlit, incluez l’instruction d’importation suivante dans votre application :

import snowflake.permissions as permissions;
Copy

Demander des privilèges du consommateur

Les exemples suivants montrent comment effectuer différentes tâches à l’aide des Python Permission SDK.

Vérifier des privilèges au niveau du compte

Cet exemple montre comment utiliser la méthode get_held_account_privileges() de l’API d’autorisations pour vérifier si les autorisations déclarées dans le fichier manifeste sont accordées à l”Snowflake Native App installée.

Par exemple, si une Snowflake Native App doit créer une base de données en dehors de l’objet APPLICATION, un fournisseur peut définir la référence dans le fichier manifeste comme suit :

privileges:
- CREATE DATABASE:
    description: "Creation of ingestion (required) and audit databases"
Copy

À l’aide des Python Permission SDK, vous pouvez utiliser la méthode get_held_account_privileges() pour obtenir une liste des privilèges qui ont été accordés à l”Snowflake Native App.

import streamlit as st
import snowflake.permissions as permissions
...
if not permissions.get_held_account_privileges(["CREATE DATABASE"]):
    st.error("The app needs CREATE DB privilege to replicate data")
Copy

Cet exemple appelle la fonction get_held_account_privileges() en transmettant comme paramètre l’autorisation CREATE DATABASE. Un fournisseur peut utiliser la fonction get_held_account_privileges() pour répondre de manière appropriée jusqu’à ce que le consommateur accorde les privilèges requis à l”Snowflake Native App.

Note

Seuls les privilèges définis dans le fichier manifeste sont des arguments valables pour get_held_account_privileges(). La transmission d’autres arguments entraîne une erreur.

Demander des actions privilégiées du consommateur

Les fournisseurs peuvent utiliser les Python Permission SDK pour demander des actions privilégiées requises par l”Snowflake Native App.

Par exemple, pour demander une intégration d’API qui permet à l”Snowflake Native App de se connecter à une instance ServiceNow, un fournisseur doit définir l’intégration d’API dans le fichier manifeste :

references:
- servicenow_api_integration:
  label: "API INTEGRATION for ServiceNow communication"
  description: "An integration required in order to support extraction and visualization of ServiceNow data."
  privileges:
    - USAGE
  object_type: API Integration
  register_callback: config.register_reference
Copy

Ensuite, dans l’application Streamlit, le fournisseur appelle la méthode request_reference(<ref_name>) pour demander le privilège USAGE sur l’intégration d’API, comme le montre l’exemple suivant :

permissions.request_reference("servicenow_api_integration")
Copy

Référence Python Permission SDK

Le tableau suivant répertorie les fonctions fournies dans le module snowflake.permissions par les Python Permission SDK :

Méthode

Description

request_account_privileges(privileges: [str])

Demande des privilèges du consommateur spécifié par un tableau de chaînes transmis à la fonction qui contient les privilèges. Les privilèges spécifiés doivent être répertoriés dans le fichier manifeste.

request_reference(reference: str)

Demande une référence au consommateur spécifié par la chaîne transmise à la fonction. La référence transmise à la fonction doit être définie dans le fichier manifeste. Reportez-vous à Types d’objets et privilèges qu’une référence peut contenir pour connaître les objets qui peuvent être inclus dans une référence et les privilèges qui leur sont associés.

request_aws_api_integration(id: str, allowed_prefixes: [str], gateway: AwsGateway, aws_role_arn: str, api_key: str = None, name: str = None, comment: str = None)

Demande au consommateur une intégration d’API pour Amazon API Gateway. Le paramètre id doit être le nom de l’intégration d’API définie dans le fichier manifeste.

AwsGateway peut prendre les valeurs suivantes :

  • permissions.AwsGateway.API_GATEWAY

  • permissions.AwsGateway.PRIVATE_API_GATEWAY

  • permissions.AwsGateway.GOV_API_GATEWAY

  • permissions.AwsGateway.GOV_PRIVATE_API_GATEWAY

Reportez-vous à CREATE API INTEGRATION pour obtenir des informations sur les autres paramètres.

request_azure_api_integration(id: str, allowed_prefixes: [str], tenant_id: str, application_id: str, api_key: str = None, name: str = None, comment: str = None)

Demande au consommateur une intégration d’API pour la gestion des API Azure. Le paramètre id doit être le nom de l’intégration d’API définie dans le fichier manifeste. Reportez-vous à CREATE API INTEGRATION pour obtenir des informations sur les autres paramètres.

request_google_api_integration(id: str, allowed_prefixes: [str], audience: str, name: str = None, comment: str = None)

Demande au consommateur une intégration d’API pour Google Cloud API Gateway. Le paramètre id doit être le nom de l’intégration d’API définie dans le fichier manifeste. Reportez-vous à CREATE API INTEGRATION pour obtenir des informations sur les autres paramètres.

get_held_account_privileges(privilege_names: [str]) -> [str]

Renvoie un tableau contenant les privilèges qui ont été accordés à l”Snowflake Native App sur la base du tableau de privilèges transmis à la fonction.

get_missing_account_privileges(privilege_names: [str]) -> [str]

Renvoie un tableau contenant les privilèges qui n’ont pas été accordés à l”Snowflake Native App sur la base du tableau de privilèges transmis à la fonction.

get_reference_associations(reference_name: str) -> [str]

Renvoie un tableau contenant une liste de références à un objet, spécifié par un paramètre de la fonction qui a été associée à l”Snowflake Native App.