Erstellen einer Benutzeroberfläche zum Anfordern von Berechtigungen und Referenzen

Unter diesem Thema wird beschrieben, wie Sie mit Streamlit und Snowsight eine Benutzeroberfläche erstellen, über die Verbraucher für eine installierte Snowflake Native App Berechtigungen erteilen und Referenzen erstellen können. Die Snowflake Native App Framework stellt die Python Permission SDK zur Verfügung, die es Anbietern ermöglicht, Anfragen für den Verbraucher über eine Streamlit-App einzubetten.

Allgemeine Informationen zu Berechtigungen und Referenzen

Allgemeine Informationen zum Anfordern von Berechtigungen und Referenzen beim Verbraucher mit dem Snowflake Native App Framework finden Sie unter Anfragen des Zugriffs auf Objekte in einem Verbraucherkonto.

Allgemeine Informationen zum Python Permission SDK

Das Snowflake Native App Framework stellt die Python Permission SDK zur Verfügung, die es einem Anbieter ermöglicht, innerhalb einer Snowflake Native App Folgendes zu tun:

  • Prüfen der Berechtigungen auf Kontoebene

  • Anfordern der globalen Berechtigungen, die in der Manifest-Datei aufgeführt sind

  • Anfordern der Referenzen auf Objekte und der entsprechenden Berechtigungen auf Objektebene, die in der Manifest-Datei definiert sind

  • Anfordern von berechtigungsabhängigen Aktionen, z. B. das Erstellen einer API-Integration oder das Erstellen einer Freigabe.

Bei Verwendung der Python Permission SDK zeigt Snowsight die Zugriffsanforderungen auf der Registerkarte Security der installierten Snowflake Native App an.

Workflow für das Erstellen einer Schnittstelle zum Erteilen von Berechtigungen und zum Binden von Referenzen

Der folgende allgemeine Workflow beschreibt die Schritte, die erforderlich sind, um eine Streamlit-App zu implementieren, über die Berechtigungen und Referenzen beim Verbraucher angefordert werden.

  1. Erstellen eines Anwendungspakets

  2. Geben Sie in der Manifest-Datei die Berechtigungen und die von der Snowflake Native App benötigten Referenzen an.

  3. Fügen Sie eine Streamlit-App zu Ihrem Anwendungspaket hinzu.

  4. Fügen Sie eine environment.yml-Datei zu Ihrem Anwendungspaket hinzu.

    Bemerkung

    Die Datei environment.yml muss sich im selben Verzeichnis befinden wie die Streamlit-Hauptdatei, die zum Implementieren der Snowsight-Schnittstelle verwendet wird.

  5. Fügen Sie die Bibliothek snowflake-native-apps-permission als Abhängigkeit hinzu.

  6. Importieren Sie die Bibliothek snowflake.permissions in Ihre Streamlit-App.

  7. Fügen Sie Ihrer Streamlit-App Funktionen hinzu, die die vom SDK bereitgestellten Funktionen aufrufen.

Hinzufügen der Python Permission SDK zu Ihrer Streamlit-Umgebung

Um die Python Permission SDK in Ihrer Streamlit-App verwenden zu können, fügen Sie das Paket snowflake-native-apps-permission als Abhängigkeit in die Datei environment.yml ein, wie im folgenden Beispiel gezeigt:

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

Importieren Sie die Python Permission SDK in Ihre Streamlit-App.

Um die Python Permission SDK in Ihre Streamlit-App zu importieren, fügen Sie die folgende Import-Anweisung in Ihre App ein:

import snowflake.permissions as permissions;
Copy

Anfordern von Berechtigungen vom Verbraucher

Die folgenden Beispiele zeigen, wie Sie verschiedene Aufgaben mithilfe der Python Permission SDK ausführen können.

Prüfen der Berechtigungen auf Kontoebene

Dieses Beispiel zeigt, wie Sie mit der Methode get_held_account_privileges() der Permissions-API überprüfen können, ob der installierten Snowflake Native App die in der Manifest-Datei deklarierten Berechtigungen erteilt wurden.

Wenn eine Snowflake Native App beispielsweise eine Datenbank außerhalb des APPLICATION-Objekts erstellen muss, kann ein Anbieter die Referenz in der Manifest-Datei wie folgt definieren:

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

