예제 - OAuth를 사용한 외부 액세스

이 항목에서는 공급자가 Snowflake 외부의 엔드포인트에 대한 액세스 권한을 부여할 수 있도록 참조를 사용하는 방법을 설명하는 예제를 제공합니다. 이 예제에서는 OAuth2 시크릿과 외부 액세스 통합을 사용하여 액세스를 허용합니다.

매니페스트 파일에 참조 추가

OAuth를 사용하여 외부 엔드포인트에 액세스할 수 있도록 하려면 공급자가 manifest.yml 파일에 다음 항목을 추가하면 됩니다.

  • USAGE 권한이 있는 EXTERNAL ACCESS INTEGRATION 참조

  • READ 권한이 있는 SECRET 참조

다음 예제 manifest.yml 파일은 이러한 참조를 정의하는 방법을 보여줍니다.

manifest_version: 1
configuration:
  log_level: warn
  trace_level: off
...
references:
  - consumer_secret:
      label: "Consumer's Secret"
      description: "Needed to authenticate with xyz.com"
      privileges:
        - READ
      object_type: SECRET
      register_callback: config.register_my_secret
      configuration_callback: config.get_config_for_ref
  - consumer_external_access:
      label: "Default External Access Integration"
      description: "This is required to access xyz.com"
      privileges:
        - USAGE
      object_type: EXTERNAL ACCESS INTEGRATION
      register_callback: config.register_reference
      configuration_callback: config.get_config_for_ref
      required_at_setup: true
Copy

참고

이러한 참조는 multi_valued 속성을 true로 설정할 수 없습니다.

시크릿 및 외부 액세스 오브젝트에 대한 참조의 경우에도 설정 스크립트에 configuration_callback 함수가 필요합니다. 자세한 내용은 설치 스크립트 configuration_callback 함수 추가 섹션을 참조하십시오.

설치 스크립트 configuration_callback 함수 추가

시크릿 및 외부 액세스 통합을 위한 참조를 추가한 후 설정 스크립트에 configuration_callback 함수를 추가해야 합니다. 외부 액세스 통합 또는 시크릿을 만들려면 애플리케이션에서 호스트 포트, 시크릿 유형, OAuth에 대한 권한 부여 및 토큰 엔드포인트 등의 값을 확인할 수 있어야 합니다. configuration_callback 은 컨슈머 계정에서 애플리케이션으로 이 정보를 제공합니다.

Snowsight 는 이 콜백 프로시저를 실행하여 사용자에게 오브젝트를 구성하라는 메시지를 표시하는 구성 대화 상자를 채웁니다. 실행을 위해서는 앱 역할에 대한 권한이 부여되어야 합니다.

참고

configuration_callback은 외부 액세스 통합 및 시크릿 오브젝트에만 지원됩니다.

콜백 함수에는 다음과 같은 요구 사항이 있습니다.

  • 콜백 함수는 참조 이름이 포함된 인자를 받아야 합니다. 이를 통해 동일한 콜백 함수로 여러 참조를 처리할 수 있습니다.

  • 콜백 함수는 올바른 형식의 JSON 오브젝트를 반환해야 합니다. JSON 오브젝트에 포함된 속성은 다음과 같습니다.

    • type

      메시지의 유형을 나타냅니다. 유효한 값은 다음과 같습니다.

      • CONFIGURATION: 오브젝트 유형에 따라 오브젝트의 구성 값이 포함된 페이로드를 반환합니다.

      • ERROR: Snowsight 에 표시되는 관련 메시지와 함께 오류를 반환합니다.

    • payload

      type 속성 값과 구성 중인 오브젝트 유형에 따른 응답 내용을 포함합니다.

구성 콜백에 대한 서명은 다음과 같습니다.

CREATE OR REPLACE PROCEDURE configuration_callback_name(ref_name string)
RETURNS STRING
language <language>
as
$$
  ...
$$
Copy

설정 스크립트 내에서 앱 구성에 사용되는 애플리케이션 역할에 USAGE 권한을 부여하여 저장 프로시저를 호출할 수 있는 권한을 갖도록 해야 합니다. 다음 예제는 저장 프로시저에 USAGE 권한을 부여하는 방법을 보여줍니다.

GRANT USAGE ON PROCEDURE configuration_callback_name(string)
  TO APPLICATION ROLE app_role;
Copy

콜백 함수는 JSON 오브젝트를 반환합니다. 자세한 내용은 구성 콜백 응답의 JSON 형식 섹션을 참조하십시오.

다음 예제는 외부 액세스와 시크릿 참조를 처리하기 위한 일반적인 콜백 함수를 보여줍니다.

이 함수는 다음을 수행합니다.

  • 외부 액세스 통합에 대한 참조를 위해 프로시저는 필요한 구성 정보가 포함된 JSON 오브젝트를 반환합니다. 자세한 내용은 외부 액세스 통합의 JSON 형식 섹션을 참조하십시오.

  • 시크릿에 대한 참조를 위해 프로시저는 OAuth2 유형의 시크릿 구성이 포함된 JSON 오브젝트를 반환합니다. 자세한 내용은 시크릿 참조의 JSON 형식 섹션을 참조하십시오.

  CREATE OR REPLACE PROCEDURE config.get_config_for_ref(ref_name STRING)
    RETURNS STRING
    LANGUAGE SQL
    AS
    $$
    BEGIN
      CASE (ref_name)
        WHEN 'CONSUMER_EXTERNAL_ACCESS' THEN
          RETURN '{
            "type": "CONFIGURATION",
            "payload":{
              "host_ports":["google.com"],
              "allowed_secrets" : "LIST",
              "secret_references":["CONSUMER_SECRET"]}}';
        WHEN 'CONSUMER_SECRET' THEN
          RETURN '{
            "type": "CONFIGURATION",
            "payload":{
              "type" : "OAUTH2",
              "security_integration": {
                "oauth_scopes": ["https://www.googleapis.com/auth/analytics.readonly"],
                "oauth_token_endpoint": "https://oauth2.googleapis.com/token",
                "oauth_authorization_endpoint":
                    "https://accounts.google.com/o/oauth2/auth"}}}';
  END CASE;
  RETURN '';
  END;
  $$;

GRANT USAGE ON PROCEDURE config.get_config_for_ref(string)
  TO APPLICATION ROLE app_admin;
Copy

시크릿 및 외부 액세스 통합을 위해 Python Permission SDK 사용하기

Python Permission SDK 는 시크릿 및 외부 액세스 통합 오브젝트를 지원합니다. 하지만 이러한 오브젝트의 동작은 약간 다릅니다.

공급자가 permission.request_reference() 를 호출하고 object_type 값이 SECRET 또는 EXTERNAL ACCESS INTEGRATION 인 참조의 이름을 전달하면 Snowsight 는 자동으로 다음을 수행합니다.

  • 설정 스크립트에서 configuration_callback 함수를 호출합니다.

  • configuration_callback 함수에서 반환된 값의 유효성을 검사합니다.

  • 컨슈머에게 구성 대화 상자를 표시합니다.

참고

공급자가 payload.allow_secrets 속성을 LIST 로 설정하여 외부 액세스 통합을 구성하는 경우 시크릿에 대한 참조를 요청하기 위해 별도의 호출을 할 필요가 없습니다. 시크릿 구성은 외부 액세스 통합 구성의 일부로 암시적으로 포함됩니다.