Microsoft Teams 및 Microsoft 365 Copilot용 Cortex Agents

소개

대부분의 팀에게 시의적절한 데이터 인사이트를 확보한다는 것은 전용 분석 플랫폼과 커뮤니케이션 도구 간의 컨텍스트 전환을 의미하며, 이는 지연과 생산성 저하로 이어집니다. 에이전트형 AI 시스템을 Microsoft Teams에 통합하면 대화와 의사 결정이 이루어지는 지점에 직접 답변을 제공하여 기업 전반의 정보 흐름을 가속화할 수 있습니다. 그러나 안전하고 강력하면서도 직관적인 채팅 내 분석 솔루션을 구축하는 것은 상당한 과제입니다. 다행히도 Snowflake가 그런 솔루션을 구축했습니다.

Microsoft Teams 및 Microsoft 365 Copilot용 Snowflake Cortex Agents 통합은 Snowflake의 대화형 AI 에이전트를 비즈니스 커뮤니케이션 플랫폼에 포함합니다. 비즈니스 팀과 기술 분야 이외의 사용자는 간단한 자연어로 Snowflake 정형 및 비정형 데이터와 상호 작용하여 Teams 채팅이나 더 광범위한 Microsoft 365 에코시스템을 벗어나지 않고도 직접적인 답변과 시각화 정보를 받을 수 있습니다. 원활한 배포를 위해 `Microsoft AppSource<https://appsource.microsoft.com/en-us/product/Office365/WA200008996>`_에서 이러한 통합을 사용할 수 있습니다.

주요 기능

  • 자연어를 통한 원활한 분석. 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 패턴을 빌드하거나 기본 모델을 관리할 필요가 없어집니다. :doc:`Snowflake Intelligence</user-guide/snowflake-cortex/snowflake-intelligence>`에서 사용하는 동일한 에이전트를 재사용하여 반복적인 구성 및 거버넌스 노력을 기울이지 않아도 됩니다.

  • 엔터프라이즈급 보안 및 거버넌스. Snowflake의 개인정보 보호 우선 기반 위에 구축된 이 통합 솔루션은 고객이 AI 기반의 사용 사례를 자신 있게 탐색할 수 있도록 보장합니다. 이는 다음을 의미합니다.

    • 사용자 데이터는 Snowflake의 거버넌스 경계 내에서 유지됩니다. 사용자 프롬프트는 Cortex Agents API로 전송되지만, 답변 생성을 위해 쿼리되는 기본 데이터는 Snowflake의 보안 환경을 벗어나지 않습니다. 생성된 SQL 쿼리는 Snowflake 가상 웨어하우스 내에서 실행됩니다.

    • Snowflake의 개인정보 보호 및 거버넌스 기능과의 원활한 통합. 이 통합 솔루션은 Snowflake의 역할 기반 액세스 제어(RBAC)를 완전히 준수합니다. 사용자를 대신하여 실행되는 모든 쿼리는 해당 사용자에게 설정된 권한을 준수하여 사용자가 액세스 권한이 부여된 데이터만 볼 수 있도록 보장합니다.

통합 설정

Cortex Agent의 Microsoft Teams 통합 기능을 통해 조직 관리자는 여러 Snowflake 계정을 조직 내 Teams 및 Copilot 작업 공간에 연결할 수 있습니다. 통합 설정에는 아래에 요약된 몇 가지 간단한 단계가 포함됩니다.

  1. Azure 관리자가 Tenant 전체 설정 지정. 이 통합을 사용하려면 Microsoft Azure 관리자가 Microsoft Entra ID(이전의 Azure Active Directory) 테넌트 내에서 Snowflake 애플리케이션에 동의하기 위해 일회성 설정을 수행해야 합니다. 이 단계에서는 통합을 위한 보안 OAuth 2.0 인증이 가능합니다.

  2. Snowflake 보안 통합. Azure 관리자가 테넌트 전체 설정을 완료한 후, Snowflake 관리자는 Microsoft Teams 또는 M365 Copilot 애플리케이션에 연결하려는 각 개별 Snowflake 계정에 대해 보안 통합을 구성해야 합니다. 이 단계는 통합 솔루션이 각 Snowflake 계정 내에서 필요한 데이터에 안전하게 액세스할 수 있도록 보장합니다.

  3. 봇에 계정 연결하기. 보안 통합이 구성된 후 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 애플리케이션 백엔드 서비스)을 나타냅니다.

