Openflow Connector for SharePoint 설정

Openflow Connector for SharePoint 설정

이 페이지에서는 Openflow Connector for SharePoint를 설정하는 방법을 설명해요. SharePoint 사이트 접근 설정, Snowflake 계정 설정, 그리고 커넥터 설치·구성까지 전체 절차를 단계별로 다룹니다.

출처: 문서

본문

기능 — 일반 공급 (Generally Available)

Snowflake 커넥터는 Snowflake Openflow를 사용할 수 있는 모든 리전에서 지원돼요.

  • Openflow Snowflake 배포는 AWS, Azure, GCP Commercial 리전의 모든 계정에서 사용할 수 있어요.
  • BYOC 배포의 Snowflake Openflow는 AWS Commercial 리전의 모든 계정에서만 사용할 수 있어요.

참고

이 커넥터는 Snowflake Connector 약관이 적용돼요.

이 항목에서는 Openflow Connector for SharePoint를 설정하는 단계를 설명해요.

사전 요구 사항 (Prerequisites)

SharePoint 사이트 접근 설정 (Set up access to your SharePoint site)

Azure 또는 Office 365 계정 관리자로서 다음 작업을 수행해요.

  • Microsoft Graph 애플리케이션을 등록했고, 요구 사항에 따라 다음과 같은 애플리케이션 권한을 구성했는지 확인해요.

    Microsoft SharePoint (Cortex Search, 문서 ACL 포함) 및 Microsoft SharePoint (Simple Ingest, 문서 ACL 포함)의 경우:

    • Sites.Selected: 지정된 사이트에만 접근을 제한해요. 자세한 내용은 Sites.Selected를 참고해요.
    • GroupMember.Read.All: SharePoint 그룹 권한을 확인하는 데 사용돼요. 자세한 내용은 GroupMember.Read.All을 참고해요.
    • User.ReadBasic.All: Microsoft 365 사용자 이메일을 확인하는 데 사용돼요. 자세한 내용은 User.ReadBasic.All을 참고해요.

    Microsoft SharePoint (Cortex Search, 문서 ACL 없음) 및 Microsoft SharePoint (Simple Ingest, 문서 ACL 없음)의 경우:

    • Sites.Selected: 지정된 사이트에만 접근을 제한해요. 자세한 내용은 Sites.Selected를 참고해요.
    • 선택한 사이트의 애플리케이션에 fullcontrol 역할을 부여해요. 이 역할은 CDC 수집 중 폴더 접근 변경을 처리해요. Grant-PnPAzureADAppSitePermission cmdlet을 사용하거나 GraphAPI 권한 엔드포인트를 호출해(예: curl 사용) 부여할 수 있어요. 자세한 내용은 Roles를 참고해요.

    참고

    fullcontrol 역할을 부여할 수 없다면 대신 더 좁은 read 역할을 애플리케이션에 부여해요. 하지만 수집 대상 사이트의 폴더에 대한 접근이 변경되면 커넥터가 복구 불가능한 상태가 되어 전체 데이터를 다시 수집해야 할 수 있어요. Snowflake는 이 문제를 완전히 해결하기 위해 fullcontrol 역할을 부여할 것을 권장해요.

  • 사용 사례에 따라 애플리케이션 자격 증명을 구성해요.

    • Microsoft SharePoint (Cortex Search, 문서 ACL 포함) 및 Microsoft SharePoint (Simple Ingest, 문서 ACL 포함)의 경우:
      • 새 인증서를 추가하거나 기존 인증서 파일과 개인 키에 접근할 수 있는지 확인해요. 자세한 내용은 옵션 1: 인증서 추가를 참고해요.
      • 새 클라이언트 비밀(client secret)을 만들고 비밀 값을 기록해요. 자세한 내용은 옵션 2: 클라이언트 비밀 추가를 참고해요.
    • Microsoft SharePoint (Cortex Search, 문서 ACL 없음) 및 Microsoft SharePoint (Simple Ingest, 문서 ACL 없음)의 경우:
      • 새 클라이언트 비밀을 만들고 비밀 값을 기록해요. 자세한 내용은 옵션 2: 클라이언트 비밀 추가를 참고해요.
  • Microsoft Graph 애플리케이션에서 다음 정보를 기록해요.

    • 애플리케이션의 클라이언트 ID. 자세한 내용은 애플리케이션 ID(클라이언트 ID)를 참고해요.
    • 애플리케이션의 테넌트 ID. 자세한 내용은 Microsoft 365 테넌트 ID 찾기를 참고해요.
    • Snowflake에 수집하려는 파일이나 폴더가 있는 Microsoft 365 SharePoint 사이트의 사이트 URL(예: https://yourtenant.sharepoint.com/sites/YourSite).

Snowflake 계정 설정 (Set up your Snowflake account)

Openflow 관리자로서 다음 작업을 수행해 Snowflake 계정을 설정해요. 기본 SNOWFLAKE_MANAGED 인증 전략에서는 런타임의 execute-as 역할이 커넥터가 Snowflake에 접근할 때 사용하는 정체성이므로, 이 역할에 다음 권한을 부여해요.

참고

Openflow - BYOC 배포에 커넥터를 배포하고 권장되는 SNOWFLAKE_MANAGED 대신 KEY_PAIR 인증 전략을 사용한다면, 런타임의 관리 토큰에 의존하지 않고 이 동일한 execute-as 역할을 서비스 사용자에게 부여해야 해요. 서비스 사용자를 만들려면 Openflow - BYOC 배포용 키-페어 인증 설정을 참고해요.

데이터베이스, 스키마, 웨어하우스 만들기

  • 대상 데이터베이스를 만들어요.

    USE ROLE OPENFLOW_ADMIN;
    CREATE DATABASE IF NOT EXISTS <destination_database>;
    
  • 대상 스키마를 만들어요.

    CREATE SCHEMA IF NOT EXISTS <destination_database>.<destination_schema>;
    
  • 런타임의 execute-as 역할에 필요한 권한을 부여해요.

    GRANT USAGE ON DATABASE <destination_database> TO ROLE OPENFLOW_<RUNTIME_NAME>_EXECUTE_AS_RL;
    GRANT USAGE ON SCHEMA <destination_database>.<destination_schema> TO ROLE OPENFLOW_<RUNTIME_NAME>_EXECUTE_AS_RL;
    GRANT CREATE TABLE, CREATE DYNAMIC TABLE, CREATE STAGE, CREATE SEQUENCE ON SCHEMA <destination_database>.<destination_schema>
      TO ROLE OPENFLOW_<RUNTIME_NAME>_EXECUTE_AS_RL;
    
  • 웨어하우스를 만들거나(기존 웨어하우스 사용) 사용 권한을 부여해요.

    CREATE WAREHOUSE IF NOT EXISTS <openflow_warehouse>
      WITH
      WAREHOUSE_SIZE = 'XSMALL'
      AUTO_SUSPEND = 300
      AUTO_RESUME = TRUE;
    
    GRANT USAGE, OPERATE ON WAREHOUSE <openflow_warehouse> TO ROLE OPENFLOW_<RUNTIME_NAME>_EXECUTE_AS_RL;
    
  • 커넥터가 수집한 원시 문서와 테이블에 다른 Snowflake 사용자가 접근해야 한다면(예: Snowflake에서 사용자 지정 처리), 해당 사용자에게 execute-as 역할을 부여해요.

Cortex Search 권한 부여

커넥터를 "파일 수집 및 Cortex 연산 수행" 사용 사례로 사용한다면 다음 작업도 수행해요.

  • 이 커넥터가 만든 Cortex Search 서비스에 대한 읽기 접근 역할을 만들고, 이 서비스를 사용할 역할에 부여해요.

    USE ROLE SECURITYADMIN;
    CREATE ROLE IF NOT EXISTS <cortex_search_service_read_only_role>;
    GRANT ROLE <cortex_search_service_read_only_role> TO ROLE <whatever_roles_will_access_search_service>;
    
  • Cortex Search 서비스를 만들 권한을 부여하고, 읽기 전용 역할에 데이터베이스와 스키마 접근 권한을 부여해요.

    GRANT CREATE CORTEX SEARCH SERVICE ON SCHEMA <destination_database>.<destination_schema> TO ROLE OPENFLOW_<RUNTIME_NAME>_EXECUTE_AS_RL;
    GRANT USAGE ON DATABASE <destination_database> TO ROLE <cortex_search_service_read_only_role>;
    GRANT USAGE ON SCHEMA <destination_database>.<destination_schema> TO ROLE <cortex_search_service_read_only_role>;
    

사용 사례 1: 파일만 수집 (Ingest files only)

커넥터를 다음 용도로 사용해요.

  • Snowflake 내 사용자 지정 처리를 위해 SharePoint 파일을 수집하고 지속적으로 업데이트
  • (선택 사항) 다운스트림에서 접근 제어를 유지하기 위해 파일 권한(ACL 커넥터) 수집

커넥터 설정

데이터 엔지니어로서 다음 작업을 수행해 커넥터를 구성해요.

커넥터 설치

참고

SharePoint 커넥터에는 여러 변형이 있어요. 사용 사례에 가장 잘 맞는 변형을 선택해요. 자세한 내용은 Openflow Connector for SharePoint의 변형을 참고해요.

데이터 엔지니어로서 커넥터를 설치하려면 다음을 수행해요.

  1. Openflow의 Connector library 탭으로 이동해요.

  2. Openflow 커넥터 페이지에서 커넥터를 찾고 Install을 선택해요.

  3. Select runtime 대화 상자에서 Available runtimes 드롭다운 목록에서 런타임을 선택하고 Install을 클릭해요.

    참고

    커넥터를 설치하기 전에 수집된 데이터를 저장할 데이터베이스와 스키마를 Snowflake에 만들었는지 확인해요.

  4. Snowflake 계정 자격 증명으로 배포에 인증하고, 런타임 애플리케이션이 Snowflake 계정에 접근하도록 허용할지 묻는 메시지가 표시되면 Allow를 선택해요. 커넥터 설치 과정은 완료까지 몇 분 걸려요.

  5. Snowflake 계정 자격 증명으로 런타임에 인증해요.

Openflow 캔버스가 나타나고 커넥터 프로세스 그룹이 추가돼요.

커넥터 구성

  • 프로세스 그룹 매개변수(parameter)를 채워요.
    1. 가져온 프로세스 그룹을 마우스 오른쪽 버튼으로 클릭하고 Parameters를 선택해요.
    2. SharePoint Ingestion Parameters, SharePoint Destination Parameters, SharePoint Source Parameters에 설명된 대로 필요한 매개변수 값을 입력해요.
SharePoint Source Parameters

모든 커넥터:

매개변수 설명
SharePoint Site URL 커넥터가 콘텐츠를 수집할 URL 또는 SharePoint 사이트
SharePoint Client ID Microsoft Entra 클라이언트 ID. 클라이언트 ID와 이를 Microsoft Entra에서 찾는 방법은 애플리케이션 ID(클라이언트 ID)를 참고해요.
SharePoint Client Secret Microsoft Entra 클라이언트 비밀. 클라이언트 비밀과 이를 Microsoft Entra에서 찾는 방법은 Certificates & secrets를 참고해요.
SharePoint Tenant ID Microsoft Entra 테넌트 ID. 테넌트 ID와 이를 Microsoft Entra에서 찾는 방법은 Microsoft 365 테넌트 ID 찾기를 참고해요.

ACL 커넥터만:

매개변수 설명
SharePoint Application Private Key PEM 형식으로 생성된 애플리케이션 개인 키. 키는 암호화되지 않아야 해요.
SharePoint Site Domain 동기화된 SharePoint 사이트의 도메인 이름
SharePoint Application Certificate PEM 형식으로 생성된 애플리케이션 인증서
SharePoint Destination Parameters
매개변수 설명 필수
Destination Database 데이터가 저장될 데이터베이스. Snowflake에 이미 존재해야 해요. 이름은 대소문자를 구분해요. 따옴표 없는 식별자는 대문자로 제공해요. 예
Destination Schema 데이터가 저장될 스키마. Snowflake에 이미 존재해야 해요. 이름은 대소문자를 구분해요. 따옴표 없는 식별자는 대문자로 제공해요. 예: CREATE SCHEMA SCHEMA_NAME 또는 CREATE SCHEMA schema_name → SCHEMA_NAME 사용. CREATE SCHEMA "schema_name" 또는 CREATE SCHEMA "SCHEMA_NAME" → 각각 schema_name 또는 SCHEMA_NAME 사용. 예
Snowflake Authentication Strategy 사용할 때: Snowflake Openflow Deployment 또는 BYOC: SNOWFLAKE_MANAGED 사용. 이 토큰은 Snowflake가 자동으로 관리해요. BYOC 배포는 SNOWFLAKE_MANAGED를 쓰려면 먼저 execute-as 역할을 구성해야 해요. BYOC: 선택적으로 BYOC는 인증 전략 값으로 KEY_PAIR를 사용할 수 있어요. 예
Snowflake Account Identifier 사용할 때: SNOWFLAKE_MANAGED 인증 전략 → 비어 있어야 해요. KEY_PAIR → [organization-name]-[account-name] 형식의 Snowflake 계정 이름. 예
Snowflake Private Key 사용할 때: SNOWFLAKE_MANAGED 인증 전략 → 비어 있어야 해요. KEY_PAIR → 인증에 사용되는 RSA 개인 키로, PKCS8 표준에 따라 형식화되고 표준 PEM 헤더/푸터를 포함해야 해요. Snowflake Private Key File 또는 Snowflake Private Key 중 하나는 반드시 정의해야 해요. 아니요
Snowflake Private Key File 사용할 때: SNOWFLAKE_MANAGED 인증 전략 → 개인 키 파일은 비어 있어야 해요. KEY_PAIR → 인증에 사용되는 RSA 개인 키가 포함된 파일을 업로드해요. PKCS8 표준에 따라 형식화되고 표준 PEM 헤더/푸터를 포함해야 해요. 헤더 줄은 -----BEGIN PRIVATE로 시작해요. 개인 키 파일을 업로드하려면 Reference asset 확인란을 선택해요. 아니요
Snowflake Private Key Password 사용할 때: SNOWFLAKE_MANAGED 인증 전략 → 비어 있어야 해요. KEY_PAIR → Snowflake 개인 키 파일과 연결된 암호를 제공해요. 아니요
Snowflake Role 사용할 때: SNOWFLAKE_MANAGED 인증 전략 → 런타임의 execute-as 역할(또는 그 역할에 부여된 하위 역할)을 사용해요. Openflow UI에서 런타임의 View Details로 이동해 execute-as 역할을 찾을 수 있어요. KEY_PAIR → 서비스 사용자에게 구성된 유효한 역할을 사용해요. 예
Snowflake Username 사용할 때: SNOWFLAKE_MANAGED 인증 전략 → 비어 있어야 해요. KEY_PAIR → Snowflake 인스턴스에 연결하는 데 사용되는 사용자 이름을 제공해요. 예
Snowflake Warehouse 쿼리를 실행하는 데 사용되는 Snowflake 웨어하우스. 예
SharePoint Ingestion Parameters

모든 커넥터:

매개변수 설명
SharePoint Source Folder 이 폴더와 모든 하위 폴더의 지원되는 파일이 Snowflake에 수집돼요. 폴더 경로는 Shared Documents 라이브러리를 기준으로 해요.
File Extensions To Ingest 수집할 파일 확장자를 지정하는 쉼표로 구분된 목록. 커넥터는 가능하면 파일을 먼저 PDF 형식으로 변환하려 해요. 그렇지만 확장자 검사는 원본 파일 확장자에 대해 수행돼요. 변환 가능한 형식은 Format options를 참고해요. 지정된 파일 확장자 중 일부가 Cortex Parse Document에서 지원되지 않으면, 커넥터는 해당 파일을 무시하고 이벤트 로그에 경고 메시지를 기록한 뒤 다른 파일 처리를 계속해요.
SharePoint Document Library Name 파일을 수집할 SharePoint 사이트의 라이브러리.
Snowflake File Hash Table Name 콘텐츠가 변경되었는지 판단하기 위해 파일 해시를 저장하는 테이블 이름. 일반적으로 이 매개변수는 변경하지 않아야 해요.

ACL 커넥터만:

매개변수 설명
SharePoint Site Groups Enabled Site Groups 기능이 활성화되었는지 여부를 지정해요.
  • 플로우를 실행해요. 프로세스 그룹을 시작해요. 플로우는 Snowflake 내부에 필요한 모든 객체를 만들어요.
    1. 가져온 프로세스 그룹을 마우스 오른쪽 버튼으로 클릭하고 Start를 선택해요.

사용 사례 2: 파일 수집 및 Cortex 연산 수행

미리 정의된 플로우 정의를 사용해요.

  • 조직의 SharePoint 사이트 내 문서에 대한 AI 어시스턴트 만들기
  • AI 어시스턴트가 조직의 SharePoint 사이트에 지정된 접근 제어를 준수하도록 설정

데이터 엔지니어로서 다음 작업을 수행해 커넥터를 구성해요.

  1. Snowflake에 수집된 데이터를 저장할 데이터베이스와 스키마를 만들어요. Snowflake 계정 설정에서 설명한 대로 execute-as 역할에 필요한 데이터베이스 권한을 부여해요.

  2. 커넥터를 설치해요:

    • Openflow의 Connector library 탭으로 이동해요.

    • Openflow 커넥터 페이지에서 커넥터를 찾고 Install을 선택해요.

    • Select runtime 대화 상자에서 Available runtimes 드롭다운 목록에서 런타임을 선택하고 Install을 클릭해요.

      참고

      커넥터를 설치하기 전에 수집된 데이터를 저장할 데이터베이스와 스키마를 Snowflake에 만들었는지 확인해요.

    • Snowflake 계정 자격 증명으로 배포에 인증하고, 런타임 애플리케이션이 Snowflake 계정에 접근하도록 허용할지 묻는 메시지가 표시되면 Allow를 선택해요. 커넥터 설치 과정은 완료까지 몇 분 걸려요.

    • Snowflake 계정 자격 증명으로 런타임에 인증해요.

    Openflow 캔버스가 나타나고 커넥터 프로세스 그룹이 추가돼요.

  3. 프로세스 그룹 매개변수를 채워요.

    • 가져온 프로세스 그룹을 마우스 오른쪽 버튼으로 클릭하고 Parameters를 선택해요.
    • SharePoint Cortex Connect Source Parameters, SharePoint Cortex Connect Destination Parameters, SharePoint Cortex Connect Ingestion Parameters에 설명된 대로 필요한 매개변수 값을 입력해요.
SharePoint Cortex Connect Source Parameters

모든 커넥터:

매개변수 설명
SharePoint Site URL 커넥터가 콘텐츠를 수집할 URL 또는 SharePoint 사이트
SharePoint Client ID Microsoft Entra 클라이언트 ID. 클라이언트 ID와 이를 Microsoft Entra에서 찾는 방법은 애플리케이션 ID(클라이언트 ID)를 참고해요.
SharePoint Client Secret Microsoft Entra 클라이언트 비밀. 클라이언트 비밀과 이를 Microsoft Entra에서 찾는 방법은 Certificates & secrets를 참고해요.
SharePoint Tenant ID Microsoft Entra 테넌트 ID. 테넌트 ID와 이를 Microsoft Entra에서 찾는 방법은 Microsoft 365 테넌트 ID 찾기를 참고해요.

ACL 커넥터만:

매개변수 설명
SharePoint Application Private Key PEM 형식으로 생성된 애플리케이션 개인 키. 키는 암호화되지 않아야 해요.
SharePoint Site Domain 동기화된 SharePoint 사이트의 도메인 이름
SharePoint Application Certificate PEM 형식으로 생성된 애플리케이션 인증서
SharePoint Cortex Connect Destination Parameters
매개변수 설명 필수
Destination Database 데이터가 저장될 데이터베이스. Snowflake에 이미 존재해야 해요. 이름은 대소문자를 구분해요. 따옴표 없는 식별자는 대문자로 제공해요. 예
Destination Schema 데이터가 저장될 스키마. Snowflake에 이미 존재해야 해요. 이름은 대소문자를 구분해요. 따옴표 없는 식별자는 대문자로 제공해요. 예: CREATE SCHEMA SCHEMA_NAME 또는 CREATE SCHEMA schema_name → SCHEMA_NAME 사용. CREATE SCHEMA "schema_name" 또는 CREATE SCHEMA "SCHEMA_NAME" → 각각 schema_name 또는 SCHEMA_NAME 사용. 예
Snowflake Authentication Strategy 사용할 때: Snowflake Openflow Deployment 또는 BYOC: SNOWFLAKE_MANAGED 사용. 이 토큰은 Snowflake가 자동으로 관리해요. BYOC 배포는 SNOWFLAKE_MANAGED를 쓰려면 먼저 execute-as 역할을 구성해야 해요. BYOC: 선택적으로 BYOC는 인증 전략 값으로 KEY_PAIR를 사용할 수 있어요. 예
Snowflake Account Identifier 사용할 때: SNOWFLAKE_MANAGED 인증 전략 → 비어 있어야 해요. KEY_PAIR → [organization-name]-[account-name] 형식의 Snowflake 계정 이름. 예
Snowflake Private Key 사용할 때: SNOWFLAKE_MANAGED 인증 전략 → 비어 있어야 해요. KEY_PAIR → 인증에 사용되는 RSA 개인 키로, PKCS8 표준에 따라 형식화되고 표준 PEM 헤더/푸터를 포함해야 해요. Snowflake Private Key File 또는 Snowflake Private Key 중 하나는 반드시 정의해야 해요. 아니요
Snowflake Private Key File 사용할 때: SNOWFLAKE_MANAGED 인증 전략 → 개인 키 파일은 비어 있어야 해요. KEY_PAIR → 인증에 사용되는 RSA 개인 키가 포함된 파일을 업로드해요. PKCS8 표준에 따라 형식화되고 표준 PEM 헤더/푸터를 포함해야 해요. 헤더 줄은 -----BEGIN PRIVATE로 시작해요. 개인 키 파일을 업로드하려면 Reference asset 확인란을 선택해요. 아니요
Snowflake Private Key Password 사용할 때: SNOWFLAKE_MANAGED 인증 전략 → 비어 있어야 해요. KEY_PAIR → Snowflake 개인 키 파일과 연결된 암호를 제공해요. 아니요
Snowflake Role 사용할 때: SNOWFLAKE_MANAGED 인증 전략 → 런타임의 execute-as 역할(또는 그 역할에 부여된 하위 역할)을 사용해요. Openflow UI에서 런타임의 View Details로 이동해 execute-as 역할을 찾을 수 있어요. KEY_PAIR → 서비스 사용자에게 구성된 유효한 역할을 사용해요. 예
Snowflake Username 사용할 때: SNOWFLAKE_MANAGED 인증 전략 → 비어 있어야 해요. KEY_PAIR → Snowflake 인스턴스에 연결하는 데 사용되는 사용자 이름을 제공해요. 예
Snowflake Warehouse 쿼리를 실행하는 데 사용되는 Snowflake 웨어하우스. 예
SharePoint Cortex Connect Ingestion Parameters

모든 커넥터:

매개변수 설명
SharePoint Source Folder 이 폴더와 모든 하위 폴더의 지원되는 파일이 Snowflake에 수집돼요. 폴더 경로는 Shared Documents 라이브러리를 기준으로 해요.
File Extensions To Ingest 수집할 파일 확장자를 지정하는 쉼표로 구분된 목록. 커넥터는 가능하면 파일을 먼저 PDF 형식으로 변환하려 해요. 그렇지만 확장자 검사는 원본 파일 확장자에 대해 수행돼요. 변환 가능한 형식은 Format options를 참고해요. 지정된 파일 확장자 중 일부가 Cortex Parse Document에서 지원되지 않으면, 커넥터는 해당 파일을 무시하고 이벤트 로그에 경고 메시지를 기록한 뒤 다른 파일 처리를 계속해요.
SharePoint Document Library Name 파일을 수집할 SharePoint 사이트의 라이브러리.
Snowflake File Hash Table Name 콘텐츠가 변경되었는지 판단하기 위해 파일 해시를 저장하는 테이블 이름. 일반적으로 이 매개변수는 변경하지 않아야 해요.
OCR Mode AI_PARSE_DOCUMENT 함수로 문서를 파싱할 때 사용할 OCR 모드. 값은 OCR 또는 LAYOUT이 될 수 있어요. OCR 모드에서는 서식과 테이블 구조를 무시하고 원시 텍스트 콘텐츠만 추출해요. LAYOUT 모드에서는 출력이 테이블 구조를 Markdown으로 보존해요.
Snowflake Cortex Search Service User Role Cortex Search 서비스에 사용 권한이 할당된 역할의 식별자.

ACL 커넥터만:

매개변수 설명
SharePoint Site Groups Enabled Site Groups 기능이 활성화되었는지 여부를 지정해요.
  • 평면을 마우스 오른쪽 버튼으로 클릭하고 Enable all Controller Services를 선택해요.
  • 가져온 프로세스 그룹을 마우스 오른쪽 버튼으로 클릭하고 Start를 선택해요. 커넥터가 데이터 수집을 시작해요.
  • Cortex Search 서비스를 쿼리해요.

사용 사례 3: 커넥터 정의 사용자 지정

커넥터 정의를 사용자 지정해 수집된 파일에 대한 사용자 지정 처리를 수행해요.

데이터 엔지니어로서 다음 작업을 수행해 커넥터를 구성해요.

  1. 커넥터를 설치해요:

    • Openflow의 Connector library 탭으로 이동해요.

    • Openflow 커넥터 페이지에서 커넥터를 찾고 Install을 선택해요.

    • Select runtime 대화 상자에서 Available runtimes 드롭다운 목록에서 런타임을 선택하고 Install을 클릭해요.

      참고

      커넥터를 설치하기 전에 수집된 데이터를 저장할 데이터베이스와 스키마를 Snowflake에 만들었는지 확인해요.

    • Snowflake 계정 자격 증명으로 배포에 인증하고, 런타임 애플리케이션이 Snowflake 계정에 접근하도록 허용할지 묻는 메시지가 표시되면 Allow를 선택해요. 커넥터 설치 과정은 완료까지 몇 분 걸려요.

    • Snowflake 계정 자격 증명으로 런타임에 인증해요.

    Openflow 캔버스가 나타나고 커넥터 프로세스 그룹이 추가돼요.

  2. 커넥터 정의를 사용자 지정해요.

    • 다음 프로세스 그룹을 제거해요:
      • Check If Duplicate Content
      • Snowflake Stage and Parse PDF
      • Update Snowflake Cortex
      • (선택 사항) Process Microsoft365 Groups
    • Process SharePoint Metadata 프로세스 그룹의 출력에 사용자 지정 처리를 연결해요. 각 플로우 파일은 단일 SharePoint 파일 변경을 나타내요.
  3. 프로세스 그룹 매개변수를 채워요. 사용 사례 1과 동일한 과정을 따라요. 커넥터 정의를 수정한 뒤에는 모든 매개변수가 필요하지 않을 수 있어요.

  4. 플로우를 실행해요.

    • 프로세스 그룹을 시작해요. 플로우는 Snowflake 내부에 필요한 모든 객체를 만들어요.
    • 가져온 프로세스 그룹을 마우스 오른쪽 버튼으로 클릭하고 Start를 선택해요.
  5. Cortex Search 서비스를 쿼리해요.

SharePoint 사이트 그룹 활성화 (Enabling SharePoint site groups)

사이트 그룹용 Microsoft Graph 애플리케이션

"SharePoint 사이트 접근 설정"에 지정된 단계에 더해 다음 작업을 수행해요.

  • Sites.Selected SharePoint 권한을 추가해요.

    참고

    Sites.Selected가 Microsoft Graph와 SharePoint 권한 둘 다에 나타나는지 확인해야 해요.

  • 키 페어를 생성해요. 또는 openssl로 다음 명령을 실행해 자체 서명 인증서를 만들 수 있어요.

    openssl req -x509 -nodes -newkey rsa:2048 -keyout key.pem -out cert.pem -days 365
    

    참고

    위 명령은 생성된 개인 키를 암호화하지 않아요. 암호화된 키를 생성하고 싶다면 -nodes 인수를 제거해요.

  • 인증서를 Microsoft Graph 애플리케이션에 연결해요.

Cortex Search 서비스 쿼리 (Query the Cortex Search service)

Cortex Search 서비스를 사용해 SharePoint의 문서와 채팅하거나 쿼리하는 채팅 및 검색 애플리케이션을 만들 수 있어요.

커넥터를 설치·구성하고 SharePoint에서 콘텐츠 수집을 시작하면 Cortex Search 서비스를 쿼리할 수 있어요. Cortex Search 사용에 대한 자세한 내용은 Cortex Search 서비스 쿼리를 참고해요.

응답 필터링

Cortex Search 서비스의 응답을 SharePoint에서 특정 사용자가 접근할 수 있는 문서로 제한하려면, Cortex Search를 쿼리할 때 사용자의 사용자 ID 또는 이메일 주소가 포함된 필터를 지정할 수 있어요. 예를 들어 [email protected]_ids 또는 [email protected]_emails를 사용해요. 커넥터가 만든 Cortex Search 서비스의 이름은 Cortex 스키마의 search_service예요.

SQL 워크시트에서 다음 SQL 코드를 실행해 SharePoint 사이트에서 수집한 파일로 Cortex Search 서비스를 쿼리해요.

다음을 바꿔요:

  • application_instance_name: 데이터베이스 및 커넥터 애플리케이션 인스턴스의 이름
  • user_emailID: 응답을 필터링할 사용자의 이메일 ID
  • your_question: 응답을 받을 질문
  • number_of_results: 응답에 반환할 최대 결과 수. 최대값은 1000, 기본값은 10이에요.
SELECT PARSE_JSON(
  SNOWFLAKE.CORTEX.SEARCH_PREVIEW(
    '<application_instance_name>.cortex.search_service',
      '{
        "query": "<your_question>",
         "columns": ["chunk", "web_url"],
         "filter": {"@contains": {"user_emails": "<user_emailID>"} },
         "limit": <number_of_results>
       }'
   )
)['results'] AS results