Mit der Python Permission SDK können Sie die Methode get_held_account_privileges() verwenden, um eine Liste der Berechtigungen zu erhalten, die der Snowflake Native App erteilt wurden.

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

In diesem Beispiel wird die Funktion get_held_account_privileges() aufgerufen, wobei die Berechtigung CREATE DATABASE als Parameter übergeben wird. Ein Anbieter kann die Funktion get_held_account_privileges() verwenden, um so lange angemessen reagieren zu können, bis der Verbraucher die erforderlichen Berechtigungen für die Snowflake Native App erteilt hat.

Bemerkung

Nur die in der Manifest-Datei definierten Berechtigungen sind gültige Argumente für get_held_account_privileges(). Die Übergabe anderer Argumente führt zu einem Fehler.

Anfordern von berechtigungsabhängigen Aktionen vom Verbraucher

Anbieter können die Python Permission SDK verwenden, um die von der Snowflake Native App benötigten berechtigungsabhängigen Aktionen anzufordern.

Um beispielsweise eine API-Integration anzufordern, die es der Snowflake Native App ermöglicht, eine Verbindung zu einer ServiceNow-Instanz herzustellen, würde ein Anbieter die API-Integration in der Manifest-Datei definieren:

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

Als Nächstes ruft der Anbieter in der Streamlit-App die Methode request_reference(<Name_der_Referenz>) auf, um die Berechtigung USAGE für die API-Integration anzufordern, wie im folgenden Beispiel gezeigt:

permissions.request_reference("servicenow_api_integration")
Copy

Python Permission SDK-Referenz

In der folgenden Tabelle sind die Funktionen aufgeführt, die vom snowflake.permissions-Modul von der Python Permission SDK bereitstellt werden:

Methode

Beschreibung

request_account_privileges(privileges: [str])

Fordert Berechtigungen vom Verbraucher an, die durch ein an die Funktion übergebenes String-Array, das die Berechtigungen enthält, angegeben werden. Die angegebenen Berechtigungen müssen in der Manifest-Datei aufgeführt sein.

request_reference(reference: str)

Fordert eine Referenz von dem Verbraucher an, der durch die an die Funktion übergebene Zeichenfolge angegeben ist. Die Referenz, die an die Funktion übergeben wird, muss in der Manifest-Datei definiert sein. Weitere Informationen zu den Objekten, die in einer Referenz enthalten sein können, und zu den von ihnen unterstützten Berechtigungen finden Sie unter Objekttypen und Berechtigungen, die eine Referenz enthalten kann.

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)

Fordert vom Verbraucher eine API-Integration für das Amazon API Gateway an. Der Parameter id muss der Name der in der Manifest-Datei definierten API-Integration sein.

AwsGateway kann die folgenden Werte haben:

  • permissions.AwsGateway.API_GATEWAY

  • permissions.AwsGateway.PRIVATE_API_GATEWAY

  • permissions.AwsGateway.GOV_API_GATEWAY

  • permissions.AwsGateway.GOV_PRIVATE_API_GATEWAY

Weitere Informationen zu weiteren Parametern finden Sie unter CREATE API INTEGRATION.

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)

Fordert vom Verbraucher eine API-Integration für Azure API Management an. Der Parameter id muss der Name der in der Manifest-Datei definierten API-Integration sein. Weitere Informationen zu weiteren Parametern finden Sie unter CREATE API INTEGRATION.

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

Fordert vom Verbraucher eine API-Integration für Google Cloud API Gateway an. Der Parameter id muss der Name der in der Manifest-Datei definierten API-Integration sein. Weitere Informationen zu weiteren Parametern finden Sie unter CREATE API INTEGRATION.

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

Gibt ein Array mit den Berechtigungen zurück, die der Snowflake Native App anhand des an die Funktion übergebenen Arrays von Berechtigungen erteilt wurden.

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

Gibt ein Array mit den Berechtigungen zurück, die der Snowflake Native App anhand des an die Funktion übergebenen Arrays von Berechtigungen nicht erteilt wurden.

get_reference_associations(reference_name: str) -> [str]

Gibt ein Array zurück, das eine Liste von Referenzen auf ein Objekt enthält, das durch einen Parameter der Funktion angegeben wurde und mit der Snowflake Native App verbunden ist.