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 액세스와 같은 앱의 내부 인증 요구 사항을 격리하는 데 도움이 됩니다.
이 시나리오는 앱의 동작에만 초점을 맞추고 엔드포인트를 사용하여 인증하는 외부 호출자를 보여 주거나 포함하지 않습니다.