이러한 애플리케이션에 대한 동의 부여 방법은 아래에 설명되어 있습니다. 두 애플리케이션 모두 프로세스는 매우 유사하지만, 구체적인 권한과 범위는 약간 다릅니다.

권한 부여 확인

두 애플리케이션 모두에 대한 동의를 부여한 후, Microsoft Entra ID 포털의 Enterprise applications 섹션을 확인하여 권한 부여가 완료되었는지 확인할 수 있습니다.

  1. 필요한 경우 `Microsoft Entra 관리 센터<https://entra.microsoft.com/>`_에 로그인합니다.

  2. 검색 상자에 “엔터프라이즈 애플리케이션”을 입력한 후 결과에서 :ui:`Enterprise applications`를 선택하여 엔터프라이즈 애플리케이션으로 이동합니다.

  3. All applications 목록에서 방금 동의를 부여한 두 애플리케이션인 Snowflake Cortex Agents 봇 OAuth 리소스 및 Snowflake Cortex Agents 봇 OAuth 클라이언트를 찾습니다. 이를 수행하는 쉬운 방법은 “Snowflake Cortex Agents”를 검색하는 것입니다.

    두 애플리케이션이 모두 목록에 표시되면 권한이 올바르게 부여된 것입니다. 하나 또는 두 애플리케이션 모두 누락된 경우, 다시 한 번 동의를 부여합니다.

2단계: Snowflake 보안 통합

Snowflake와 Microsoft Teams를 통합하려면 Snowflake 계정과 Entra ID 테넌트 간에 암호화 신뢰를 구축하는 설정하는 :doc:`보안 통합</sql-reference/sql/create-security-integration>`이 필요합니다. 이 프로세스에는 다음이 필요합니다.

  • Snowflake에서 Entra ID를 외부 OAuth 공급자로 활성화하기.

  • 통합을 위해 하나 이상의 Cortex Agent 오브젝트를 선택하거나 생성하기.

  • 의도한 사용자가 에이전트를 호출할 수 있도록 필수 역할 및 권한 부여하기.

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'
Copy

이 명령어에 사용할 수 있는 매개 변수의 전체 참조는 :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 범위에 대한 자세한 내용은 범위 섹션을 참조하세요.

사용자 프로비저닝 요구 사항

앞서 설명한 매핑 구성을 사용하여 인증을 성공적으로 수행하려면 다음 요구 사항이 충족되는지 확인하세요.

  • Entra ID 사용자와 Snowflake 사용자 사이에는 엄격한 일대일 매핑이 존재합니다. 통합을 사용할 모든 Entra ID 사용자에 대해 Snowflake 사용자를 지정하거나 생성합니다.

  • 각 Entra ID 사용자는 정확히 한 명의 Snowflake 사용자에게 매핑됩니다. 이메일 매핑의 경우 Entra ID 기본 이메일은 Snowflake 사용자의 EMAIL_ADDRESS와 정확히 일치해야 합니다. UPN 매핑의 경우 Entra ID UPN은 Snowflake 사용자의 LOGIN_NAME과 정확히 일치해야 합니다.

수동 관리 노력을 줄이기 위해 Entra ID와 Snowflake 간의 자동 사용자 프로비저닝 및 프로비저닝 해제를 선택적으로 구성할 수 있습니다. `자동 프로비저닝 구성<https://learn.microsoft.com/en-us/entra/identity/saas-apps/snowflake-provisioning-tutorial>`_을 참조하세요.

Cortex Agent 생성 및 구성

보안 통합을 생성한 후 하나 이상의 :doc:`Cortex Agent 오브젝트</user-guide/snowflake-cortex/cortex-agents-rest-api>`가 Teams 또는 Microsoft 365 Copilot 통합에 사용할 Snowflake 계정에 존재하는지 확인합니다.

사용하려는 작동 중인 에이전트가 이미 있는 경우 이 단계에서 추가 작업이 필요하지 않습니다.

새 에이전트를 만들려면 :ref:`지침<label_snowflake_agents_create>`을 따르세요.

참고

이미 Snowflake Intelligence를 사용 중이고 해당 환경을 위한 에이전트를 만든 경우 Microsoft Teams 및 Microsoft 365 Copilot 통합을 통해 해당 에이전트를 재사용할 수 있습니다. 따라서 다시 만들거나 재구성할 필요가 없습니다. 에이전트에 대한 모든 변경 사항(예: 지침, 도구, 기본 오브젝트 또는 권한)은 세 가지 인터페이스 모두에서 즉시 반영됩니다.

