Como criar 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 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.

  1. Criar um pacote de aplicativo.

  2. No arquivo de manifesto, especifique os privilégios e defina as referências necessárias para o Snowflake Native App.

  3. Adicione um aplicativo Streamlit ao seu pacote de aplicativo.

  4. 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.

  5. Adicione a biblioteca snowflake-native-apps-permission como uma dependência.

  6. Importe a biblioteca snowflake.permissions em seu aplicativo Streamlit.

  7. Adicione funções ao seu aplicativo Streamlit que chamam as funções fornecidas pelo SDK.

Adição do Python Permission SDK ao seu 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
Copy

Importação do Python Permission SDK em seu 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;
Copy

Solicitação de privilégios do 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"
Copy

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")
Copy

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
Copy

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")
Copy

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

request_account_privileges(privileges: [str])

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.

request_reference(reference: str)

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.

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)

Solicita uma integração de API do consumidor para o Amazon API Gateway. O parâmetro id deve ser o nome da integração de API definida no arquivo de manifesto.

AwsGateway pode ter os seguintes valores:

  • permissions.AwsGateway.API_GATEWAY

  • permissions.AwsGateway.PRIVATE_API_GATEWAY

  • permissions.AwsGateway.GOV_API_GATEWAY

  • permissions.AwsGateway.GOV_PRIVATE_API_GATEWAY

Consulte CREATE API INTEGRATION para obter informações sobre outros parâmetros.

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)

Solicita uma integração de API do consumidor para o Azure API Management. O parâmetro id deve ser o nome da integração de API definida no arquivo de manifesto. Consulte CREATE API INTEGRATION para obter informações sobre outros parâmetros.

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

Solicita uma integração de API do consumidor para o Google Cloud API Gateway. O parâmetro id deve ser o nome da integração de API definida no arquivo de manifesto. Consulte CREATE API INTEGRATION para obter informações sobre outros parâmetros.

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

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.

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

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.

get_reference_associations(reference_name: str) -> [str]

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.