Python용 Azure SDK를 사용하여 Azure 서비스에 Python 앱 인증

애플리케이션이 Azure Storage, Azure Key Vault 또는 Azure AI 서비스와 같은 Azure 리소스에 액세스해야 하는 경우 애플리케이션을 Azure에 인증해야 합니다. 이 요구 사항은 Azure에 배포되거나, 온-프레미스에 배포되거나, 로컬 개발자 워크스테이션에서 개발 중인 모든 애플리케이션에 적용됩니다. 이 문서에서는 Python용 Azure SDK를 사용할 때 Azure에 앱을 인증하는 데 권장되는 방법을 설명합니다.

앱이 Azure 리소스에 인증할 때 앱에 연결 문자열 대신 토큰 기반 인증을 사용합니다. Python용 Azure SDK는 토큰 기반 인증을 지원하는 클래스를 제공합니다. 앱은 로컬 개발 중이든, Azure에 배포되거나, 온-프레미스 서버에 배포되는지 여부에 관계없이 Azure 리소스에 원활하게 인증할 수 있습니다.

앱이 Azure 리소스에 인증하는 데 사용하는 특정 유형의 토큰 기반 인증은 앱이 실행되는 위치에 따라 달라집니다. 토큰 기반 인증 유형은 다음 다이어그램에 나와 있습니다.

A diagram that shows the recommended token-based authentication strategies for an app depending on where it's running.

  • 개발자가 로컬 개발 중에 앱을 실행하는 경우: 앱은 로컬 개발용 애플리케이션 서비스 주체 또는 개발자의 Azure 자격 증명을 사용하여 Azure에 인증합니다. 이러한 옵션은 로컬 개발 중 인증 섹션에서 설명합니다.
  • 앱이 Azure에서 호스트되는 경우: 앱은 관리 ID를 사용하여 Azure 리소스에 인증합니다. 이 옵션은 서버 환경의 인증 섹션에서 설명합니다.
  • 앱이 온-프레미스에서 호스트되고 배포되는 경우: 앱은 애플리케이션 서비스 주체를 사용하여 Azure 리소스에 인증합니다. 이 옵션은 서버 환경의 인증 섹션에서 설명합니다.

DefaultAzureCredential

Azure SDK에서 제공하는 DefaultAzureCredential 클래스를 사용하면 앱이 실행되는 환경에 따라 다른 인증 방법을 사용할 수 있습니다. 이러한 방식으로 앱을 로컬 개발에서 테스트 환경으로 코드 변경 없이 프로덕션으로 승격할 수 있습니다.

각 환경에 대해 적절한 인증 방법을 구성하고 DefaultAzureCredential 해당 인증 방법을 자동으로 검색하고 사용합니다. DefaultAzureCredential 조건부 논리 또는 기능 플래그를 수동으로 코딩하여 다른 환경에서 다양한 인증 방법을 사용하는 것이 좋습니다.

클래스 사용에 DefaultAzureCredential 대한 자세한 내용은 애플리케이션에서 DefaultAzureCredential 사용 섹션에서 설명합니다.

토큰 기반 인증의 이점

Azure용 앱을 빌드할 때 연결 문자열 사용하는 대신 토큰 기반 인증을 사용합니다. 토큰 기반 인증은 연결 문자열 인증보다 다음과 같은 이점을 제공합니다.

  • 이 문서에 설명된 토큰 기반 인증 방법을 사용하면 Azure 리소스에서 앱에 필요한 특정 권한을 설정할 수 있습니다. 이 방법은 최소 권한의 원칙을 따릅니다. 반면에 연결 문자열은 Azure 리소스에 대한 모든 권한을 부여합니다.
  • 연결 문자열 있는 모든 앱은 Azure 리소스에 연결할 수 있지만 토큰 기반 인증 방법은 리소스에 액세스하려는 앱으로만 리소스에 대한 액세스 범위를 지정합니다.
  • 관리 ID를 사용하면 저장할 애플리케이션 비밀이 없습니다. 손상될 수 있는 연결 문자열 또는 애플리케이션 비밀이 없으므로 앱이 더 안전합니다.
  • Azure SDK의 azure.identity 패키지는 백그라운드에서 토큰을 관리합니다. 관리되는 토큰은 토큰 기반 인증을 연결 문자열 사용하기 쉽습니다.

프로덕션 또는 중요한 데이터에 액세스하지 않는 초기 개념 증명 앱 또는 개발 프로토타입으로 연결 문자열 사용을 제한합니다. 그렇지 않으면 Azure 리소스에 인증할 때 Azure SDK에서 사용할 수 있는 토큰 기반 인증 클래스가 항상 선호됩니다.