columns에 입력할 수 있는 값의 전체 목록은 다음과 같아요.

모든 커넥터:

열 이름 유형 설명
full_name String SharePoint 사이트 문서 루트에서 파일까지의 전체 경로. 예: folder_1/folder_2/file_name.pdf.
web_url String 브라우저에서 원본 SharePoint 파일을 표시하는 URL.
last_modified_date_time String 항목이 가장 최근에 수정된 날짜와 시간.
chunk String Cortex Search 쿼리와 일치한 문서의 텍스트 조각.

ACL 커넥터만:

열 이름 유형 설명
user_ids Array 문서에 접근 권한이 있는 Microsoft 365 사용자 ID 배열. 문서에 할당된 모든 Microsoft 365 그룹의 사용자 ID도 포함돼요. 특정 사용자 ID를 찾으려면 Get a user를 참고해요.
user_emails Array 문서에 접근 권한이 있는 Microsoft 365 사용자 이메일 ID 배열. 문서에 할당된 모든 Microsoft 365 그룹의 사용자 이메일 ID도 포함돼요.

예: 인사(HR) 정보용 AI 어시스턴트 쿼리

Cortex Search를 사용해 직원용 AI 어시스턴트를 쿼리해 온보딩, 행동 강령(code of conduct), 팀 프로세스, 조직 정책 같은 최신 HR 정보와 채팅할 수 있어요. 응답 필터를 사용하면 SharePoint에 구성된 접근 제어를 준수하면서 HR 팀 구성원이 직원 계약을 쿼리하도록 허용할 수도 있어요.

