권한 및 참조 요청을 위한 사용자 인터페이스 만들기

이 항목에서는 컨슈머가 권한을 부여하고 설치된 Snowflake Native App 에 대한 참조를 생성할 수 있도록 하기 위해 Streamlit 및 Snowsight 를 사용하여 사용자 인터페이스를 만드는 방법을 설명합니다. Snowflake Native App Framework 는 공급자가 Streamlit 앱을 사용하여 컨슈머에 대한 요청을 포함할 수 있게 해주는 Python Permission SDK 를 제공합니다.

권한 및 참조 정보

Snowflake Native App Framework 를 사용하여 컨슈머로부터 권한과 참조를 요청하는 방법에 대한 일반적인 정보는 컨슈머 계정의 오브젝트에 대한 액세스 요청하기 섹션을 참조하십시오.

Python Permission SDK 정보

Snowflake Native App Framework 는 공급자가 Snowflake Native App 내에서 다음을 수행할 수 있도록 하는 Python Permission SDK 를 제공합니다.

  • 계정 수준 권한을 확인합니다.

  • 매니페스트 파일에 나열된 전역 권한을 요청합니다.

  • 매니페스트 파일에 정의된 대로 오브젝트 및 해당 오브젝트 수준 권한에 대한 참조를 요청합니다.

  • 예를 들어 API 통합 생성 또는 공유 생성과 같이 권한이 부여된 작업을 요청합니다.

Snowsight 에서는 Python Permission SDK 를 사용하여 설치된 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

이 예에서는 CREATE DATABASE 권한을 매개 변수로 전달하는 get_held_account_privileges() 함수를 호출합니다. 공급자는 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(<참조_이름>) 메서드를 호출하여 다음 예와 같이 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 과 연결되어 함수에 대한 매개 변수로 지정된 오브젝트에 대한 참조의 목록을 포함하는 배열을 반환합니다.