사용자에게 필수 권한 부여

통합을 실행할 역할(각 사용자의 기본 역할 또는 허용된 보조 역할)에 :ref:`액세스 제어 요구 사항 섹션<label-cortex_agents_access_control>`에 설명된 권한이 있는지 확인합니다.

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>`에 설명된 대로 에이전트의 오브젝트에 액세스할 수 있는 필수 권한이 있어야 합니다.

보안 통합은 기본적으로 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 = ('ALL');
Copy

Teams 봇을 설정하려면 다음 단계를 따릅니다.

  1. Teams 유인을 위해 관리자가 Snowflake를 구성해야 한다는 안내문 아래에 있는 :ui:`I’m the Snowflake administrator`를 클릭하면 프로세스가 시작됩니다.

  2. 지정된 위치에 Snowflake 계정 URL을 입력하고 :ui:`Connect Snowflake account`를 선택합니다.

    계정 URL을 찾으려면 Snowsight에 로그인하고 페이지의 왼쪽 하단 모서리에 있는 계정 선택기를 클릭합니다. URL의 호스트 이름 부분이 메뉴 상단에 표시되며 형식은 :samp:`{your-organization}-{your-account}`입니다. 전체 URL은 :samp:`{your-organization}-{your-account}.snowflakecomputing.com`입니다.

    구성 마법사는 URL이 Azure US East 2 리전의 유효한 Snowflake 인스턴스로 연결되는지 확인하고, 사용자가 해당 인스턴스에 대한 액세스 권한과 필요한 관리 권한을 보유하고 있는지 확인합니다.

설정이 최종 유효성 검사를 통과하면 Teams 앱이 Snowflake 계정에 연결되며 에이전트를 사용할 준비가 완료됩니다.

Snowflake 계정을 Cortex Teams 앱에 연결한 후에는, 필요한 권한이 있는 사용자로 Teams 앱에 로그인하고 채팅에서 “새 계정 추가” 명령을 실행하여 동일한 앱에 추가 Snowflake 계정을 연결할 수 있습니다.

Cortex Agent 사용

통합이 설정되면 봇이 Microsoft Teams 인터페이스에 표시되어 사용자가 개인 채팅에서 봇과 상호 작용할 수 있습니다. 사용자는 자연어로 질문할 수 있으며 봇은 Snowflake 데이터를 기준으로 답변을 제공합니다.

Microsoft 365 Copilot에서 사용자는 더 광범위한 워크플로 컨텍스트 내에서 에이전트와 상호 작용할 수 있으며, Copilot 인터페이스 내에서 Snowflake 데이터에 관한 질문을 하고 답변을 받을 수 있습니다.

답변에 대한 피드백(Teams만 해당)

사용자는 Microsoft Teams 인터페이스에서 바로 에이전트의 응답에 대한 정성적인 피드백을 제공할 수 있습니다(예: 답변이 유용하거나 유용하지 않다고 표시하고 선택적으로 설명을 추가). 사용자는 이전에 제출한 피드백을 검토할 수도 있습니다. 자세한 지침은 에이전트에 대한 사용자 피드백 보기 섹션을 참조하십시오.

참고

피드백 기능은 Microsoft Teams에서만 사용할 수 있으며 Microsoft 365 Copilot 환경에서는 지원되지 않습니다.

계정과 에이전트 간 전환

여러 Snowflake 계정을 통합에 연결할 수 있습니다. 연결된 각 계정은 하나 이상의 Cortex Agent를 노출할 수 있습니다. 계정이 연결되면 사용자는 클릭 한 번으로 Teams UI에서 계정과 에이전트 사이를 전환할 수 있습니다. 다시 인증하거나 연결 세부 정보를 다시 입력할 필요가 없습니다. 계정과 에이전트 사이를 전환하면 각 사용자의 보안 컨텍스트를 유지하면서 비즈니스 도메인(예: 영업 및 마케팅) 간에 인사이트를 더 쉽게 비교할 수 있습니다.

UI 대신 명령 상호 작용을 선호하는 경우 대화식으로(예: “choose agent” 입력) 계정의 에이전트 사이를 전환할 수도 있습니다.

보안 고려 사항

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 보안 제어 기능을 우회할 수 없으며, 사용자는 액세스 권한이 부여되지 않은 데이터에 액세스할 수 없습니다.

현재 제한 사항

OAuth ID 공급자는 Entra ID여야 함

이 통합 솔루션에는 인증을 위한 ID 공급자로 Microsoft Entra ID만 지원하며, Entra ID 사용자와 Snowflake 사용자 간의 직접적인 일대일 매핑이 필요합니다. 다른 기본 IdP(예: Okta 또는 다른 SAML/OIDC 공급자)를 사용하는 조직은 해당 공급자와 Microsoft Entra ID 간의 표준 ID 페더레이션을 구성하여 이 통합을 활성화할 수 있습니다. 이 페더레이션 모델에서 기본 IdP는 사용자의 로그인을 처리하며, 이후 Entra ID가 통합에 필요한 최종 토큰을 발급합니다.

기본 사용자 역할 의존성

이 통합 솔루션의 기능은 Cortex Agents API의 아키텍처 제한으로 인해 각 사용자의 기본 Snowflake 역할과 연관됩니다. 이는 인증 과정에서 설정된 역할 컨텍스트를 기반으로 세션 권한을 결정합니다. 따라서 에이전트가 정상적으로 작동하려면 사용자의 기본 역할에 기본 오브젝트에 대한 모든 필요한 권한이 부여되어야 합니다. Snowflake의 SECONDARY ROLES 기능은 데이터 액세스를 확대하는 데 도움이 될 수 있지만, 주요 실행 컨텍스트는 사용자의 기본 역할에 의해 제어됩니다.

문제 해결하기

Microsoft Teams용 Cortex Agents 통합에 문제가 발생할 경우, 다음 섹션에서 가능한 해결 방법을 확인하세요.

권한 및 액세스 문제

사용자의 기본 역할에는 에이전트에서 사용하거나 액세스하는 오브젝트에 액세스하기 위해 필요한 권한이 있어야 합니다. 액세스 문제로 인한 오류 메시지에는 일반적으로 “데이터베이스 오브젝트가 존재하지 않거나 권한이 없음”이라는 문구가 포함됩니다.

이러한 문제를 해결하려면 사용자의 기본 역할이 필수 권한을 보유한 역할로 설정되어 있는지 확인해야 합니다.

기본 역할 설정

액세스 문제를 해결하는 첫 번째 단계는 사용자의 기본 역할 설정을 확인하는 것입니다. 이 설정을 확인하려면 DESCRIBE USER 명령을 사용합니다. 그리고 출력의 DEFAULT_ROLE 속성을 확인합니다. 사용자의 기본 역할이 올바르지 않은 경우 ALTER USER 명령을 사용하여 변경합니다.

ALTER USER <user_name> SET DEFAULT_ROLE = '<correct_role>';
Copy

사용자의 기본 DEFAULT_ROLE을 변경할 수 없는 경우, Snowflake의 보조 역할 메커니즘을 사용할 수 있습니다. 사용자는 자신의 기본 역할과 활성 보조 역할의 결합된 권한을 사용하여 작업을 수행할 수 있습니다. 이를 통해 사용자의 기본 역할을 변경하지 않고도 통합 전용의 추가 역할을 부여할 수 있습니다.

Cortex Agents 통합에 보조 역할을 추가하려면 다음과 같은 SQL 명령을 사용합니다.

GRANT ROLE <integration_specific_role> TO USER <user_name>;
ALTER USER <user_name> SET DEFAULT_SECONDARY_ROLES = ('ALL');
Copy

필수 권한

통합을 실행할 역할(각 사용자의 기본 역할 또는 허용된 보조 역할)에 :ref:`액세스 제어 요구 사항 섹션<label-cortex_agents_access_control>`에 설명된 권한이 있는지 확인합니다.

보안 통합 문제

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';
Copy

연결 문자열에 지정된 역할이 이 사용자에게 부여되지 않음(오류 코드 390186)

이 오류는 Snowflake 보안 통합에서 사용자의 기본 역할이 보안 통합을 사용하는 것을 허용하지 않는 경우에 발생합니다.

이 문제를 해결하려면 DESCRIBE SECURITY INTEGRATION 출력에서 다음 속성을 확인합니다.

  • EXTERNAL_OAUTH_ALLOWED_ROLES_LIST: 해당 매개 변수가 활성화된 경우, 사용자의 기본 역할이 포함되어 있는지 확인합니다.

  • EXTERNAL_OAUTH_BLOCKED_ROLES_LIST: 해당 매개 변수가 활성화된 경우, 사용자의 기본 역할이 포함되어 있지 않은지 확인합니다.