다음을 통해 공유


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

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

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

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

앱이 실행되는 위치에 따라 앱에 권장되는 토큰 기반 인증 전략을 보여 주는 다이어그램입니다.

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

DefaultAzureCredential

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

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

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

토큰 기반 인증의 이점

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

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

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

서버 환경에서의 인증

서버 환경에서 호스팅하는 경우 각 앱에는 앱이 실행되는 환경당 고유한 애플리케이션 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는 로컬 개발에서 실행될 때 앱에서 액세스할 환경 변수로 저장됩니다.

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

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

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

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

애플리케이션에서 DefaultAzureCredential 사용

DefaultAzureCredential 은 Microsoft Entra ID에 인증하기 위한 순서가 지정된 순서가 지정된 메커니즘 시퀀스입니다. 각 인증 메커니즘은 TokenCredential 프로토콜을 구현하는 클래스이며 자격 증명이라고 합니다. 런타임 시 DefaultAzureCredential은 첫 ​​번째 자격 증명을 사용하여 인증을 시도합니다. 해당 자격 증명이 액세스 토큰을 획득하지 못하면 액세스 토큰을 성공적으로 가져올 때까지 시퀀스의 다음 자격 증명이 시도됩니다. 이러한 방식을 통해 앱은 환경별 코드를 작성하지 않고도 다양한 환경에서 여러 자격 증명을 사용할 수 있습니다.

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

pip install azure-identity

Azure 서비스는 다양한 Azure SDK 클라이언트 라이브러리의 특수 클라이언트 클래스를 사용하여 액세스됩니다. 다음 코드 예제에서는 개체를 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)

위의 코드는 로컬 개발 워크스테이션에서 실행될 때 애플리케이션 서비스 주체의 환경 변수 또는 Azure CLI와 같은 로컬로 설치된 개발자 도구에서 개발자 자격 증명 집합을 찾습니다. 두 방법 중 하나를 사용하여 로컬 개발 중에 Azure 리소스에 앱을 인증할 수 있습니다.

Azure에 배포할 때 이 동일한 코드는 Azure 리소스에 앱을 인증할 수도 있습니다. DefaultAzureCredential 는 환경 설정 및 관리 ID 구성을 검색하여 Azure 서비스에 자동으로 인증할 수 있습니다.