서버 환경에서의 인증

서버 환경에서 호스팅하는 경우 각 애플리케이션에는 애플리케이션이 실행되는 환경당 고유한 애플리케이션 ID 가 할당됩니다. Azure에서 앱 ID는 서비스 주체표시됩니다. 이 특수한 유형의 보안 주체는 앱을 식별하고 Azure에 인증합니다. 앱에 사용할 서비스 주체 유형은 앱이 실행되는 위치에 따라 달라집니다.

인증 방법 설명
Azure에서 호스트되는 앱 Azure에서 호스트되는 앱은 관리 ID 서비스 주체사용해야 합니다. 관리 ID는 Azure에서 호스트되는 앱의 ID를 나타내도록 설계되었으며 Azure 호스팅 앱에서만 사용할 수 있습니다.

예를 들어 Azure 앱 Service에서 호스트되는 Django 웹앱에는 관리 ID가 할당됩니다. 그러면 앱에 할당된 관리 ID를 사용하여 다른 Azure 서비스에 앱을 인증합니다.

AKS(Azure Kubernetes Service)에서 실행되는 앱은 워크로드 ID 자격 증명을 사용할 수 있습니다. 이 자격 증명은 AKS 서비스 계정과 트러스트 관계가 있는 관리 ID를 기반으로 합니다.
,
Azure 외부에서 호스트되는 앱
(예: 온-프레미스 앱)
Azure 서비스에 연결해야 하는 Azure 외부에서 호스트되는 앱(예: 온-프레미스 앱)은 애플리케이션 서비스 주체사용해야 합니다. 애플리케이션 서비스 주체는 Azure에서 앱의 ID를 나타내며 애플리케이션 등록 프로세스를 통해 생성됩니다.

예를 들어 Azure Blob Storage를 사용하는 온-프레미스에서 호스트되는 Django 웹앱을 고려해 보세요. 앱 등록 프로세스를 사용하여 앱에 대한 애플리케이션 서비스 주체를 만듭니다. . AZURE_TENANT_IDAZURE_CLIENT_IDAZURE_CLIENT_SECRET 모두 런타임에 애플리케이션에서 읽을 환경 변수로 저장되고 앱이 애플리케이션 서비스 주체를 사용하여 Azure에 인증할 수 있도록 합니다.

로컬 개발 중 인증

애플리케이션이 로컬 개발 중에 개발자의 워크스테이션에서 실행되는 경우에도 앱에서 사용하는 모든 Azure 서비스에 인증해야 합니다. 로컬 개발 중에 Azure에 앱을 인증하기 위한 두 가지 기본 전략이 있습니다.

인증 방법 설명
로컬 개발 중에 사용할 전용 애플리케이션 서비스 주체 개체를 만듭니다. 이 메서드에서 전용 애플리케이션 서비스 주체 개체는 로컬 개발 중에 사용할 앱 등록 프로세스를 사용하여 설정됩니다. 그런 다음 서비스 주체의 ID는 로컬 개발에서 실행될 때 앱에서 액세스할 환경 변수로 저장됩니다.

이 방법을 사용하면 로컬 개발 중에 개발자가 사용하는 서비스 주체 개체에 앱에 필요한 특정 리소스 권한을 할당할 수 있습니다. 이 방법을 사용하면 애플리케이션이 필요한 특정 리소스에만 액세스할 수 있고 앱이 프로덕션에 부여할 권한을 복제본(replica).

이 방법의 단점은 애플리케이션에서 작업하는 각 개발자에 대해 별도의 서비스 주체 개체를 만들어야 한다는 것입니다.

로컬 개발 중에 개발자의 자격 증명을 사용하여 Azure에 앱을 인증합니다. 이 방법에서 개발자는 로컬 워크스테이션의 Azure CLI, Azure PowerShell 또는 Azure 개발자 CLI에서 Azure에 로그인해야 합니다. 그런 다음 애플리케이션은 자격 증명 저장소에서 개발자의 자격 증명에 액세스하고 해당 자격 증명을 사용하여 앱에서 Azure 리소스에 액세스할 수 있습니다.

이 방법은 개발자가 afore멘션ed 개발자 도구 중 하나를 통해서만 Azure 계정에 로그인하면 되므로 더 쉽게 설정할 수 있다는 장점이 있습니다. 이 방식의 단점은 개발자의 계정에 애플리케이션에 필요한 것보다 더 많은 권한이 있을 가능성이 높다는 점입니다. 따라서 애플리케이션은 프로덕션 환경에서 실행할 사용 권한을 정확하게 복제본(replica) 않습니다.

애플리케이션에서 DefaultAzureCredential 사용

