创建用户界面以请求权限和引用

本主题介绍如何使用 Streamlit 和 Snowsight 创建用户界面,以允许使用者授予权限并为已安装的 Snowflake Native App 创建引用。Snowflake Native App Framework 提供了 Python Permission SDK,允许提供商使用 Streamlit 应用程序嵌入使用者的请求。

关于权限和引用

有关使用 Snowflake Native App Framework 向使用者请求权限和引用的一般信息,请参阅 请求访问使用者账户中的对象

关于 Python Permission SDK

Snowflake Native App Framework 提供了 Python Permission SDK,允许提供商在 Snowflake Native App 中执行以下操作:

  • 检查账户级别权限。

  • 请求清单文件中列出的全局权限。

  • 请求对清单文件中定义的对象及其相应对象级别权限的引用。

  • 请求权限操作,例如创建 API 集成或创建共享。

使用 Python Permission SDK,Snowsight 在已安装 Snowflake Native App 的 Security 选项卡中显示访问请求。

创建接口以批准权限和绑定引用的工作流程

以下常规工作流程概述了实施 Streamlit 应用程序以请求使用者授予权限和引用所需的步骤。

  1. 创建应用程序包。

  2. 在清单文件中,指定权限并定义 Snowflake Native App 所需的引用。

  3. 将 Streamlit 应用程序添加到应用程序包。

  4. environment.yml 文件添加到应用程序包。

    备注

    environment.yml 文件必须与用于实现 Snowsight 接口的主 Streamlit 文件位于同一目录中。

  5. snowflake-native-apps-permission 库添加为依赖项。

  6. 在 Streamlit 应用程序中导入 snowflake.permissions 库。

  7. 将函数添加到 Streamlit 应用程序,以调用 SDK 提供的函数。

将 Python Permission SDK 添加到 Streamlit 环境

若要在 Streamlit 应用程序中使用 Python Permission SDK,请将 snowflake-native-apps-permission 包添加为 environment.yml 文件中的依赖项,如以下示例所示:

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

在 Streamlit 应用程序中 Python Permission SDK 导入

要将 Python Permission SDK 导入 Streamlit 应用程序,请在应用程序中包含以下导入语句:

import snowflake.permissions as permissions
Copy

向使用者请求权限

以下示例演示如何使用 Python Permission SDK 执行不同的任务。

查看账户级别权限

此示例演示如何使用 Permissions API 的 get_held_account_privileges() 方法检查是否已授予清单文件中声明的权限,以安装 Snowflake Native App。

例如,如果 Snowflake Native App 需要在 APPLICATION 对象外部创建数据库,则提供商可以在清单文件中定义引用,如下所示:

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

使用 Python Permission SDK,您可以使用 get_held_account_privileges() 方法获取已授予 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

此示例调用 get_held_account_privileges() 函数,并将 CREATE DATABASE 权限作为参数传递。提供商可以使用 get_held_account_privileges() 函数进行适当的响应,直到使用者向 Snowflake Native App 授予所需的权限。

备注

只有清单文件中定义的权限才是 get_held_account_privileges() 的有效实参。传递其他实参会导致错误。

要求使用者执行权限操作

提供者可以使用 Python Permission SDK 请求 Snowflake Native App 所需的权限操作。

例如,要请求允许 Snowflake Native App 连接到 ServiceNow 实例的 API 集成,提供商将在清单文件中定义 API 集成:

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

接下来,在 Streamlit 应用程序中,提供商调用 request_reference(<ref_name>) 方法来请求 API 集成的 USAGE 权限,如以下示例所示:

permissions.request_reference("servicenow_api_integration")
Copy

Python Permission SDK 参考

下表列出了 Python Permission SDK 在 snowflake.permissions 模块中提供的函数:

方法

描述

request_account_privileges(privileges: [str])

请求从传递给函数的字符串数组所指定的使用者那里获得权限。指定的权限必须在清单文件中列出。

request_reference(reference: str)

请求从传递给函数的字符串所指定的使用者那里获得引用。传递给函数的引用必须在清单文件中定义。请参阅 引用中可以包含的对象类型和权限,了解引用中可以包含的对象及其支持的权限。

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)

向使用者请求 Amazon API Gateway 的 API 集成。id 参数必须是清单文件中定义的 API 集成的名称。

AwsGateway 可以具有以下值:

  • permissions.AwsGateway.API_GATEWAY

  • permissions.AwsGateway.PRIVATE_API_GATEWAY

  • permissions.AwsGateway.GOV_API_GATEWAY

  • permissions.AwsGateway.GOV_PRIVATE_API_GATEWAY

有关其他参数的信息,请参阅 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)

向使用者请求 Azure API Management 的 API 集成。id 参数必须是清单文件中定义的 API 集成的名称。有关其他参数的信息,请参阅 CREATE API INTEGRATION

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

向使用者请求 Google Cloud API Gateway 的 API 集成。id 参数必须是清单文件中定义的 API 集成的名称。有关其他参数的信息,请参阅 CREATE API INTEGRATION

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

返回一个数组,其中包含基于传递给函数的权限数组授予的 Snowflake Native App 的权限。

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

返回一个数组,其中包含基于传递给函数的权限数组未授予的 Snowflake Native App 的权限。

get_reference_associations(reference_name: str) -> [str]

返回一个数组,其中包含对象的引用列表,该对象由与 Snowflake Native App 关联的函数的参数指定。

语言: 中文