interlinear

실무자와 개발자 사이비즈니스 앱과 에이전트 사이자연어와 기계어 사이

Snowflake를 Copilot Studio에 연결하기: 단계별 가이드

Snowflake를 Copilot Studio 지식 소스로 연결해 실시간 데이터로 답하는 에이전트를 만드는 방법을 소개해요. Azure 설정부터 흔한 실수까지 정리했어요.

원문: Connecting Snowflake to Copilot Studio: Step-by-Step Guide 게시일: 2025-12-15 · 저자: Hazim SharafelDin

개요

Snowflake를 Copilot Studio의 지식 소스로 연결하면, 데이터를 복제하거나 별도의 ETL1을 구축하지 않고도 자연어 에이전트를 통해 데이터를 실시간으로 조회할 수 있어요. Copilot은 Snowflake 테이블을 일급 데이터 소스로 취급할 수 있으며, 에이전트가 실시간 데이터를 기반으로 질문에 답하고, 분석을 실행하고, 워크플로를 구동할 수 있게 돼요.

연결 방법

에이전트를 Snowflake에 연결하는 방법은 여러 가지가 있어요.

  • 도구(Tool)로 연결.
    에이전트 호출을 오케스트레이터에 위임하거나, 토픽에서 명시적으로 호출할 수 있는 유연성을 줘요.
  • 지식 소스(Knowledge Source)로 연결.
    에이전트의 지식을 Snowflake의 선택된 특정 테이블에 자연스럽게 그라운딩해요.

어느 쪽을 선택할지는 에이전트의 목표와 설계에 따라 크게 달라져요.

이 블로그의 초점

이 블로그 글은 Snowflake를 지식 소스로 사용하는 것에 초점을 맞춰 설정 가이드를 제공해요. 다루는 내용은 다음과 같아요.

  • Snowflake 구성
  • Azure에서 앱 등록
  • Copilot Studio 커넥터 활성화

여기서 구축한 연결 설정은 Snowflake를 도구로 사용할 때도 그대로 활용할 수 있어요.

참고: Snowflake Cortex 에이전트를 활용하려는 경우, 해당 주제는 이번 글에서 다루지 않아요. 충분한 관심이 있다면 Copilot Studio와 Cortex 에이전트 연결을 구성하는 데 필요한 단계를 자세히 설명하는 후속 글의 게시를 검토할게요.


사전 요구 사항

Snowflake와 Copilot Studio를 올바르게 구성하려면 다음 접근 권한이 필요해요.

  • ✅ 관리자 권한이 있는 Snowflake 계정
  • ✅ 커넥터 활성화를 위한 Power Platform 관리 센터(Power Platform Admin Center) 접근 권한
  • ✅ OAuth 클라이언트 및 리소스 역할을 위한 Azure 앱 등록(App Registration)
  • ✅ Microsoft Copilot Studio 환경 (예: 샌드박스, 프로덕션)

구성 단계

초기 확인: Power Platform 관리 센터(PPAC)

먼저 PPAC에서 조직의 데이터 정책이 사용 중인 환경에서 Snowflake 커넥터를 차단하지 않는지 확인하세요.

새 Copilot Studio 에이전트를 만들거나 기존 에이전트에 접근한 후 다음으로 이동해요. 지식(Knowledge) 탭 → 고급(Advanced) → 지식 소스로 ‘Snowflake’ 선택

처음 접근하면 연결 세부 정보를 입력하라는 메시지가 표시돼요.

인증 방법: 이 가이드에서는 “서비스 주체(Service Principal, Microsoft Entra ID 애플리케이션)”2를 사용해요.


1단계: Microsoft Azure 리소스 구성

다음 세 가지 주요 단계를 완료하려면 Azure 관리 포털에 접근할 수 있어야 해요.

  1. Azure에 새 Snowflake OAuth3 리소스(Resource) 등록 (Application ID URI, 앱 스코프)
  2. Azure에 새 Snowflake OAuth 클라이언트(Client) 등록 (Client ID, Secret, 권한, 리디렉션 URI)
  3. Azure 메타데이터 수집: 토큰 엔드포인트, jwks URI

완료하면 다음 값을 갖게 돼요.

  • Tenant ID <TENANT_ID> (A)
  • OAuth Client ID (B)
  • Client Secret (C)
  • OAuth Resource URL (D)