Python 앱에서 DefaultAzureCredential을 사용하려면 애플리케이션에 azure.identity 패키지를 추가합니다.

pip install azure-identity

다음 코드 예제에서는 개체를 DefaultAzureCredential 인스턴스화하고 Azure SDK 클라이언트 클래스와 함께 사용하는 방법을 보여줍니다. 이 경우 BlobServiceClient Azure Blob Storage에 액세스하는 데 사용되는 개체입니다.

from azure.identity import DefaultAzureCredential
from azure.storage.blob import BlobServiceClient

# Acquire a credential object
credential = DefaultAzureCredential()

blob_service_client = BlobServiceClient(
        account_url="https://<my_account_name>.blob.core.windows.net",
        credential=credential)

개체는 DefaultAzureCredential 앱에 대해 구성된 인증 메커니즘을 자동으로 검색하고 Azure에 앱을 인증하는 데 필요한 토큰을 가져옵니다. 애플리케이션에서 둘 이상의 SDK 클라이언트를 사용하는 경우 각 SDK 클라이언트 개체와 동일한 자격 증명 개체를 사용할 수 있습니다.

DefaultAzureCredential을 사용하는 경우의 인증 방법 시퀀스

내부적으로 DefaultAzureCredential은 Azure 리소스에 대해 애플리케이션을 인증하기 위한 자격 증명 공급자 체인을 구현합니다. 각 자격 증명 공급자는 해당 유형의 자격 증명이 앱에 대해 구성되어 있는지 검색할 수 있습니다. 개체는 DefaultAzureCredential 순서대로 각 공급자를 순차적으로 검사 자격 증명이 구성된 첫 번째 공급자의 자격 증명을 사용합니다.

자격 증명을 DefaultAzureCredential 찾는 순서는 다음 다이어그램 및 표에 나와 있습니다.

A diagram that shows the sequence in which DefaultAzureCredential checks to see what authentication source is configured for an application.

자격 증명 유형 설명
환경 개체는 DefaultAzureCredential 환경 변수 집합을 읽고 애플리케이션 서비스 주체(애플리케이션 사용자)가 앱에 대해 설정되었는지 확인합니다. 그렇다면 DefaultAzureCredential은 이러한 값을 사용하여 Azure에 앱을 인증합니다.

이 메서드는 서버 환경에서 가장 자주 사용되지만 로컬로 개발할 때 사용할 수도 있습니다.
워크로드 ID 애플리케이션이 관리 ID를 사용하도록 설정된 AKS(Azure Kubernetes Service)에 배포된 DefaultAzureCredential 경우 해당 관리 ID를 사용하여 Azure에 앱을 인증합니다. 워크로드 ID는 사용자 할당 관리 ID와 AKS 서비스 계정 간의 트러스트 관계형을 나타냅니다. 워크로드 ID를 사용한 인증은 AZURE Kubernetes Service에서 Microsoft Entra 워크로드 ID 사용 AKS 문서에서 설명합니다.
관리 ID 관리 ID를 사용하도록 설정된 DefaultAzureCredential Azure 호스트에 애플리케이션을 배포하는 경우 해당 관리 ID를 사용하여 Azure에 앱을 인증합니다. 관리 ID를 사용한 인증은 서버 환경의 인증 섹션에서 설명합니다.

이 메서드는 Azure 앱 Service, Azure Functions 또는 Azure Virtual Machines와 같은 서비스를 사용하여 애플리케이션이 Azure에서 호스트되는 경우에만 사용할 수 있습니다.
Azure CLI Azure CLI DefaultAzureCredential 의 명령을 사용하여 az login Azure에 인증한 경우 동일한 계정을 사용하여 Azure에 앱을 인증합니다.
Azure PowerShell Azure PowerShell DefaultAzureCredential 에서 cmdlet을 사용하여 Connect-AzAccount Azure에 인증한 경우 동일한 계정을 사용하여 Azure에 앱을 인증합니다.
Azure Developer CLI Azure 개발자 CLI DefaultAzureCredential 의 명령을 사용하여 azd auth login Azure에 인증한 경우 동일한 계정을 사용하여 Azure에 앱을 인증합니다.
대화형 사용하도록 설정된 DefaultAzureCredential 경우 현재 시스템의 기본 브라우저를 통해 대화형으로 인증합니다. 기본적으로 이 옵션은 사용하지 않도록 설정되어 있습니다.

참고 항목

알려진 문제로VisualStudioCodeCredential 인해 토큰 체인에서 DefaultAzureCredential 제거되었습니다. 이후 릴리스에서 문제가 해결되면 이 변경 내용이 되돌리기. 자세한 내용은 Python용 Azure ID 클라이언트 라이브러리를 참조 하세요.