Criação de uma interface de usuário para solicitar privilégios e referências¶
Este tópico descreve como criar uma interface de usuário usando Streamlit e Snowsight para permitir que os consumidores concedam privilégios e criem referências para um Snowflake Native App instalado. O Snowflake Native App Framework fornece o Python Permission SDK que permite que os provedores incorporem solicitações para o consumidor usando um aplicativo Streamlit.
Sobre privilégios e referências¶
Para obter informações gerais sobre como solicitar privilégios e referências do consumidor usando o Snowflake Native App Framework, consulte Solicitação de acesso a objetos em uma conta de consumidor.
Sobre Python Permission SDK¶
O Snowflake Native App Framework fornece o Python Permission SDK que permite que um provedor faça o seguinte em um Snowflake Native App:
Verificar os privilégios no nível da conta.
Solicitar privilégios globais listados no arquivo de manifesto.
Solicitar referências a objetos e seus privilégios de nível de objeto correspondentes, conforme definido no arquivo de manifesto.
Solicitar ações privilegiadas, por exemplo, criar uma integração de API ou criação de um compartilhamento.
Usando o Python Permission SDK, Snowsight exibe as solicitações de acesso na guia Security do Snowflake Native App instalado.
Fluxo de trabalho para criar uma interface para aprovar privilégios e vincular referências¶
O fluxo de trabalho geral a seguir descreve as etapas necessárias para implementar um aplicativo Streamlit para solicitar concessões de privilégios e referências do consumidor.
Criar um pacote de aplicativo.
No arquivo de manifesto, especifique os privilégios e defina as referências necessárias para o Snowflake Native App.
Adicione um aplicativo Streamlit ao seu pacote de aplicativo.
Adicione um arquivo
environment.yml
ao seu pacote de aplicativo.Nota
O arquivo
environment.yml
deve estar no mesmo diretório que o arquivo Streamlit principal usado para implementar a interface Snowsight.Adicione a biblioteca
snowflake-native-apps-permission
como uma dependência.Importe a biblioteca
snowflake.permissions
em seu aplicativo Streamlit.Adicione funções ao seu aplicativo Streamlit que chamam as funções fornecidas pelo SDK.
Adição do Python Permission SDK a um ambiente Streamlit¶
Para usar o Python Permission SDK em seu aplicativo Streamlit, adicione o pacote snowflake-native-apps-permission
como uma dependência em seu arquivo environment.yml
como mostrado no exemplo a seguir:
name: sf_env
channels:
- snowflake
dependencies:
- snowflake-native-apps-permission
Importação do Python Permission SDK em um aplicativo Streamlit¶
Para importar o Python Permission SDK em seu aplicativo Streamlit, inclua a seguinte instrução de importação em seu aplicativo:
import snowflake.permissions as permissions;
Solicitação de privilégios de um consumidor¶
Os exemplos a seguir mostram como executar diferentes tarefas usando o Python Permission SDK.
Verificação dos privilégios de nível de conta¶
Este exemplo mostra como usar o método get_held_account_privileges()
da API de permissões para verificar se as permissões declaradas no arquivo de manifesto são concedidas ao Snowflake Native App instalado.
Por exemplo, se um Snowflake Native App precisar criar um banco de dados fora do objeto APPLICATION, um provedor poderá definir a referência no arquivo de manifesto da seguinte maneira:
privileges:
- CREATE DATABASE:
description: "Creation of ingestion (required) and audit databases"
Usando o Python Permission SDK, você pode usar o método get_held_account_privileges()
para obter uma lista de privilégios que foram concedidos ao 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")
Este exemplo chama a função get_held_account_privileges()
passando a permissão CREATEDATABASE como um parâmetro. Um provedor pode usar a função get_held_account_privileges()
para responder adequadamente até que o consumidor conceda os privilégios necessários ao Snowflake Native App.
Nota
Somente os privilégios definidos no arquivo de manifesto são argumentos válidos para get_held_account_privileges()
. Passar outros argumentos resulta em erro.
Solicitação de ações privilegiadas do consumidor¶
Os provedores podem usar o Python Permission SDK para solicitar ações privilegiadas exigidas pelo Snowflake Native App.
Por exemplo, para solicitar uma integração de API que permite que o Snowflake Native App se conecte a uma instância ServiceNow, um provedor definiria a integração de API no arquivo de manifesto:
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
Em seguida, no aplicativo Streamlit, o provedor chama o método request_reference(<ref_name>)
para solicitar o privilégio USAGE na integração de API como mostrado no exemplo a seguir:
permissions.request_reference("servicenow_api_integration")
Referência de Python Permission SDK¶
A tabela a seguir lista as funções fornecidas no módulo snowflake.permissions
pelo Python Permission SDK:
Método |
Descrição |
---|---|
|
Solicita privilégios do consumidor especificado por uma matriz de cadeia de caracteres passada para a função que contém os privilégios. Os privilégios especificados devem ser listados no arquivo de manifesto. |
|
Solicita uma referência do consumidor especificado pela cadeia de caracteres passada para a função. A referência passada para a função deve ser definida no arquivo de manifesto. Consulte Tipos de objeto e privilégios que uma referência pode conter para os objetos que podem ser incluídos em uma referência e seus privilégios suportados. |
|
Solicita uma integração de API do consumidor para o Amazon API Gateway. O parâmetro
Consulte CREATE API INTEGRATION para obter informações sobre outros parâmetros. |
|
Solicita uma integração de API do consumidor para o Azure API Management. O parâmetro |
|
Solicita uma integração de API do consumidor para o Google Cloud API Gateway. O parâmetro |
|
Retorna uma matriz contendo os privilégios que foram concedidos ao Snowflake Native App com base na matriz de privilégios passados para a função. |
|
Retorna uma matriz contendo os privilégios que não foram concedidos ao Snowflake Native App com base na matriz de privilégios passados para a função. |
|
Retorna uma matriz contendo uma lista de referências a um objeto, especificado por um parâmetro para a função que foi associada ao Snowflake Native App. |