통합 인증에 대한 Azure 서비스와 Python 앱의 연동 자습서

Azure Key Vault와 함께 사용되는 Microsoft Entra ID는 액세스 키 또는 자격 증명이 필요한 Azure 서비스 및 타사 플랫폼 모두에 애플리케이션을 인증하기 위한 강력하고 안전한 접근 방식을 제공합니다. 이 조합을 사용하면 관리 ID, RBAC(역할 기반 액세스 제어) 및 Key Vault를 통한 중앙 집중식 비밀 관리에 의존하는 대신 애플리케이션 코드에서 비밀을 하드 코딩할 필요가 없습니다. 이 방법은 ID 관리를 간소화하고 클라우드 환경의 보안 태세를 향상시킵니다.

이 연습에서는 GitHub 리포지토리: github.com/Azure-Samples/python-integrated-authentication 제공된 실제 예제를 통해 이러한 인증 메커니즘을 살펴봅니다.

이 샘플에서는 Python 애플리케이션이 다음을 수행할 수 있는 방법을 보여 줍니다.

  • DefaultAzureCredential을 사용하여 Azure로 인증

  • 자격 증명을 저장하지 않고 Azure Key Vault 비밀에 액세스

  • Azure Storage, Cosmos DB 등과 같은 다른 Azure 서비스와 안전하게 통신

이 문서는 Azure Python SDK azure-identity 라이브러리를 사용하여 Microsoft Entra ID, Azure Key Vault 및 Azure Queue Storage를 사용하여 Python 앱을 인증하는 방법에 대한 자세한 연습을 제공하는 시리즈의 일부입니다.

1부: 배경

많은 Azure 서비스는 RBAC(역할 기반 액세스 제어)에만 의존하지만, 다른 서비스는 비밀이나 키를 통해 액세스해야 합니다. 이러한 서비스에는 Azure Storage, 데이터베이스, Foundry 도구, Key Vault 및 Event Hubs가 포함됩니다.

이러한 서비스와 상호 작용하는 클라우드 애플리케이션을 빌드할 때 개발자는 Azure Portal, CLI 또는 PowerShell을 사용하여 서비스별 액세스 키를 생성하고 구성할 수 있습니다. 이러한 키는 무단 액세스를 방지하기 위해 특정 액세스 정책에 연결됩니다. 그러나 이 모델을 사용하려면 애플리케이션이 지루하고 오류가 발생하기 쉬운 프로세스인 각 서비스에서 키를 명시적으로 관리하고 별도로 인증해야 합니다.

코드에 직접 비밀을 포함하거나 개발자 컴퓨터에 저장하면 다음과 같은 위험에 노출될 수 있습니다.

  • 소스 제어
  • 안전하지 않은 로컬 환경
  • 실수로 생성된 로그 또는 구성 내보내기

Azure 보안을 개선하고 인증을 간소화하는 두 가지 주요 서비스를 제공합니다.

  • Azure Key Vault Azure Key Vault는 액세스 키, 연결 문자열 및 인증서를 비롯한 비밀을 위한 안전한 클라우드 기반 저장소를 제공합니다. 런타임에만 Key Vault에서 비밀을 검색하여 애플리케이션은 소스 코드 또는 구성 파일에서 중요한 데이터를 노출하지 않습니다.

  • Microsoft Entra 관리 ID를 사용하면 애플리케이션이 Microsoft Entra ID로 한 번 인증할 수 있습니다. 여기에서 자격 증명을 직접 관리하지 않고 Key Vault를 포함한 다른 Azure 서비스에 액세스할 수 있습니다.

이 방법은 다음을 제공합니다.

  • 자격 증명 없는 코드(소스 제어에 비밀 없음)
  • Azure 서비스와 원활하게 통합
  • 환경 일관성: 최소한의 구성으로 로컬 및 클라우드에서 동일한 코드가 실행됩니다.

이 연습에서는 동일한 앱에서 Microsoft Entra 관리 ID 및 Key Vault를 함께 사용하는 방법을 보여 줍니다. Microsoft Entra ID와 Key Vault를 함께 사용하면 앱이 개별 Azure 서비스에서 인증할 필요가 없으며 타사 서비스에 필요한 모든 키에 쉽고 안전하게 액세스할 수 있습니다.

중요합니다

이 문서에서는 일반 용어인 "키"를 사용하여 REST API에 대한 액세스 키와 같이 Azure Key Vault에 "비밀"로 저장된 항목을 참조합니다. 이 사용은 Key Vault의 비밀과는 별개의 기능인 Key Vault의 암호화 키 관리와 혼동해서는 안 됩니다.

클라우드 앱 시나리오 예제

Azure의 인증 프로세스를 더 자세히 이해하려면 Flask 웹 애플리케이션이 Azure App Service에 배포되는 시나리오를 고려하세요. HTTP 요청에 대한 응답으로 JSON 데이터를 반환하는 인증되지 않은 공용 API 엔드포인트를 노출합니다.

  • 응답을 생성하기 위해 API는 액세스 키가 필요한 타사 API를 호출합니다. 앱은 코드 또는 구성 파일에 이 키를 저장하는 대신 Microsoft Entra 관리 ID를 사용하여 Azure Key Vault에서 런타임에 안전하게 검색합니다.

  • 클라이언트에 응답을 반환하기 전에 앱은 비동기 처리를 위해 Azure Storage 큐에 메시지를 씁니다. 다운스트림 처리가 이 시나리오의 초점이 아니지만 메시지는 작업, 로그 또는 신호를 나타낼 수 있습니다.

애플리케이션 시나리오 다이어그램

비고

공용 API 엔드포인트는 일반적으로 자체 액세스 키 또는 인증 메커니즘에 의해 보호되지만 이 연습에서는 엔드포인트가 열려 있고 인증되지 않은 것으로 가정합니다.

이 간소화는 외부 클라이언트와 관련된 인증 문제에서 Azure Key Vault 액세스 및 Azure Storage 액세스와 같은 앱의 내부 인증 요구 사항을 격리하는 데 도움이 됩니다.

이 시나리오는 앱의 동작에만 초점을 맞추고 엔드포인트를 사용하여 인증하는 외부 호출자를 보여 주거나 포함하지 않습니다.