権限および参照をリクエストするユーザーインターフェイスを作成する

このトピックでは、Streamlitと Snowsight を使用してユーザーインターフェイスを作成し、コンシューマーが権限を付与してインストール済み Snowflake Native App の参照を作成する方法について説明します。StreamlitプログラムからSnowflakeの権限とリファレンスにアクセスするには、Snowflake Native App Framework が Python Permission SDK を提供します。

|native-app-perms|のメソッドに関する情報については :doc:`requesting-permission-sdk-ref`をご参照ください。

権限および参照について

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 タブにアクセスリクエストを表示します。

|native-app-perms|のメソッドに関する情報については :doc:`requesting-permission-sdk-ref`をご参照ください。

権限を承認し、参照をバインドするインターフェイスを作成するワークフロー

以下の一般的なワークフローは、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. SDK が提供する関数を呼び出すStreamlitアプリに関数を追加します。

Streamlit環境への Python Permission SDK の追加

Streamlitアプリで Python Permission SDK を使用するには、次の例のように environment.yml ファイルに snowflake-native-apps-permission パッケージを依存関係として追加します。

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 を使用してさまざまなタスクを実行する方法を示しています。

アカウントレベルの権限を確認する

この例では、get_held_account_privileges() の Python Permission SDK メソッドを使用して、マニフェストファイルで宣言された権限が、インストールされた 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() 関数を呼び出し、パラメーターとして CREATEDATABASE 権限を渡します。プロバイダーは get_held_account_privileges() 関数を使用して、コンシューマーがアプリに必要な権限を付与するまで待機できます。

注釈

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() メソッドを呼び出し、API に統合する USAGE 権限をリクエストします。

permissions.request_reference("servicenow_api_integration")
Copy