1.1 Azure/Entra ID에 “Snowflake OAuth Resource” 등록

  1. **Azure Portal → 앱 등록(App registrations) → 새 등록(New registration)**으로 이동해요

  2. 이름을 **‘Snowflake OAuth Resource’**와 같이 지정해요

    • **“단일 테넌트(Single-tenant)”**를 사용해요 (또는 상황에 맞게 선택)
  3. **“등록(Register)”**을 클릭한 후, **API 노출(Expose an API)**로 이동해요

  4. Application ID URI 옆의 **“추가(Add)”**를 클릭해요

    • Application ID URI가 자동으로 생성돼요 (예: api://<GUID>)
    • **저장(Save)**을 클릭하고 이 URI를 복사해요
    • 이것이 “Resource URL” <SNOWFLAKE_APPLICATION_ID_URI> **(D)**가 돼요
  5. 왼쪽 탐색 메뉴에서 “앱 역할(App Roles)” 섹션으로 이동해요

    • 다음 섹션에서 Snowflake에 만들 “ANALYST” 역할에 대응하는 애플리케이션 역할을 정의해요. 이미 존재하는 Snowflake 역할이 있다면 그것을 선택해도 돼요.
    • 사용자가 로그인하면 액세스 토큰에 할당된 역할이 포함돼요
    • Snowflake는 이 역할을 확인해 데이터 접근 권한을 결정해요 (예: 스코프 session:role:ANALYST)
    • 아래 스크린샷의 정보를 참고해 역할 세부 정보를 입력하거나, 사용 중인 역할에 맞는 값을 선택하세요.

앱 역할 구성:

  1. “개요(Overview)” → 엔드포인트(Endpoints) 탭으로 이동해요
  2. “OAuth 2.0 토큰 엔드포인트 (v2)” 값을 복사해 저장해요

1.2 Azure/Entra ID에 “Snowflake OAuth Client” 등록

  1. **Azure 앱 등록 → 새 등록(New registration)**으로 이동해요

    • 이름: 예를 들어 ‘Snowflake OAuth Client’
  2. Client ID를 복사해요

    • 이것이 Client ID <OAUTH_CLIENT_ID> **(B)**예요
  3. **인증서 및 비밀(Certificates & secrets) → 클라이언트 비밀 만들기(Create a Client secret)**로 이동해요

    • 이 값을 Client secret <OAUTH_CLIENT_SECRET> **(C)**으로 저장해요
  4. **API 권한(API permissions) → 권한 추가(Add permission) → “내 조직에서 사용하는 API(APIs my organization uses)”**로 이동해요

    • 앞서 만든 **“Snowflake OAuth Resource”**를 입력/선택해요
    • 권한을 선택해요
    • 서비스 주체(앱 전용) 흐름의 경우 **애플리케이션 권한(Application permissions)**으로 설정해요
    • 그런 다음 관리자 동의(admin consent)를 부여해요
  5. 앱 등록의 개요(Overview) 페이지로 이동해요

    • **“디렉터리(테넌트) ID”**를 복사해요
    • 이것이 Tenant ID <TENANT_ID> **(A)**예요

⚠️ 거의 다 왔어요! 가장 어려운 부분이 거의 끝났어요. Microsoft Azure 구성을 완료하기까지 한 단계만 남았어요.

1.3 Azure에서 필요한 메타데이터 수집

Azure의 OAuth 클라이언트가 생성한 “Sub” 또는 **“Subject ID”**를 수집해야 해요. 이 <AZURE_Sub> 값은 새로운 Snowflake 사용자 인증의 사용자 이름으로 사용돼요.

“Sub” ID를 얻으려면, 플레이스홀더 **<Place_Holder>**를 실제 값으로 바꾼 뒤 PowerShell에서 다음을 실행해요.

# ---- Inputs ----
$TenantId = "<TENANT_ID>"
$ClientId = "<OAUTH_CLIENT_ID>"
$ClientSecret = "<OAUTH_CLIENT_SECRET>"  # Ensure NO leading/trailing space
$Scope = "api://$ClientId/.default"  # Use /.default for client_credentials
# ---- Request ----
$TokenUrl = "https://login.microsoftonline.com/$TenantId/oauth2/v2.0/token"
$Body = @{
    client_id     = $ClientId
    client_secret = $ClientSecret
    grant_type    = "client_credentials"
    scope         = $Scope
}

$TokenResponse = Invoke-RestMethod -Method Post -Uri $TokenUrl -Body $Body -ContentType "application/x-www-form-urlencoded"

# ---- Result ----
$TokenResponse | Format-List

성공하면 명령 셸 창에 긴 토큰이 나타나요.

eyJ0eXAiOiJKV3QiLCJhbGciOiJSUzI1NiIsIng1dCI6…

토큰 디코딩:

  1. 토큰을 복사해요
  2. https://jwt.ms에 접속해요
  3. 붙여넣고 **“Decode Token”**을 클릭해요
  4. “Sub” 값을 찾아 복사해요
  5. <AZURE_Sub>로 저장해요

Azure 구성 요약

지금까지 수집했어야 하는 ID들의 템플릿이에요.

키 이름 설명 Snowflake에서의 사용처 실제 값
<TENANT_ID> Azure 테넌트 ID Snowflake의 다양한 구성 매개변수에서 참조됨
<AZURE_Sub> JWT4 토큰에서 추출한 Sub ID 새 Snowflake Copilot 사용자의 로그인 이름
<SNOWFLAKE_APPLICATION_ID_URI> Azure 리소스 ID Snowflake External OAuth Audience List의 항목 중 하나로 제공됨

2단계: Snowflake 구성

관리자 계정 또는 관리자 권한이 있는 사용자로 Snowflake에 로그인해요.

Snowflake 구성 매개변수 확인

  1. Snowflake SaaS URL

    • 왼쪽 제어 창에서 “Account Admin” 아이콘을 선택해요
    • 왼쪽 하단의 사용자 이름을 클릭해요
    • **“Connect a tool to Snowflake”**를 선택해요
    • **“Account/Server URL”**을 선택해요
    • Account/Server URL을 복사해요
  2. 데이터베이스 이름

    • 왼쪽 창 → **“Catalog” → “Databases”**로 이동해요
    • 원하는 데이터베이스의 이름을 복사해요
  3. 웨어하우스 이름

    • 왼쪽 창 → **“Compute” → “Warehouses”**로 이동해요
    • 해당하는 웨어하우스5 이름을 복사해요
  4. 스키마 이름

    • 왼쪽 창 → Catalog → 사용할 데이터베이스를 선택해요
    • 테이블이 위치한 필요한 스키마 이름을 확인하고 복사해요
  5. 역할(Role)

    • 기존 역할을 할당하거나 새 역할을 만들어야 해요
    • 역할에는 웨어하우스, 데이터베이스, 스키마에 대한 필요한 접근 권한이 있어야 해요
    • 이 가이드에서는 **“ANALYST”**라는 새 역할을 만들어요

Snowflake — 사용자 / 역할 / 보안 통합 구성

Copilot/OAuth용 Snowflake 사용자 생성

**“Projects” → “Workspaces”**로 이동해 새 SQL 창을 만들어요.

<AZURE_Sub>를 실제 Sub ID로 바꾼 뒤 아래 SQL을 복사해 붙여넣어요.

CREATE USER COPILOT_OAUTH_USER 
    LOGIN_NAME = '<AZURE_Sub>'  -- Sub ID from JWT token
    DISPLAY_NAME = 'Snowflake OAuth User'
    COMMENT = 'Copilot OAuth user';

이렇게 하면 외부 OAuth 주체(subject)에 대응하는 Snowflake ID가 만들어져요.


ANALYST 역할 생성

Snowflake에서 다음 SQL을 실행해요.

CREATE ROLE ANALYST;

GRANT ROLE ANALYST TO USER COPILOT_OAUTH_USER;

ALTER USER COPILOT_OAUTH_USER SET DEFAULT_ROLE = ANALYST;

GRANT USAGE ON WAREHOUSE COMPUTE_WH TO ROLE ANALYST;

GRANT IMPORTED PRIVILEGES ON DATABASE SNOWFLAKE_SAMPLE_DATA TO ROLE ANALYST;

ANALYST 역할에 원하는 웨어하우스, 데이터베이스, 테이블에 대한 접근 권한을 부여할 수 있어요.


보안 통합(Security Integration) 생성

외부 OAuth 통합을 활성화해 Copilot Studio와의 보안 통합을 설정해요.

모든 플레이스홀더 <Place_Holder>를 실제 값으로 교체한 뒤 실행해요.

CREATE OR REPLACE SECURITY INTEGRATION COPILOT_EXTERNAL_OAUTH_AZURE 
    TYPE = EXTERNAL_OAUTH 
    ENABLED = TRUE
  
    -- IdP / Azure AD specifics 
    EXTERNAL_OAUTH_TYPE = AZURE 
    EXTERNAL_OAUTH_ISSUER = 'https://sts.windows.net/<TENANT_ID>/'
    EXTERNAL_OAUTH_JWS_KEYS_URL = 'https://login.microsoftonline.com/<TENANT_ID>/discovery/v2.0/keys'
  
    -- Audience (the "api://" application ID URI that tokens are issued for) 
    EXTERNAL_OAUTH_AUDIENCE_LIST = ('api://<SNOWFLAKE_APPLICATION_ID_URI>')
  
    -- How Snowflake finds the user in the token
    EXTERNAL_OAUTH_TOKEN_USER_MAPPING_CLAIM = 'sub' 
    EXTERNAL_OAUTH_SNOWFLAKE_USER_MAPPING_ATTRIBUTE = 'LOGIN_NAME'
  
    -- Role behavior: allow any role requested in the token
    -- (you can tighten this later if needed)
    EXTERNAL_OAUTH_ANY_ROLE_MODE = 'ENABLE';

3단계: Copilot Studio에서 Snowflake를 지식 소스로 추가

Snowflake와 Azure 쪽 구성 및 테스트가 완료되면 Copilot Studio와 통합할 수 있어요.

구성 단계:

  1. Copilot Studio를 열고 로그인한 뒤 에이전트를 만들거나 편집해요

  2. 에이전트 설정에서 **“지식 소스/연결 추가(Add knowledge source / connection)”**를 선택해요

    • Snowflake를 선택해요
  3. 메시지가 표시되면 미리 준비한 모든 연결 세부 정보를 입력해요.

    • Tenant ID (A)
    • Client ID (B)
    • Client Secret (C)
    • Resource URL (D)
    • Snowflake SaaS URL
    • 데이터베이스 이름
    • 웨어하우스 이름
    • 스키마 이름
    • 역할(Role)
  4. 연결을 저장해요

    • Copilot Studio는 이 연결을 사용해 Snowflake 테이블을 실시간으로 조회해요
    • 지식 소스로 추가할 데이터셋과 테이블 이름을 선택할 수 있어요

사용자 권한

Snowflake를 지식 소스로 처음 사용할 때, 사용자에게 연결 생성 권한을 부여하라는 메시지가 표시돼요.

연결 사용하기

이 시점부터 에이전트가 Snowflake에서 데이터를 읽을 수 있도록 도구나 지식 기반 프롬프트를 추가할 수 있어요. 예를 들면 다음과 같아요.

  • 자연어 쿼리에 답변
  • 보고서 생성
  • 다른 소스와 데이터 결합

문제 해결 및 흔한 함정

1. 웨어하우스 상태

엄밀히 필수는 아니지만, 처음 연결을 만들 때 Snowflake 데이터 웨어하우스 인스턴스가 일시 중단(suspended) 상태라면 자동으로 재시작되지 않을 수 있어요.

해결책: 최초 연결을 만들기 전에 구성한 웨어하우스 인스턴스가 **실행 중(running)**인지 확인하세요.

2. 사용자 로그인 이름 불일치

(login_name을 통해) 매핑하는 Snowflake 사용자가 JWT의 Sub 클레임과 정확히 일치하는지 확인하세요.

예시: Snowflake 사용자는 LOGIN_NAME = <sub value>여야 해요.

3. 역할 권한

사용자에게 할당된 Snowflake 역할에는 적절한 권한이 있어야 해요.

  • 웨어하우스 접근 권한
  • 데이터베이스 접근 권한
  • 스키마 접근 권한
  • SELECT 등 필요한 권한
  • 기본 역할/웨어하우스/데이터베이스/스키마가 설정되어 있어야 함

이것들이 없으면 유효한 연결이라도 실패할 수 있어요.

4. 검증 쿼리

**“Connect a tool to Snowflake”**를 선택하면 “SQL Commands” 탭에서 다양한 유용한 Snowflake 쿼리를 확인할 수 있어요. 이 쿼리들로 다음을 검증할 수 있어요.

  • 생성된/기존 사용자
  • 역할
  • 보안 통합 연결

예시 쿼리 접근 경로: Home → Connect a tool to Snowflake → SQL Commands


마무리

이 가이드를 따라 Snowflake를 Copilot Studio에 연결했고, 에이전트가 자연어로 실시간 데이터를 조회할 수 있게 되었어요. 이 통합을 통해 다음이 가능해요.

  • ✅ ETL 파이프라인 없이 실시간 데이터 접근
  • ✅ 에이전트 지식을 Snowflake 테이블에 그라운딩
  • ✅ 데이터에 대한 자연어 쿼리 지원
  • ✅ 대화형 AI를 통한 보고서 및 분석 생성

이 연결은 지식 소스(자연스러운 그라운딩용)와 도구(명시적인 오케스트레이션용) 두 가지 방식 모두로 사용할 수 있어요.


어휘 주석

  1. ETL(Extract, Transform, Load): 여러 시스템의 데이터를 추출·변환해 다른 저장소로 옮겨 적재하는 데이터 파이프라인 작업.
  2. 서비스 주체(Service Principal): 사람이 아니라 애플리케이션이 시스템에 로그인하고 리소스에 접근할 때 쓰는 신원(계정).
  3. OAuth: 비밀번호를 직접 주고받지 않고도 애플리케이션이 다른 서비스의 리소스에 접근할 수 있도록 권한을 위임하는 인증·인가 표준.
  4. JWT(JSON Web Token): 사용자나 애플리케이션의 신원 정보를 담아 서명한, 위변조를 검증할 수 있는 토큰 형식.
  5. 웨어하우스(Warehouse): Snowflake에서 쿼리를 실제로 실행하는 컴퓨팅 자원 단위. 필요할 때 켜고 쓰지 않을 때 꺼서 비용을 조절해요.