Microsoft Teams 및 Microsoft 365 Copilot용 Cortex Agents¶
소개¶
대부분의 팀에게 시의적절한 데이터 인사이트를 확보한다는 것은 전용 분석 플랫폼과 커뮤니케이션 도구 간의 컨텍스트 전환을 의미하며, 이는 지연과 생산성 저하로 이어집니다. 에이전트형 AI 시스템을 Microsoft Teams에 통합하면 대화와 의사 결정이 이루어지는 지점에 직접 답변을 제공하여 기업 전반의 정보 흐름을 가속화할 수 있습니다. 그러나 안전하고 강력하면서도 직관적인 채팅 내 분석 솔루션을 구축하는 것은 상당한 과제입니다. 다행히도 Snowflake가 그런 솔루션을 구축했습니다.
Microsoft Teams 및 Microsoft 365 Copilot용 Snowflake Cortex Agents 통합은 Snowflake의 대화형 AI 에이전트를 비즈니스 커뮤니케이션 플랫폼에 내장합니다. 비즈니스 팀과 비기술 사용자는 Teams 채팅 또는 보다 광범위한 Microsoft 365 생태계를 벗어나지 않고도 간단한 자연어로 Snowflake 구조화 데이터와 상호작용하며 직접적인 답변과 시각화 결과를 얻을 수 있습니다. 이러한 통합 솔루션은 원활한 배포를 위해 Microsoft AppSource를 통해 제공됩니다.
주요 기능¶
자연어를 통한 원활한 분석. Microsoft Teams 및 Microsoft 365 Copilot 인터페이스 내에서 의사 결정권자가 직접 인사이트를 확보할 수 있도록 지원합니다. 사용자는 대화식으로 질문을 제기할 수 있으며, LLM 기반의 정확한 답변을 텍스트, 표 또는 차트 형태로 즉시 받아볼 수 있어 데이터 기반 의사 결정을 획기적으로 가속화합니다.
포괄적인 워크플로를 위한 듀얼 인터페이스. Microsoft Teams용 Cortex Agents는 서로 다른 비즈니스 요구 사항을 지원하기 위해 별개의 두 가지 인터페이스를 제공합니다. 표준 Teams 애플리케이션을 사용하여 Teams 봇 애플리케이션 채팅 내에서 전용 심층 분석을 수행하거나, Microsoft 365 Copilot Agents를 활용하여 Microsoft 365 Copilot 생태계 내의 광범위한 대화형 워크플로에 맞춤형 Snowflake 인사이트를 적용합니다.
Snowflake Cortex Agents 기반. 이러한 통합 솔루션은 Snowflake Cortex Agents API를 기반으로 하며, 데이터로부터 정확하고 신뢰할 수 있는 인사이트를 생성하는 복잡한 작업을 처리합니다. 에이전트 시스템은 사용자 요청을 지능적으로 해석하고 응답을 생성하여, 팀이 복잡한 대화형 AI 패턴을 구축하거나 기반 모델을 관리할 필요가 없도록 지원합니다.
엔터프라이즈급 보안 및 거버넌스. Snowflake의 개인정보 보호 우선 기반 위에 구축된 이 통합 솔루션은 고객이 AI 기반의 사용 사례를 자신 있게 탐색할 수 있도록 보장합니다. 이는 다음을 의미합니다.
사용자 데이터는 Snowflake의 거버넌스 경계 내에서 유지됩니다. 사용자 프롬프트는 Cortex Agents API로 전송되지만, 답변 생성을 위해 쿼리되는 기본 데이터는 Snowflake의 보안 환경을 벗어나지 않습니다. 생성된 SQL 쿼리는 Snowflake 가상 웨어하우스 내에서 실행됩니다.
Snowflake의 개인정보 보호 및 거버넌스 기능과의 원활한 통합. 이 통합 솔루션은 Snowflake의 역할 기반 액세스 제어(RBAC)를 완전히 준수합니다. 사용자를 대신하여 실행되는 모든 쿼리는 해당 사용자에게 설정된 권한을 준수하여 사용자가 액세스 권한이 부여된 데이터만 볼 수 있도록 보장합니다.
통합 설정¶
Cortex Agent의 Microsoft Teams 통합 기능을 통해 조직 관리자는 여러 Snowflake 계정을 조직 내 Teams 및 Copilot 작업 공간에 연결할 수 있습니다. 통합 설정에는 아래에 요약된 몇 가지 간단한 단계가 포함됩니다.
Azure 관리자에 의한 테넌트 전체 설정. 이 통합 솔루션은 Azure Active Directory(AAD) 테넌트 내에서 Snowflake 애플리케이션에 대한 동의를 부여하기 위해 Microsoft Azure 관리자에 의한 일회성 설정이 필요합니다. 이 단계를 통해 통합에 필요한 안전한 OAuth 2.0 인증을 활성화할 수 있습니다.
Snowflake 보안 통합. Azure 관리자가 테넌트 전체 설정을 완료한 후, Snowflake 관리자는 Microsoft Teams 또는 M365 Copilot 애플리케이션에 연결하려는 각 개별 Snowflake 계정에 대해 보안 통합을 구성해야 합니다. 이 단계는 통합 솔루션이 각 Snowflake 계정 내에서 필요한 데이터에 안전하게 액세스할 수 있도록 보장합니다.
봇에 계정 연결하기. 보안 통합이 구성된 후 Snowflake 관리자는 Snowflake 계정을 Microsoft Teams 또는 M365 Copilot 봇에 연결할 수 있습니다. 이 단계를 통해 봇이 Snowflake 계정의 데이터 및 기능에 액세스할 수 있게 되어, 사용자가 Teams 또는 Copilot 내에서 직접 자신의 데이터와 상호 작용할 수 있습니다.
전제 조건¶
통합 프로세스를 시작하기 전에 다음을 설정했는지 확인합니다.
관리자 권한. 설정을 위해서는 Snowflake와 Microsoft 테넌트 양쪽 모두에서 관리자 권한이 필요합니다.
Snowflake 계정 지역: Snowflake 계정은 Azure East US 2 지역에 호스팅되어야 합니다. Snowflake는 이 미리 보기가 진행됨에 따라 추가 지역을 지원할 계획입니다.
Snowflake 관리자 권한: Snowflake 사용자는 ACCOUNTADMIN 또는 SECURITYADMIN 역할에 대한 액세스 권한이 있어야 합니다. 이러한 권한은 Snowflake 계정에 필요한 보안 통합 오브젝트를 생성하는 데 필요합니다.
Microsoft 관리자 권한: Azure 사용자는 Microsoft Entra ID 테넌트에 대한 글로벌 관리자 권한(또는 이에 상응하는 역할)을 보유해야 합니다. 이러한 권한은 애플리케이션에 필요한 테넌트 전체 관리자 동의를 부여하는 데 필요합니다.
Microsoft 테넌트 ID: Snowflake 보안 통합을 구성하려면 조직의 Microsoft 테넌트 ID가 필요합니다. 조직의 테넌트 ID 찾기에 대한 자세한 내용은 `Azure 포털에서 구독 및 테넌트 IDs 가져오기<https://learn.microsoft.com/en-us/azure/azure-portal/get-subscription-tenant-id>`_를 참조하세요.
개인 사용자 계정: 모든 최종 사용자는 각자 고유한 Microsoft 및 Snowflake 사용자 계정을 보유해야 합니다.
최종 사용자 라이선스: 사용자는 Microsoft Teams에 액세스하기 위해 적절한 Microsoft 라이선스를 보유해야 합니다. Microsoft 365 Copilot과의 통합을 사용하려는 경우 Copilot 라이선스도 필요합니다.
1단계: 테넌트 전체 Entra ID 구성¶
Cortex Agents의 안전한 인증을 활성화하려면 Microsoft Azure 관리자가 Snowflake 테넌트에 호스팅된 두 애플리케이션에 대한 동의를 부여하고, Entra ID 테넌트 내에서 각 애플리케이션에 대해 *서비스 주체*를 생성해야 합니다. 두 가지 애플리케이션은 다음과 같습니다.
Cortex Agents 봇 OAuth 리소스: 이는 보호된 Snowflake API를 나타내며 클라이언트 애플리케이션에 대한 액세스 권한(범위)을 정의합니다.
Cortex Agents 봇 Snowflake OAuth 클라이언트: 이는 액세스 토큰을 요청한 후 Snowflake API를 호출하는 클라이언트 애플리케이션(이 경우 Teams 애플리케이션 백엔드 서비스)을 나타냅니다.
이러한 애플리케이션에 대한 동의 부여 방법은 아래에 설명되어 있습니다. 두 애플리케이션 모두 프로세스는 매우 유사하지만, 구체적인 권한과 범위는 약간 다릅니다.
OAuth 리소스 주체에 대한 동의 부여¶
Cortex Agents 봇 OAuth 리소스 애플리케이션 서비스 주체에 대한 동의를 부여하려면 다음을 수행합니다.
브라우저에서 ``https://login.microsoftonline.com/<tenant-id>/adminconsent?client_id=5a840489-78db-4a42-8772-47be9d833efe``로 이동합니다. 여기서, :samp:`{tenant-id}`는 해당 조직의 Microsoft 테넌트 ID입니다.
아직 로그인하지 않은 경우 로그인하라는 메시지가 표시됩니다.
애플리케이션에 필요한 권한을 보여주는 Permission requested 대화 상자가 나타납니다.
:ui:`Accept`를 선택하여 요청된 권한을 부여합니다.
OAuth 클라이언트 주체에 대한 동의 부여¶
이 프로세스에는 두 개의 대화 상자가 표시됩니다. 각각은 OAuth 리소스 주체에 대한 대화 상자와 유사하지만 요청된 권한은 다릅니다.
Cortex Agents 봇 Snowflake OAuth 클라이언트 애플리케이션 서비스 주체에 대한 동의를 부여하려면 다음을 수행합니다.
브라우저에서 ``https://login.microsoftonline.com/<tenant-id>/adminconsent?client_id=bfdfa2a2-bce5-4aee-ad3d-41ef70eb5086``로 이동합니다. 여기서, :samp:`{tenant-id}`는 해당 조직의 Microsoft 테넌트 ID입니다.
애플리케이션에 필요한 권한 세트 중 하나를 보여주는 Permissions requested (1 of 2) 대화 상자가 나타납니다.
:ui:`Accept`를 선택하여 요청된 권한을 부여합니다.
두 번째 권한 대화 상자(Permissions requested (2 of 2))가 나타납니다.
:ui:`Accept`를 선택하여 요청된 권한을 부여합니다.
중요
필수 쿼리 문자열 매개 변수가 누락되었다는 오류 메시지가 다음과 같이 표시될 수 있습니다.
{
"error": {
"code": "ServiceError",
"message": "Missing required query string parameter: code. Url = https://unitedstates.token.botframework.com/.auth/web/redirect?admin_consent=True&tenant=<TENANT-ID>"
}
}
이 오류는 무시해도 됩니다. 동의는 성공적으로 부여되었습니다. 다음 섹션의 지침을 따라 권한 부여가 완료되었는지 확인할 수 있습니다.
권한 부여 확인¶
두 애플리케이션 모두에 대한 동의를 부여한 후, Microsoft Entra ID 포털의 Enterprise applications 섹션을 확인하여 권한 부여가 완료되었는지 확인할 수 있습니다.
필요한 경우 `Microsoft Entra 관리 센터<https://entra.microsoft.com/>`_에 로그인합니다.
검색 상자에 “엔터프라이즈 애플리케이션”을 입력한 후 결과에서 :ui:`Enterprise applications`를 선택하여 엔터프라이즈 애플리케이션으로 이동합니다.
All applications 목록에서 방금 동의를 부여한 두 애플리케이션인 Snowflake Cortex Agents 봇 OAuth 리소스 및 Snowflake Cortex Agents 봇 OAuth 클라이언트를 찾습니다. 이를 수행하는 쉬운 방법은 “Snowflake Cortex Agents”를 검색하는 것입니다.
두 애플리케이션이 모두 목록에 표시되면 권한이 올바르게 부여된 것입니다. 하나 또는 두 애플리케이션 모두 누락된 경우, 다시 한 번 동의를 부여합니다.
2단계: Snowflake 보안 통합¶
Snowflake와 Microsoft Teams를 통합하려면 Snowflake 계정과 Entra ID 테넌트 간에 암호화 신뢰를 구축하는 보안 통합이 필요합니다. 이 과정에는 다음이 필요합니다.
Snowflake에서 Entra ID를 외부 OAUth 공급자로 활성화하기.
Cortex Agents 및 기타 필수 오브젝트에 대한 정의 준비하기.
에이전트를 사용할 사용자가 에이전트의 Snowflake 오브젝트에 대한 액세스 권한을 가지고 있는지 확인하기
Entra ID를 외부 OAuth 공급자로 활성화하기¶
Snowflake 보안 통합 오브젝트는 외부 OAuth 공급자와의 통합을 나타내며, 이 경우 Microsoft Entra ID를 의미합니다. 이러한 통합을 통해 Snowflake는 Microsoft Teams 또는 Copilot에 로그인한 사용자를 인증할 수 있습니다.
다음의 SQL 문은 통합을 생성하기 위한 주석이 달린 템플릿입니다. 이 명령은 ACCOUNTADMIN이 있는 역할에 의해 실행되어야 합니다. tenant-id
자리 표시자를 해당 Microsoft 테넌트 ID로 대체합니다.
CREATE OR REPLACE SECURITY INTEGRATION entra_id_cortex_agents_integration
TYPE = EXTERNAL_OAUTH
ENABLED = TRUE
EXTERNAL_OAUTH_TYPE = AZURE
EXTERNAL_OAUTH_ISSUER = 'https://login.microsoftonline.com/<tenant-id>/v2.0'
EXTERNAL_OAUTH_JWS_KEYS_URL = 'https://login.microsoftonline.com/<tenant-id>/discovery/v2.0/keys'
EXTERNAL_OAUTH_AUDIENCE_LIST = ('5a840489-78db-4a42-8772-47be9d833efe')
EXTERNAL_OAUTH_TOKEN_USER_MAPPING_CLAIM = ('email', 'upn')
EXTERNAL_OAUTH_SNOWFLAKE_USER_MAPPING_ATTRIBUTE = 'email_address'
EXTERNAL_OAUTH_ANY_ROLE_MODE = 'ENABLE'
이 명령어에 사용할 수 있는 매개 변수의 전체 참조는 :doc:`/sql-reference/sql/create-security-integration-oauth-external`을 참조하세요.
EXTERNAL_OAUTH_TOKEN_USER_MAPPING_CLAIM 및 EXTERNAL_OAUTH_SNOWFLAKE_USER_MAPPING_ATTRIBUTE 매개 변수는 Entra ID를 Snowflake ID에 연결합니다. 인증에 성공하려면, JWT에서 지정된 클레임의 값이 Snowflake의 사용자 오브젝트에 지정된 특성의 값과 정확히 일치해야 합니다. Snowflake에서 권장하는 두 가지 주요 구성은 다음과 같습니다.
사용자 주체 이름(UPN)에 의한 매핑: EXTERNAL_OAUTH_TOKEN_USER_MAPPING_CLAIM 매개 변수를 ‘upn’으로 설정하고, EXTERNAL_OAUTH_SNOWFLAKE_USER_MAPPING_ATTRIBUTE 매개 변수를 ‘LOGIN_NAME’으로 설정합니다.
이메일 주소에 의한 매핑: EXTERNAL_OAUTH_TOKEN_USER_MAPPING_CLAIM 매개 변수를 ‘email’로 설정하고, EXTERNAL_OAUTH_SNOWFLAKE_USER_MAPPING_ATTRIBUTE 매개 변수를 ‘EMAIL_ADDRESS’로 설정합니다.
위의 예시 문은 이메일 주소 매핑 구성을 사용하지만, EXTERNAL_OAUTH_TOKEN_USER_MAPPING_CLAIM 매개 변수에 UPN을 지정하여 EXTERNAL_OAUTH_SNOWFLAKE_USER_MAPPING_ATTRIBUTE만 변경해 매핑 방식을 변경할 수 있습니다.
또한 이 예시 문은 사용자의 기본 역할이 사용되도록 EXTERNAL_OAUTH_ANY_ROLE_MODE를 활성화합니다.
OAuth 범위에 대한 자세한 내용은 범위 섹션을 참조하세요.
Cortex Agent 정의 준비하기¶
보안 통합이 구성된 후에는 Snowflake 내에서 에이전트의 환경 및 정의를 준비해야 합니다. 여기에는 필요한 데이터베이스 오브젝트를 생성하고 에이전트의 로직을 단일 JSON 오브젝트 내에서 정의하는 작업이 포함됩니다. 정의는 에이전트의 지침, 해당 도구(예: Cortex Analyst 및 Cortex Search), 해당 도구를 위한 리소스를 지정합니다. 스키마 정의는 몇 가지 추가 사항이 포함된 :ref:`Cortex Agent API 요청 본문 스키마 <label-cortex-agent-rest-api-request_body>`를 따릅니다. 다음은 JSON 오브젝트의 최상위 구조입니다.
{
"model": ...,
"response_instruction": ...,
"experimental": ...
"tools": ...
"tool_resources": ...
"tool_choice": ...
"starter_prompts": ...
}
에이전트 정의를 Snowflake 스테이지에 업로드하고, 해당 에이전트를 사용할 모든 최종 사용자가 액세스할 수 있도록 합니다.
검색 결과 및 대화형 안내를 위해 두 가지 필드 옵션을 설정하여 사용자 경험을 향상할 수 있습니다.
검색 인용문에는 검색 도구의
tool_resources
정의에서 두 개의 필드 옵션을 제공하여 사람이 읽을 수 있는 제목과 출처 문서로의 직접 링크를 부여할 수 있습니다.에이전트 정의 최상위 수준의
starter_prompts
필드에서 사용자가 질문을 구성하는 데 도움을 주기 위해 시작 프롬프트를 제공할 수 있습니다.{ .... "starter_prompts": ["prompt #1", "prompt #2", ...], ... }
최종 사용자에게 필요한 권한 부여하기¶
Teams에서 최종 사용자가 Cortex Agent와 상호작용하려면, 기본 Snowflake 역할(또는 기타 지정된 역할)에 모든 기본 오브젝트에 대한 권한이 부여되어야 합니다.
Cortex Agents 항목의 :ref:`액세스 제어 요구 사항 섹션<label-cortex_agents_access_control>`에 나열된 모든 권한
에이전트의 JSON 정의가 포함된 단계에 대한 READ 액세스 권한
에이전트에 할당된 웨어하우스에 대한 USAGE 액세스 권한
3단계: Teams 앱 설정 및 Snowflake 계정 연결하기¶
통합 프로세스의 마지막 단계는 Microsoft Teams 애플리케이션을 설정하고 이를 사용할 Snowflake 사용자와 연결하는 것입니다. 이를 위해서는 다음 작업을 완료해야 합니다.
Teams 스토어에서 Cortex Agents 앱 설치
Teams 애플리케이션에 Snowflake 계정 연결
Teams 스토어에서 앱 설치¶
모든 사용자는 Microsoft Teams 스토어에서 Cortex Agents 앱을 설치해야 합니다. 앱을 설치하려면 Teams 앱 스토어에서 “Snowflake Cortex Agents”를 검색한 후, :ui:`Add`를 클릭하여 앱을 설치합니다.
참고
조직의 Microsoft Teams 정책에 따라, 사용자가 앱을 사용하기 전에 Teams 관리자의 승인이 필요할 수 있습니다. 지침은 `Teams 관리 센터의 앱 관리 및 거버넌스 개요<https://learn.microsoft.com/en-us/microsoftteams/manage-apps>`__를 참조하세요.
Teams 앱에 Snowflake 계정 연결¶
Teams에서 Cortex Agents 앱과 처음 상호작용하는 사용자에게는 Snowflake 계정을 앱에 연결하라는 메시지가 표시됩니다. 이 단계가 성공하려면 해당 사용자에게 Snowflake의 ACCOUNTADMIN 또는 SECURITYADMIN 역할이 있어야 합니다.
요약하자면, Snowflake에서 모든 사용자의 기본 역할에는 Cortex Agents 항목의 :ref:`액세스 제어 요구 사항 섹션<label-cortex_agents_access_control>`에 설명된 대로 에이전트의 오브젝트에 액세스하기 위한 필수 권한이 있어야 합니다. 또한 에이전트의 JSON 정의가 포함된 스테이지에 대한 READ 액세스 권한 및 에이전트의 웨어하우스에 대한 USAGE 액세스 권한이 필요합니다. (사용자의 기본 역할은 사용자 프로필의 DEFAULT_ROLE 설정으로 지정됩니다.)
보안 통합은 기본적으로 Snowflake의 주요 관리 역할을 차단합니다. 따라서 Teams 봇을 설정할 사용자의 기본 역할로 관리 역할(예: ACCOUNTADMIN)을 사용할 수 없습니다. 이 제한 사항에 대한 자세한 내용은 CREATE SECURITY INTEGRATION 항목의 BLOCKED_ROLES_LIST 섹션을 참조하세요.
Snowflake는 필요한 권한이 있는 전용 비관리자 역할을 생성하고 이를 설정 사용자의 기본값으로 설정할 것을 권장합니다. 또는 다음과 같이 SECONDARY ROLES 메커니즘을 사용하여 사용자의 기본 역할을 변경하지 않고 추가 권한을 부여할 수 있습니다.
GRANT ROLE <integration_specific_role> TO USER <user_name>;
ALTER USER <user_name> SET DEFAULT_SECONDARY_ROLES = ('<integration_specific_role>');
Teams 봇을 설정하려면 다음 단계를 따릅니다.
Teams 유인을 위해 관리자가 Snowflake를 구성해야 한다는 안내문 아래에 있는 :ui:`I’m the Snowflake administrator`를 클릭하면 프로세스가 시작됩니다.
지정된 위치에 Snowflake 계정 URL을 입력합니다.
이 URL을 찾으려면 Snowsight에 로그인한 후 페이지 왼쪽 하단의 계정 선택기를 클릭합니다. URL의 호스트 이름 부분이 메뉴 상단에 표시되며, 이는
your-organization-your-account
형식으로 구성됩니다. 전체 URL은 :samp:`{your-organization}-{your-account}.snowflakecomputing.com`입니다.구성 마법사는 URL이 Azure US East 2 리전의 유효한 Snowflake 인스턴스로 연결되는지 확인하고, 사용자가 해당 인스턴스에 대한 액세스 권한과 필요한 관리 권한을 보유하고 있는지 확인합니다.
참고
보안 통합이 “Microsoft Identity Platform 액세스 토큰 v2.0”을 사용하도록 설정해야 한다는 경고가 표시될 수 있습니다. 이 경고는 무시해도 됩니다. Snowflake 보안 통합 토큰 형식은 호환됩니다.
이 검증 과정을 통과하면 다음 구성 세부 정보를 요청하는 양식이 나타납니다.
계정 별칭: Teams 인터페이스에 표시되는 이 Snowflake 계정의 사용자 친화적인 이름입니다(예: “Sales Analytics”).
에이전트 정의 경로: Snowflake 스테이징 내 에이전트의 JSON 정의 파일의 정규화된 전체 경로이며,
@stage_name/path_to_definition_file
형식으로 구성됩니다(예:@my_cortex_agents/my_agent.json
).기본 웨어하우스: 에이전트가 쿼리를 실행하는 데 사용하는 Snowflake 웨어하우스의 이름입니다.
이 정보를 입력한 후 :ui:`Finalize account configuration`을 클릭합니다.
설정이 최종 검증을 통과하면 Teams 앱이 Snowflake 계정에 연결되며 에이전트를 사용할 준비가 완료됩니다.
팁
Snowflake 계정을 Cortex Teams 앱에 연결한 후에는, 필요한 권한이 있는 사용자로 Teams 앱에 로그인하고 채팅에서 “새 계정 추가” 명령을 실행하여 동일한 앱에 추가 Snowflake 계정을 연결할 수 있습니다.
Cortex Agent 사용¶
통합이 설정되면 봇이 Microsoft Teams 인터페이스에 표시되어 사용자가 개인 채팅에서 봇과 상호작용할 수 있습니다. 사용자는 자연어로 질문을 하고, 봇은 Snowflake 데이터를 기반으로 답변을 제공합니다.
Microsoft 365 Copilot에서 사용자는 보다 광범위한 워크플로 컨텍스트 내에서 에이전트와 상호작용할 수 있으며, Copilot 인터페이스 내에서 Snowflake 데이터에 관한 질문을 하고 답변을 받을 수 있습니다.
보안 고려 사항¶
Microsoft Teams용 Cortex Agents 통합은 보안성을 고려하여 설계되었으며, Snowflake의 기존 보안 기능과 Microsoft Entra ID의 인증 기능을 활용합니다. 이러한 통합을 통해 사용자 데이터가 안전하게 유지되고, Snowflake의 역할 기반 액세스 제어(RBAC) 시스템을 통해 액세스가 제어됩니다.
엔드 투 엔드 인증 흐름¶
Microsoft Teams용 Cortex Agents 통합 사용 시 보안에 미치는 영향을 이해하려면 엔드 투 엔드 인증 흐름을 파악하는 것이 중요합니다. 이 과정에는 다음 단계가 포함됩니다.
사용자 상호작용: 사용자가 Microsoft Teams에서 Snowflake Cortex Agents 봇에 메시지를 보냅니다.
인증 트리거: 봇의 백엔드 서비스(“클라이언트” 앱)가 OAuth 2.0 흐름을 시작하여 사용자를 Microsoft Entra ID로 리디렉션합니다.
사용자 인증: 사용자는 회사 자격 증명을 사용하여 Microsoft 계정에 로그인하고 해당 테넌트에서 적용하는 모든 MFA 또는 조건부 액세스 정책을 충족합니다.
토큰 발급: Entra ID는 단기 인증 코드를 제공합니다. 봇의 백엔드는 이 코드를 JWT 액세스 토큰으로 안전하게 교환합니다.
API의 Snowflake 호출: 봇 백엔드는
Authorization: Bearer
헤더에 있는 액세스 토큰을 포함하여 Snowflake Cortex 에이전트(API)를 호출합니다.Snowflake 토큰 검증: Snowflake 서비스는 요청을 수신하고 Snowflake 보안 통합 오브젝트에 정의된 정책에 따라 JWT를 검증합니다.
역할 기반 액세스 제어¶
특정 사용자 역할에서 Cortex Agents API를 사용하기 때문에, Teams 통합은 사용자가 지정한 Snowflake 역할의 정확한 권한으로 Cortex Agents 요청을 실행합니다. 에이전트는 기존 데이터 거버넌스 제어 항목을 모두 상속하며, 여기에는 다음이 포함됩니다.
역할 기반 액세스 제어: 에이전트는 사용자 역할에서 사용을 허용하는 데이터베이스, 스키마, 테이블 및 웨어하우스에만 액세스할 수 있습니다.
데이터 마스킹 정책: 에이전트는 동적 데이터 마스킹 정책을 준수하며, 사용자의 역할에서 허용하는 경우에만 액세스 권한을 부여합니다.
행 수준 액세스 정책: 에이전트는 행 수준 보안 정책을 적용합니다.
에이전트는 기존 Snowflake 보안 제어 기능을 우회할 수 없으며, 사용자는 액세스 권한이 부여되지 않은 데이터에 액세스할 수 없습니다.
현재 제한 사항¶
해당 제한 사항은 Microsoft Teams용 Cortex Agents 통합 미리 보기 릴리스에 적용됩니다. Snowflake는 향후 릴리스에서 해당 제한 사항을 해결할 계획입니다.
- OAuth ID 공급자는 Entra ID여야 함
이 통합 솔루션에는 인증을 위한 ID 공급자로 Microsoft Entra ID만 지원하며, Entra ID 사용자와 Snowflake 사용자 간의 직접적인 일대일 매핑이 필요합니다. 다른 IdPs(예: Snowflake 또는 Okta)를 사용하는 조직에서는 현재 이 통합 솔루션을 사용할 수 없습니다.
- 기본 사용자 역할 의존성
이 통합 솔루션의 기능은 Cortex Agents API의 아키텍처 제한으로 인해 각 사용자의 기본 Snowflake 역할과 연관됩니다. 이는 인증 과정에서 설정된 역할 컨텍스트를 기반으로 세션 권한을 결정합니다. 따라서 에이전트가 정상적으로 작동하려면 사용자의 기본 역할에 기본 오브젝트에 대한 모든 필요한 권한이 부여되어야 합니다. Snowflake의 SECONDARY ROLES 기능은 데이터 액세스를 확대하는 데 도움이 될 수 있지만, 주요 실행 컨텍스트는 사용자의 기본 역할에 의해 제어됩니다.
- Snowflake 계정당 하나의 에이전트 정의
이 통합 솔루션은 Teams 통합 인스턴스 및 Snowflake 계정당 하나의 Cortex Agents 정의 간에 일대일 매핑을 제공합니다. 현재 단일 Snowflake 계정에서 별개의 여러 에이전트를 노출할 수 없습니다.
- 멀티 턴 컨텍스트 없음
현재 이 통합 솔루션에서는 멀티 턴 대화 컨텍스트를 지원하지 않습니다. Teams 사용자의 각 쿼리는 별개의 상태 비저장 트랜잭션입니다. 에이전트는 이전 질문의 맥락을 기억하지 못하므로, 사용자는 각 요청에서 명시적으로 설명해야 합니다.
문제 해결하기¶
Microsoft Teams용 Cortex Agents 통합에 문제가 발생할 경우, 아래 섹션에서 가능한 해결 방법을 확인하십시오.
권한 및 액세스 문제¶
사용자의 기본 역할에는 에이전트에서 사용하거나 액세스하는 오브젝트에 액세스하기 위해 필요한 권한이 있어야 합니다. 액세스 문제로 인한 오류 메시지에는 일반적으로 “데이터베이스 오브젝트가 존재하지 않거나 권한이 없음”이라는 문구가 포함됩니다.
이러한 문제 해결에는 다음 사항을 확인하는 작업이 포함됩니다.
사용자의 기본 역할은 필요한 권한이 있는 역할로 설정됩니다.
사용자의 기본 역할에는 에이전트의 오브젝트에 대해 필요한 권한이 있으며, 여기에는 에이전트의 JSON 정의를 포함하는 스테이징 및 에이전트에 할당된 웨어하우스가 포함됩니다.
기본 역할 설정¶
액세스 문제 해결의 첫 번째 단계는 사용자의 기본 역할 설정을 확인하는 것입니다. 이 설정을 확인하려면 DESCRIBE USER 명령을 실행하고 출력에서 DEFAULT_ROLE 속성을 확인합니다. 사용자의 기본 역할이 올바르지 않은 경우, ALTER USER 명령을 사용하여 변경합니다.
ALTER USER <user_name> SET DEFAULT_ROLE = '<correct_role>';
사용자의 기본 DEFAULT_ROLE을 변경할 수 없는 경우, Snowflake의 보조 역할 메커니즘을 사용할 수 있습니다. 사용자는 자신의 기본 역할과 활성 보조 역할의 결합된 권한을 사용하여 작업을 수행할 수 있습니다. 이를 통해 사용자의 기본 역할을 변경하지 않고도 통합 전용의 추가 역할을 부여할 수 있습니다.
Cortex Agents 통합에 보조 역할을 추가하려면 다음과 같은 SQL 명령을 사용합니다. 사용자에게 이미 할당된 보조 역할을 제거하지 않도록 하려면, DESCRIBE USER 출력에서 DEFAULT_SECONDARY_ROLES 속성을 확인합니다. 통합 전용 역할을 추가하는 경우 이러한 기존 역할을 포함합니다.
DESCRIBE USER <user_name>; -- take note of DEFAULT_SECONDARY_ROLES
GRANT ROLE <integration_specific_role> TO USER <user_name>;
ALTER USER <user_name> SET DEFAULT_SECONDARY_ROLES = ('<pre_existing_role_1>', ....,
'<integration_specific_role>');
필수 권한¶
사용자의 기본 역할(또는 기본 보조 역할)에는 아래에 설명된 권한이 있어야 합니다.
SNOWFLAKE.CORTEX_USER 역할을 통한 Cortex AI 기능 액세스. 기본적으로 이 역할은 PUBLIC 역할에 부여되므로, 모든 사용자가 Cortex AI 기능에 액세스할 수 있습니다. 조직에서 SNOWFLAKE.CORTEX_USER를 PUBLIC 에서 제거한 경우, 에이전트가 실행되는 역할에 이를 명시적으로 부여해야 합니다.
에이전트가 Cortex Analyst 도구를 사용하는 경우, 해당 역할에는 다음 권한도 부여되어야 합니다.
의미 체계 모델에서 참조되는 모든 데이터베이스 및 스키마에 대한 USAGE 액세스 권한
의미 체계 모델에서 참조되는 모든 테이블 및 뷰에 대한 SELECT 액세스 권한
의미 체계 모델 파일이 포함된 스테이지에 대한 READ 액세스 권한
에이전트가 Cortex Search Service를 사용하는 경우, 해당 역할에는 사용되는 특정 서비스에 대한 USAGE 액세스 권한이 있어야 합니다.
보안 통합 문제¶
Snowflake 보안 통합은 Microsoft Entra ID 테넌트를 Snowflake 계정에 연결합니다. 이 섹션의 문제는 보안 통합과 관련이 있습니다.
OAuth 액세스 토큰이 유효하지 않음(오류 코드 390303)¶
이 오류는 보안 통합에서 하나 이상의 속성 값이 잘못되어 Snowflake가 Entra ID에서 수신한 액세스 토큰을 검증하지 못함을 나타낼 수 있습니다. 이를 해결하려면 보안 통합에서 다음 필드를 확인합니다. 특히, URLs에서 테넌트 ID가 올바른지 확인합니다.
EXTERNAL_OAUTH_ISSUER: 이는 올바른 Entra ID 발급자 URL로 설정해야 하며,
https://login.microsoftonline.com/<tenant-id>/v2.0
형식으로 구성됩니다. 여기서, :samp:`{tenant-id}`는 해당 조직의 Microsoft 테넌트 ID입니다.EXTERNAL_OAUTH_JWS_KEYS_URL: 이는 올바른 JWS 키 URL로 설정되어야 하며,
https://login.microsoftonline.com/<tenant-id>/discovery/v2.0/keys
형식으로 구성됩니다. 여기서, :samp:`{tenant-id}`는 해당 조직의 Microsoft 테넌트 ID입니다.EXTERNAL_OAUTH_AUDIENCE_LIST: 여기에는 Cortex Agents Bot OAuth 리소스 애플리케이션의 올바른 대상(애플리케이션 ID
5a840489-78db-4a42-8772-47be9d833efe
)이 포함되어야 합니다.
ALTER SECURITY INTEGRATION 명령을 사용하여 잘못된 값을 업데이트합니다.
사용자 이름 또는 비밀번호가 잘못됨(오류 코드 390304)¶
이 오류 메시지는 Entra ID에서 전송된 사용자 식별자와 Snowflake의 해당 사용자 레코드 간의 불일치를 나타냅니다. 이는 일반적으로 Entra ID가 정확히 하나의 Snowflake 사용자와 매핑되지 않기 때문입니다. 이 오류는 Snowflake 사용자가 존재하지 않는 경우(또는 매핑된 UPN이나 이메일 주소가 잘못된 경우), 매핑이 여러 Snowflake 사용자로 확인되는 경우(예: 이메일 주소를 사용하여 매핑을 수행하고 여러 사용자가 동일한 주소를 공유하는 경우)에 발생할 수 있습니다.
이 오류 메시지에는 로그인을 시도한 사용자의 UPN 및 이메일이 포함됩니다. 이 정보를 사용하여 DESCRIBE USER 명령을 통해 영향을 받은 사용자의 구성을 확인합니다. 사용자의 NAME 또는 EMAIL 속성이 해당 사용자에 대한 Entra ID의 동일 속성 값과 일치하는지 확인합니다. 이메일 주소 매핑을 사용하는 경우, Snowflake 계정의 모든 사용자에 대해 이메일 주소가 고유한지 확인합니다.
액세스 토큰에 역할이 나열되지 않거나 필터링됨(오류 코드 390317)¶
이 오류는 Snowflake가 OAuth 액세스 토큰의 정보를 기반으로 사용자에게 역할을 할당할 수 없는 경우에 발생합니다. 액세스 토큰은 session:role-any
범위로 구성되어 있으며, 이를 통해 사용자는 Snowflake에서 자신에게 할당된 모든 역할을 수행할 수 있습니다. 그러나 이러한 동작을 허용하려면 보안 통합을 명시적으로 구성해야 합니다.
DESCRIBE SECURITY INTEGRATION 명령을 사용하여 EXTERNAL_OAUTH_ANY_ROLE_MODE 속성의 값을 확인한 후, 해당 값을 ENABLE
또는 ``ENABLE_FOR_LOGIN``로 변경합니다.
DESCRIBE SECURITY INTEGRATION entra_id_cortex_agents_integration;
ALTER SECURITY INTEGRATION entra_id_cortex_agents_integration
SET EXTERNAL_OAUTH_ANY_ROLE_MODE = 'ENABLE';
연결 문자열에 지정된 역할이 이 사용자에게 부여되지 않음(오류 코드 390186)¶
이 오류는 Snowflake 보안 통합에서 사용자의 기본 역할이 보안 통합을 사용하는 것을 허용하지 않는 경우에 발생합니다.
이 문제를 해결하려면 DESCRIBE SECURITY INTEGRATION 출력에서 다음 속성을 확인합니다.
EXTERNAL_OAUTH_ALLOWED_ROLES_LIST: 해당 매개 변수가 활성화된 경우, 사용자의 기본 역할이 포함되어 있는지 확인합니다.
EXTERNAL_OAUTH_BLOCKED_ROLES_LIST: 해당 매개 변수가 활성화된 경우, 사용자의 기본 역할이 포함되어 있지 않은지 확인합니다.