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

このトピックでは、Streamlitと Snowsight を使用してユーザーインターフェイスを作成し、コンシューマーが権限を付与してインストール済み Snowflake Native App の参照を作成する方法について説明します。 Snowflake Native App Framework は、プロバイダーがStreamlitアプリを使ってコンシューマーにリクエストを埋め込めるようにする Python Permission SDK を提供します。

権限および参照について

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

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

この例では、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() 関数を呼び出し、パラメーターとして CREATEDATABASE 権限を渡します。プロバイダーは、コンシューマーが Snowflake Native App に必要な権限を付与するまで、 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

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)

コンシューマーに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 に関連付けられた関数のパラメーターで指定された、オブジェクトへの参照のリストを含む配列を返します。