Python 워크시트에서 다음 코드를 실행해 SharePoint에서 수집한 파일로 Cortex Search 서비스를 쿼리해요. 데이터베이스에 snowflake.core 패키지를 추가했는지 확인해요.

다음을 바꿔요:

  • application_instance_name: 데이터베이스 및 커넥터 애플리케이션 인스턴스의 이름
  • user_emailID: 응답을 필터링할 사용자의 이메일 ID
import snowflake.snowpark as snowpark
from snowflake.snowpark import Session
from snowflake.core import Root

def main(session: snowpark.Session):

   root = Root(session)

   # fetch service
   my_service = (root
     .databases["<application_instance_name>"]
     .schemas["cortex"]
     .cortex_search_services["search_service"]
   )

   # query service
   resp = my_service.search(
     query="What is my vacation carry over policy?",
     columns = ["chunk", "web_url"],
     filter = {"@contains": {"user_emails": "<user_emailID>"} },
     limit=1
   )
   return (resp.to_json())

명령줄 인터페이스에서 다음 코드를 실행해 SharePoint에서 수집한 파일로 Cortex Search 서비스를 쿼리해요. Snowflake REST API에 접근하려면 키 페어 인증과 OAuth를 통해 인증해야 해요. 자세한 내용은 REST API 및 Snowflake REST API 인증을 참고해요.

