HTTPS를 통해 Azure MCP Server 를 자체 호스팅 원격 서버로 배포합니다. 이 설정을 사용하면 Microsoft Foundry 및 Microsoft Copilot Studio 의 AI 에이전트가 배포된 Azure MCP Server를 사용하여 MCP 도구에 안전하게 연결하고 호출하여 Azure 작업을 실행할 수 있습니다. 이 문서에서는 Copilot Studio 연결 시나리오에 중점을 둡니다.
필수 조건
- 다음을 포함하는 Power Platform 라이선스:
- Copilot Studio
- 파워 앱스 (Power Apps)
- 소유자 또는 사용자 액세스 관리자 권한이 있는 Azure 구독
- Azure Developer CLI(azd)
- 사용하도록 설정하려는 Azure MCP Server 도구 영역(네임스페이스) 목록입니다( azmcp-commands.md 참조). 이 문서의 참조 템플릿은 네임스페이스를
storage사용합니다.
Azure MCP Server 템플릿
이 문서에서는 Copilot Studio 에이전트 템플릿이 있는 Azure MCP Server - ACA를 사용하여 Azure Container Apps에 서버를 배포합니다.azd 템플릿을 사용하면 Azure Storage에 안전하게 액세스할 수 있도록 스토리지 도구 및 관리 ID를 사용할 수 있습니다. Azure 개발자 CLI(azd)는 Azure 리소스 프로비저닝 및 배포를 간소화하고 개발 워크플로의 주요 단계에 매핑되는 간결한 명령(azd deploy, azd provision)을 제공하는 오픈 소스 도구입니다.
Azure MCP 서버 배포
Azure Container Apps에 Azure MCP 서버를 배포합니다.
를 사용하여
azmcp-copilot-studio-aca-mi템플릿을azd복제하고 초기화합니다.azd init -t azmcp-copilot-studio-aca-mi메시지가 표시되면 환경 이름을 입력합니다.
명령을 사용하여 템플릿을 실행합니다
azd up.azd upazd에서는 다음을 입력하라는 메시지를 표시합니다.- 구독: 프로비전된 리소스에 대한 구독을 선택합니다(아래 나열됨).
- 리소스 그룹: 리소스를 만들 리소스 그룹입니다. 이 단계에서 요청 시 새 리소스 그룹을 만들 수 있습니다.
azd 템플릿 파일을 사용하여 다음 리소스 및 구성을 프로비전합니다.
- Azure Container App: Azure MCP 서버를 실행하고 스토리지 네임스페이스를 제공합니다.
- 사용자 할당 관리 ID: 구독 읽기 권한자 역할이 컨테이너 앱에 할당되고 Azure MCP 서버가 도구를 호출하는 데 사용하는 관리 ID입니다.
- Entra 앱 등록(클라이언트): Power Apps 사용자 지정 커넥터가 원격 Azure MCP 서버에 연결할 수 있도록 필요한 단계입니다.
- Application Insights: 원격 분석 및 모니터링을 제공합니다.
배포 출력 및 구성
배포가 완료되면
azd명령을 사용하여azd env get-values환경 변수를 검색합니다.azd env get-values예제 출력:
AZURE_RESOURCE_GROUP="<your-resource-group-name>" AZURE_SUBSCRIPTION_ID="<your-subscription-id>" AZURE_TENANT_ID="<your-tenant-id>" CONTAINER_APP_NAME="<your-container-app-name>" CONTAINER_APP_URL="https://azure-mcp-storage-server.<your-container-app-name>.westus3.azurecontainerapps.io" ENTRA_APP_CLIENT_CLIENT_ID="<your-client-app-registration-client-id>" ENTRA_APP_SERVER_CLIENT_ID="<your-server-app-registration-client-id>"또한 만든 API 범위를 클라이언트 앱 등록 권한 중 하나로 추가해야 합니다. Azure 포털로 이동하여
ENTRA_APP_CLIENT_CLIENT_ID출력 값을 사용하여 클라이언트 앱 등록을 검색합니다.API 권한 블레이드로 이동하여 권한 추가를 선택합니다.
내 API 탭에서 서버 앱 등록 을 선택하고 범위를 추가합니다
Mcp.Tools.ReadWrite.
Copilot Studio 에이전트에서 도구 호출
Copilot Studio 에이전트는 사용자 지정 커넥터를 사용하여 MCP 서버에 연결합니다.
사용자 지정 커넥터 구성
- Power Apps에 로그인하고 사용자 지정 커넥터를 호스트할 환경을 선택합니다.
- 빈 위치에서 만들기 옵션을 사용하여 새 사용자 지정 커넥터를 만듭니다. 사용자 지정 커넥터 구성에 대한 자세한 내용은 처음부터 사용자 지정 커넥터 만들기를 참조하세요.
- 커넥터 만들기 워크플로의 각 단계에 대해 다음 섹션을 완료합니다.
General
일반 단계에서 다음을 수행합니다.
- 맞춤 커넥터에 대한 자세한 이름과 설명을 제공하십시오.
-
스키마를
HTTPS로 설정합니다. -
호스트를 출력의
CONTAINER_APP_URL값으로azd설정합니다.
Security
지금은 보안 단계를 건너뛰고 정의 단계를 진행합니다.
Definition
Swagger 편집기를 전환하여 편집기 모드로 전환합니다.
편집기 보기에서 다음을 수행합니다.
사용자 지정
x-ms-agentic-protocol: mcp-streamable-1.0속성을 사용하여 루트 경로에 POST 메서드를 노출합니다. 이 속성은 사용자 지정 커넥터가 MCP 프로토콜을 사용하여 API와 상호 작용하는 데 필요합니다.비고
사용자 지정 커넥터의 스웨거(swaggers) 예제를 참조 템플릿으로 참조하세요.
사용자 지정 커넥터: 보안
보안 단계로 돌아가서 인증을 구성합니다.
| 매개 변수 | 가치 | 비고 |
|---|---|---|
| 인증 유형 | OAuth 2.0 | 필수 |
| ID 공급자 | 애저 액티브 디렉터리 | 필수 |
| 클라이언트 ID | azd 출력의 ENTRA_APP_CLIENT_CLIENT_ID에서 |
클라이언트 앱 등록 ID |
| 비밀 옵션 | 클라이언트 암호 사용 또는 관리 ID 사용 | 설치는 아래를 참조하세요. |
| 권한 부여 URL | https://login.microsoftonline.com |
기본값 |
| 테넌트 ID |
AZURE_TENANT_ID azd 출력에서 |
Azure 테넌트 ID |
| 리소스 URL |
ENTRA_APP_SERVER_CLIENT_ID azd 출력에서 |
서버 앱 등록 클라이언트 ID(URL 아님) |
| 대리 로그인 | 활성화됨 | 필수 |
| Scope | <ENTRA_APP_SERVER_CLIENT_ID>/.default |
형식: {server_client_id}/.default |
비밀 옵션 설정:
- 클라이언트 암호를 사용하는 경우: 클라이언트 앱 등록(Azure Portal)에서 클라이언트 비밀을 만듭니다. 비밀 값을 복사하여 클라이언트 비밀 필드에 붙여넣습니다.
- 관리 ID를 사용하는 경우: 사용자 지정 커넥터를 만들 때까지 나머지 단계를 진행합니다.
동일한 테넌트 요구 사항: 간소화된 인증을 위해서는 클라이언트 및 서버 앱 등록이 동일한 테넌트에 있어야 합니다. 테넌트 간의 시나리오에 대해서는 알려진 문제를 참조하십시오.
커넥터 만들기를 선택하고 완료될 때까지 기다립니다. 만든 후 UI는 리디렉션 URL을 표시하고, 선택한 경우 관리 ID를 표시합니다.
앱 등록: 리디렉션 URI 및 자격 증명 구성
Azure Portal에서 클라이언트 앱 등록의 웹 플랫폼 아래에 리디렉션 URI를 추가합니다.
보안 단계에서 관리 ID 사용을 선택한 경우 클라이언트 앱 등록에서 페더레이션 자격 증명을 만듭니다.
- 시나리오로 다른 발급자를 선택합니다.
-
issuer사용자 지정 커넥터의 값과subject값을 자격 증명 필드로 복사합니다. - 설명이 포함된 이름 및 설명을 입력한 다음 추가를 선택합니다.
연결 테스트
사용자 지정 커넥터를 열고 편집을 선택한 다음 테스트 단계로 이동합니다.
작업을 선택하고 새 연결을 선택합니다.
MCP 도구에 액세스하는 데 사용할 사용자 계정으로 로그인합니다. 동의를 요청하는 대화 상자 또는 관리자 승인 프롬프트가 표시될 수 있습니다. 확실하지 않은 경우 알려진 문제를 참조하세요.
로그인에 성공하면 UI에 연결이 성공적으로 생성되었음을 보여 줍니다. 로그인하는 동안 오류가 발생하면 알려진 문제를 참조하고 테넌트 관리자에게 문제를 해결합니다.
Copilot Studio 테스트 플레이그라운드에서 Azure MCP 도구 호출
Copilot Studio에 로그인하고 Copilot Studio 에이전트를 호스트할 환경을 선택합니다. 새 에이전트를 만들거나 기존 에이전트를 사용합니다.
에이전트 세부 정보를 열고 도구 탭을 선택합니다.
도구 추가를 선택합니다.
사용자 지정 커넥터 이름을 검색하고 추가합니다.
사용자 지정 커넥터를 추가한 후 Copilot Studio 에이전트는 MCP 서버에서 도구를 나열하려고 시도합니다. 성공하면 커넥터 아래에 사용 가능한 도구 목록이 표시됩니다.
테스트를 선택하여 테스트 플레이그라운드 세션을 시작합니다.
에이전트에게, 예를 들어 구독의 스토리지 계정을 나열하기 위해 MCP 도구를 호출하도록 지시합니다.
자원을 정리하세요
이 템플릿이 필요하지 않을 때 만든 Azure 리소스를 삭제하려면 다음 명령을 실행합니다.
azd down
비고
azd 에서는 이 템플릿에서 만든 Entra 앱 등록을 삭제할 수 없습니다. Azure Portal에서 ENTRA_APP_CLIENT_CLIENT_ID 값과 ENTRA_APP_SERVER_CLIENT_ID 값을 검색하여 Entra 앱 등록을 찾아 해당 앱 등록을 삭제합니다.
Copilot Studio 에이전트, Power Apps 사용자 지정 커넥터 및 연결을 삭제하여 Power Platform 리소스를 정리합니다.
템플릿 구조
템플릿에는 azd 다음의 Bicep 모듈이 포함됩니다.
-
main.bicep- 모든 리소스의 배포를 오케스트레이션합니다. -
aca-storage-managed-identity.bicep- 사용자 할당 관리 ID를 만듭니다. -
aca-storage-subscription-role.bicep- 사용자가 할당한 관리 ID에 Azure RBAC 역할을 할당합니다. 기본값은 구독 읽기 권한자 역할입니다. -
aca-infrastructure.bicep- Azure MCP 서버를 호스팅하는 컨테이너 앱을 배포합니다. -
entra-app.bicep- Entra 앱 등록을 만듭니다. -
application-insights.bicep- 사용하도록 설정된 경우 원격 분석 및 모니터링을 위해 Application Insights를 배포합니다.
알려진 문제
- 단일 테넌트 요구 사항: Power Apps 사용자 지정 커넥터는 여러 테넌트의 사용자 인증을 지원하지 않으므로 테넌트의 사용자만 허용하도록 클라이언트 앱 등록을 설정합니다.
-
동의 옵션: 인증하는 동안 사용자 또는 테넌트 관리자는 클라이언트 앱에 데이터에 대한 액세스 권한을 부여합니다.
애플리케이션 동의 환경에서 자세히 알아봅니다. 다음과 같은 여러 가지 방법으로 동의를 제공할 수 있습니다.
- 사용자는 로그인하는 동안 해당 사용자에 대한 동의를 제공할 수 있습니다. 테넌트 보안 정책이 이를 차단할 수 있습니다.
- 테넌트 관리자는 Azure Portal의 API 권한 블레이드에서 클라이언트 앱 등록의 테넌트에 있는 모든 사용자에 대한 동의를 제공할 수 있습니다.
- Azure Portal의 API 노출 블레이드에서 서버 앱 등록에서 클라이언트 앱 등록을 사전 인증된 클라이언트 앱으로 추가합니다.
-
테넌트 간 시나리오: 클라이언트 앱 등록 및 서버 앱 등록이 다른 테넌트에 있는 경우 연결을 만들려고 할 때 다음 오류가 표시될 수 있습니다.
- "앱이 귀하의 조직 'client_app_registration_tenant'에 서비스 주체가 없는 서비스 'server_app_registration_client_id'(server_app_registration_display_name)에 액세스하려고 하고 있습니다."
-
해결 방법: 클라이언트 앱 등록의 테넌트 관리자는 해당 테넌트에서 서버 앱 등록에 대한 서비스 주체를 프로비전해야 합니다.
az ad sp create --id <server_app_registration_client_id> - 프로비전한 후 연결을 다시 만듭니다. 동의 흐름이 트리거됩니다.
- Power Apps 환경에 테넌트 격리 정책이 있는 경우 클라이언트 또는 서버 앱 등록이 다른 테넌트에 있을 때 데이터 흐름을 차단합니다. 테넌트 간 제한에서 이 데이터 흐름을 허용하는 예외 규칙을 추가하는 방법을 알아봅니다.