다음을 바꿔요:

  • application_instance_name: 데이터베이스 및 커넥터 애플리케이션 인스턴스의 이름
  • account_url: Snowflake 계정 URL. 계정 URL을 찾는 방법은 계정의 조직 및 계정 이름 찾기를 참고해요.
curl --location "https://<account_url>/api/v2/databases/<application_instance_name>/schemas/cortex/cortex-search-services/search_service" \
     --header 'Content-Type: application/json' \
     --header 'Accept: application/json' \
     --header "Authorization: Bearer <CORTE...JWT>" \
     --data '{
         "query": "What is my vacation carry over policy?",
         "columns": ["chunk", "web_url"],
         "limit": 1
     }'

샘플 응답:

{
  "results" : [ {
  "web_url" : "https://<domain>.sharepoint.com/sites/<site_name>/<path_to_file>",
  "chunk" : "Answer to the question asked."
  } ]
}

스테이지에서 파일 찾기 (Finding files in stage)

스테이지에 저장된 파일은 이름을 읽을 수 없는 경우가 있어요. 특정 파일을 찾으려면 메타데이터 테이블을 기준 정보(source of truth)로 사용해요. 이 테이블에는 파일 이름과 스테이지의 해당 파일 ID 사이의 매핑이 들어 있어요.

Cortex 활성 설정의 경우 다음 쿼리를 사용해 파일을 찾아요.

SELECT DISTINCT METADATA:id FROM DOCS_CHUNKS WHERE METADATA:fullName LIKE '%<file_name>%';

Cortex가 아닌 설정의 경우 다음 쿼리를 사용해요.

SELECT FILE_ID FROM DOC_METADATA WHERE FILE_NAME = '<file_name>';

<file_name>을 찾고자 하는 파일의 이름 또는 일부 이름으로 바꿔요.

스테이지의 파일은 이 쿼리에서 반환된 ID로 시작해요.

더 알아보기 (Learn more)