azure-identity-py
microsoft/skills
DefaultAzureCredential, 관리형 ID, 서비스 주체 및 토큰 캐싱을 사용하여 Microsoft Entra ID를 통해 Python에서 Azure 서비스에 인증합니다.
...모든 것을 확장하십시오Python용 Azure Identity 라이브러리
Microsoft Entra ID를 사용하는 Azure SDK 클라이언트용 인증 라이브러리.
다음과 같은 경우에 이 기능을 사용하십시오:
- Python에서 Azure 서비스에 대한 인증이 필요한 앱인 경우
- 다음이 필요한 경우
DefaultAzureCredential로컬 개발 및 Azure 배포를 위한 경우 - 다음이 필요한 경우
ManagedIdentityCredentialAzure에서 호스팅되는 워크로드용 - 시크릿 또는 인증서를 사용한 서비스 주체 인증이 필요합니다
- 다음과 함께 직접 토큰을 획득해야 합니다
get_token() - 자격 증명 체인 오류 해결이 필요합니다
설치
pip install azure-identity
VS Code 또는 브로커 기반 데스크톱 인증의 경우:
pip install azure-identity-broker
Python 버전
azure-identity Python 3.9 이상을 지원합니다.
환경 변수
# Service principal with client secret
AZURE_TENANT_ID=
AZURE_CLIENT_ID=
AZURE_CLIENT_SECRET=
# Service principal with certificate
AZURE_TENANT_ID=
AZURE_CLIENT_ID=
AZURE_CLIENT_CERTIFICATE_PATH=/path/to/cert.pem
AZURE_CLIENT_CERTIFICATE_PASSWORD=
# Authority (sovereign clouds)
AZURE_AUTHORITY_HOST=login.microsoftonline.com # Default; or login.chinacloudapi.cn, login.microsoftonline.us
# User-assigned managed identity
AZURE_CLIENT_ID=
# Credential selection (new)
AZURE_TOKEN_CREDENTIALS=dev|prod| # Optional, restricts DAC chain
DefaultAzureCredential
대부분의 시나리오에서 권장되는 자격 증명입니다. 다음 순서대로 여러 인증 방법을 시도합니다:
from azure.identity import DefaultAzureCredential
from azure.storage.blob import BlobServiceClient
# Works in local dev AND production without code changes
credential = DefaultAzureCredential()
with BlobServiceClient(
account_url="https://.blob.core.windows.net",
credential=credential
) as client:
containers = list(client.list_containers())
자격 증명 체인 순서
현재 자격 증명 체인 순서 및 기본값에 대해서는 DefaultAzureCredential 개요를 참조하십시오.
DefaultAzureCredential 사용자 지정
# Exclude credentials you don't need
credential = DefaultAzureCredential(
exclude_environment_credential=True,
exclude_shared_token_cache_credential=True,
managed_identity_client_id="" # For user-assigned MI (also accepts object ID or resource ID)
)
# Enable interactive browser (disabled by default)
credential = DefaultAzureCredential(
exclude_interactive_browser_credential=False
)
# Set subprocess timeout for CLI-based credentials (default: 10s)
credential = DefaultAzureCredential(process_timeout=30)
# Require AZURE_TOKEN_CREDENTIALS env var to be set
credential = DefaultAzureCredential(require_envvar=True)
매개변수 제외
| 매개변수 | 기본값 | 효과 |
|---|---|---|
exclude_environment_credential |
False | 환경 변수 기반 인증 건너뛰기 |
exclude_workload_identity_credential |
False | Kubernetes 워크로드 ID 건너뛰기 |
exclude_managed_identity_credential |
False | 관리형 ID 건너뛰기 |
exclude_shared_token_cache_credential |
False | 공유 토큰 캐시 건너뛰기 |
exclude_visual_studio_code_credential |
False | VS Code 자격 증명 건너뛰기 |
exclude_cli_credential |
False | Azure CLI 건너뛰기 |
exclude_powershell_credential |
False | Azure PowerShell 건너뛰기 |
exclude_developer_cli_credential |
False | Azure Developer CLI 건너뛰기 |
exclude_interactive_browser_credential |
참 | 대화형 브라우저 건너뛰기 |
exclude_broker_credential |
False | WAM 브로커 건너뛰기 |
get_bearer_token_provider
자격 증명을 래핑하여 베어러 토큰 문자열을 반환하는 호출 가능한 객체를 생성하는 헬퍼입니다. OpenAI SDK 및 기타 비-Azure-SDK 클라이언트에 필수적입니다:
from azure.identity import DefaultAzureCredential, get_bearer_token_provider
credential = DefaultAzureCredential()
token_provider = get_bearer_token_provider(
credential, "https://cognitiveservices.azure.com/.default"
)
# Use with OpenAI SDK
from openai import AzureOpenAI
with AzureOpenAI(
azure_endpoint="https://.openai.azure.com/",
azure_ad_token_provider=token_provider,
api_version="2024-10-21",
) as client:
# response = client.chat.completions.create(...)
...
자격 증명 유형
자격 증명 체인
| 인증 정보 | 사용 사례 |
|---|---|
DefaultAzureCredential |
대부분의 시나리오 — 환경을 자동으로 감지합니다 |
ChainedTokenCredential |
명시적인 순서가 지정된 사용자 지정 자격 증명 체인 |
Azure 호스팅 애플리케이션
| 자격 증명 | 사용 사례 |
|---|---|
EnvironmentCredential |
AZURE_CLIENT_SECRET / AZURE_CLIENT_CERTIFICATE_PATH 환경 변수를 통한 인증 |
ManagedIdentityCredential |
Azure VM, App Service, Functions, AKS, Arc, Service Fabric |
WorkloadIdentityCredential |
Microsoft Entra Workload ID를 사용하는 Kubernetes |
서비스 주체
| 자격 증명 | 사용 사례 |
|---|---|
ClientSecretCredential |
클라이언트 시크릿이 있는 서비스 주체 |
CertificateCredential |
PEM/PKCS12 인증서가 있는 서비스 주체 |
ClientAssertionCredential |
서명된 JWT 어설션을 가진 서비스 주체 |
AzurePipelinesCredential |
워크로드 ID 페더레이션이 적용된 Azure Pipelines |
OnBehalfOfCredential |
중간 계층 대리(on-behalf-of) 흐름(위임된 사용자 ID) |
사용자 인증
| 자격 증명 | 사용 사례 |
|---|---|
InteractiveBrowserCredential |
대화형 브라우저 OAuth 로그인 |
DeviceCodeCredential |
헤드리스/SSH 기기 코드 흐름 |
AuthorizationCodeCredential |
이전에 획득한 인증 코드 |
개발자 도구
| 인증 정보 | 사용 사례 |
|---|---|
AzureCliCredential |
az login |
AzureDeveloperCliCredential |
azd auth login |
AzurePowerShellCredential |
Connect-AzAccount |
VisualStudioCodeCredential |
VS Code Azure 리소스 확장 프로그램 |
구체적인 자격 증명 예시
ManagedIdentityCredential
Azure에서 호스팅되는 리소스(VM, App Service, Functions, AKS)의 경우:
from azure.identity import ManagedIdentityCredential
# System-assigned managed identity
credential = ManagedIdentityCredential()
# User-assigned managed identity (client_id, object_id, or resource_id)
credential = ManagedIdentityCredential(
client_id=""
)
# Also valid:
# credential = ManagedIdentityCredential(object_id="")
# credential = ManagedIdentityCredential(resource_id="")
ClientSecretCredential
import os
from azure.identity import ClientSecretCredential
credential = ClientSecretCredential(
tenant_id=os.environ["AZURE_TENANT_ID"],
client_id=os.environ["AZURE_CLIENT_ID"],
client_secret=os.environ["AZURE_CLIENT_SECRET"],
)
CertificateCredential
참고: 이 클래스는
CertificateCredential이며,ClientCertificateCredential.
from azure.identity import CertificateCredential
# From file path
credential = CertificateCredential(
tenant_id="",
client_id="",
certificate_path="/path/to/cert.pem",
)
# From bytes with password
credential = CertificateCredential(
tenant_id="",
client_id="",
certificate_data=cert_bytes,
password="",
send_certificate_chain=True, # Required for SNI auth
)
AzureCliCredential
from azure.identity import AzureCliCredential
credential = AzureCliCredential()
# With tenant restriction
credential = AzureCliCredential(tenant_id="")
ChainedTokenCredential
사용자 지정 자격 증명 체인:
from azure.identity import (
ChainedTokenCredential,
ManagedIdentityCredential,
AzureCliCredential,
)
# Try managed identity first, fall back to CLI
credential = ChainedTokenCredential(
ManagedIdentityCredential(client_id=""),
AzureCliCredential(),
)
WorkloadIdentityCredential
워크로드 ID를 사용하는 Azure Kubernetes Service의 경우:
from azure.identity import WorkloadIdentityCredential
# Reads from AZURE_TENANT_ID, AZURE_CLIENT_ID, AZURE_FEDERATED_TOKEN_FILE
credential = WorkloadIdentityCredential()
# Or explicit configuration
credential = WorkloadIdentityCredential(
tenant_id="",
client_id="",
token_file_path="/var/run/secrets/azure/tokens/azure-identity-token",
)
DeviceCodeCredential
헤드리스 장치(IoT, SSH, CLI 도구)용:
from azure.identity import DeviceCodeCredential
credential = DeviceCodeCredential()
# Prints device code prompt to stdout by default
# With custom prompt callback
def prompt_callback(verification_uri, user_code, expires_on):
print(f"Go to {verification_uri} and enter code {user_code}")
credential = DeviceCodeCredential(
client_id="",
prompt_callback=prompt_callback,
)
InteractiveBrowserCredential
대화형 OAuth 브라우저 로그인용:
from azure.identity import InteractiveBrowserCredential
credential = InteractiveBrowserCredential()
# With specific tenant and client
credential = InteractiveBrowserCredential(
tenant_id="",
client_id="",
)
OnBehalfOfCredential
사용자 신원을 전달하는 미들티어 서비스의 경우:
from azure.identity import OnBehalfOfCredential
credential = OnBehalfOfCredential(
tenant_id="",
client_id="",
client_secret="",
user_assertion="",
)
AzurePipelinesCredential
워크로드 ID 페더레이션이 적용된 Azure DevOps 파이프라인의 경우:
import os
from azure.identity import AzurePipelinesCredential
credential = AzurePipelinesCredential(
tenant_id="",
client_id="",
service_connection_id="",
system_access_token=os.environ["SYSTEM_ACCESSTOKEN"],
)
토큰 직접 가져오기
from azure.identity import DefaultAzureCredential
with DefaultAzureCredential() as credential:
# Get token for a specific scope
token = credential.get_token("https://management.azure.com/.default")
print(f"Token expires: {token.expires_on}")
# For Azure Database for PostgreSQL
token = credential.get_token("https://ossrdbms-aad.database.windows.net/.default")
비동기 자격 증명
비동기 자격 증명은 azure.identity.aio에 있습니다. 항상 이를 닫거나 async with:
from azure.identity.aio import DefaultAzureCredential
from azure.storage.blob.aio import BlobServiceClient
async def main():
# Preferred: use async context manager for both credential and client
async with DefaultAzureCredential() as credential:
async with BlobServiceClient(
account_url="https://.blob.core.windows.net",
credential=credential,
) as client:
# ... async operations
pass
비동기
get_bearer_token_provider는azure.identity.aio.get_bearer_token_provider.
Sovereign Clouds
다음 중 하나를 사용하세요 AzureAuthorityHosts 또는 AZURE_AUTHORITY_HOST 환경 변수:
from azure.identity import DefaultAzureCredential, AzureAuthorityHosts
# Azure Government
credential = DefaultAzureCredential(authority=AzureAuthorityHosts.AZURE_GOVERNMENT)
# Azure China
credential = DefaultAzureCredential(authority=AzureAuthorityHosts.AZURE_CHINA)
| 상수 | 권한 |
|---|---|
AzureAuthorityHosts.AZURE_PUBLIC_CLOUD |
login.microsoftonline.com (기본값) |
AzureAuthorityHosts.AZURE_GOVERNMENT |
login.microsoftonline.us |
AzureAuthorityHosts.AZURE_CHINA |
login.chinacloudapi.cn |
지속적인 토큰 캐싱
다음과 같은 디스크 기반 캐싱을 선택적으로 활성화 TokenCachePersistenceOptions:
from azure.identity import DefaultAzureCredential, TokenCachePersistenceOptions
credential = DefaultAzureCredential(
cache_persistence_options=TokenCachePersistenceOptions()
)
# Allow unencrypted fallback (NOT recommended for production)
credential = DefaultAzureCredential(
cache_persistence_options=TokenCachePersistenceOptions(allow_unencrypted_storage=True)
)
저장소: Windows (DPAPI), macOS (Keychain), Linux (Keyring).
다중 테넌트 지원
구성된 테넌트 이외의 추가 테넌트에 대한 토큰 획득 허용:
from azure.identity import ClientSecretCredential
credential = ClientSecretCredential(
tenant_id="",
client_id="",
client_secret="",
additionally_allowed_tenants=["", "*"], # "*" allows any tenant
)
오류 처리
from azure.identity import DefaultAzureCredential, CredentialUnavailableError
from azure.core.exceptions import ClientAuthenticationError
with DefaultAzureCredential() as credential:
try:
token = credential.get_token("https://management.azure.com/.default")
except CredentialUnavailableError:
# No credential in the chain could attempt authentication
pass
except ClientAuthenticationError as e:
# Authentication was attempted but failed
# e.message contains details from each credential in the chain
pass
로깅
디버깅을 위해 인증 로깅을 활성화합니다:
import logging
# Enable verbose Azure Identity logging
logging.basicConfig(level=logging.DEBUG)
logger = logging.getLogger("azure.identity")
logger.setLevel(logging.DEBUG)
# Or via environment variable
AZURE_LOG_LEVEL=debug
인증 정보 선택 매트릭스
| 환경 | 권장 자격 증명 |
|---|---|
| 로컬 개발 | DefaultAzureCredential (Azure CLI 사용) |
| Azure App Service | DefaultAzureCredential (관리형 ID 사용) |
| Azure Functions | DefaultAzureCredential (관리형 ID 사용) |
| Azure Kubernetes Service | WorkloadIdentityCredential |
| Azure VM | DefaultAzureCredential (관리형 ID 사용) |
| CI/CD 파이프라인 | EnvironmentCredential 또는 AzurePipelinesCredential |
| 데스크톱 앱 | InteractiveBrowserCredential |
| CLI / 헤드리스 도구 | DeviceCodeCredential |
| 미들티어 서비스 | OnBehalfOfCredential |
모범 사례
- 동기식 또는 비동기식 중 하나를 선택하고 일관성을 유지하십시오.
azure.xxx동기식 클라이언트와azure.xxx.aio비동기 클라이언트를 혼합하지 마십시오. 모듈당 하나의 모드를 선택하십시오. - 정리해야 할 토큰 캐시나 HTTP 전송 경로를 소유하고 있는 경우, 자격 증명을 컨텍스트 관리자로 사용하십시오(
with DefaultAzureCredential() as credential:)로 사용하십시오; 비동기 방식의 경우,async with다음의 자격 증명을 사용하십시오azure.identity.aio. - 로컬에서 실행되는 코드에는
DefaultAzureCredential을 사용하십시오. Azure에서 실행되는 코드에는 특정 토큰 자격 증명을 사용하십시오. - 절대 자격 증명을 하드코딩하지 마십시오. 환경 변수나 관리형 ID를 사용하십시오
- Azure 프로덕션 배포 환경에서는 관리형 ID를 우선적으로 사용하십시오
- Azure SDK가 아닌 클라이언트(OpenAI, REST API)의 경우
get_bearer_token_provider를 사용하십시오. - 사용자 지정 자격 증명 순서가 필요한 경우 `
ChainedTokenCredential`를 사용하십시오 - 사용자 할당형 관리형 ID의 경우
AZURE_CLIENT_ID를 설정하십시오(객체 ID 및 리소스 ID도 유효한 식별자입니다). - 사용되지 않는 자격 증명을 제외하여
DefaultAzureCredential인증 CertificateCredential를 사용하십시오(ClientCertificateCredential— 해당 이름은 존재하지 않습니다)- 오래 실행되는 서비스에 대해
cache_persistence_options를 활성화하여 토큰 요청을 줄이십시오 - 자격 증명 인스턴스를 재사용하십시오 — 동일한 자격 증명을 여러 클라이언트에서 공유할 수 있습니다
참고 링크
| 리소스 | URL |
|---|---|
| PyPI 패키지 | https://pypi.org/project/azure-identity/ |
| API 참조 | https://learn.microsoft.com/python/api/azure-identity |
| GitHub 소스 | https://github.com/Azure/azure-sdk-for-python/tree/main/sdk/identity/azure-identity |
| 인증 정보 체인 | https://aka.ms/azsdk/python/identity/credential-chains |
---
name: azure-identity-py
description: Authenticate to Azure services from Python using Microsoft Entra ID with DefaultAzureCredential, managed identity, service principals, and token caching.
license: MIT
---
# Azure Identity library for Python
Authentication library for Azure SDK clients using Microsoft Entra ID.
Use this skill when:
- An app needs to authenticate to Azure services from Python
- You need `DefaultAzureCredential` for local dev + Azure deployment
- You need `ManagedIdentityCredential` for Azure-hosted workloads
- You need service principal auth with secret or certificate
- You need direct token acquisition with `get_token()`
- You need to troubleshoot credential chain failures
## Installation
```bash
pip install azure-identity
```
For VS Code or broker-based desktop auth:
```bash
pip install azure-identity-broker
```
## Python Version
`azure-identity` supports Python 3.9+.
## Environment Variables
```bash
# Service principal with client secret
AZURE_TENANT_ID=<your-tenant-id>
AZURE_CLIENT_ID=<your-client-id>
AZURE_CLIENT_SECRET=<your-client-secret>
# Service principal with certificate
AZURE_TENANT_ID=<your-tenant-id>
AZURE_CLIENT_ID=<your-client-id>
AZURE_CLIENT_CERTIFICATE_PATH=/path/to/cert.pem
AZURE_CLIENT_CERTIFICATE_PASSWORD=<optional-password>
# Authority (sovereign clouds)
AZURE_AUTHORITY_HOST=login.microsoftonline.com # Default; or login.chinacloudapi.cn, login.microsoftonline.us
# User-assigned managed identity
AZURE_CLIENT_ID=<managed-identity-client-id>
# Credential selection (new)
AZURE_TOKEN_CREDENTIALS=dev|prod|<credential-name> # Optional, restricts DAC chain
```
## DefaultAzureCredential
The recommended credential for most scenarios. Tries multiple authentication methods in order:
```python
from azure.identity import DefaultAzureCredential
from azure.storage.blob import BlobServiceClient
# Works in local dev AND production without code changes
credential = DefaultAzureCredential()
with BlobServiceClient(
account_url="https://<account>.blob.core.windows.net",
credential=credential
) as client:
containers = list(client.list_containers())
```
### Credential Chain Order
See [DefaultAzureCredential overview](https://aka.ms/azsdk/python/identity/credential-chains#defaultazurecredential-overview) for the current credential chain order and defaults.
### Customizing DefaultAzureCredential
```python
# Exclude credentials you don't need
credential = DefaultAzureCredential(
exclude_environment_credential=True,
exclude_shared_token_cache_credential=True,
managed_identity_client_id="<user-assigned-mi-client-id>" # For user-assigned MI (also accepts object ID or resource ID)
)
# Enable interactive browser (disabled by default)
credential = DefaultAzureCredential(
exclude_interactive_browser_credential=False
)
# Set subprocess timeout for CLI-based credentials (default: 10s)
credential = DefaultAzureCredential(process_timeout=30)
# Require AZURE_TOKEN_CREDENTIALS env var to be set
credential = DefaultAzureCredential(require_envvar=True)
```
### Exclude Parameters
| Parameter | Default | Effect |
|-----------|---------|--------|
| `exclude_environment_credential` | False | Skip env-var-based auth |
| `exclude_workload_identity_credential` | False | Skip Kubernetes workload identity |
| `exclude_managed_identity_credential` | False | Skip managed identity |
| `exclude_shared_token_cache_credential` | False | Skip shared token cache |
| `exclude_visual_studio_code_credential` | False | Skip VS Code credential |
| `exclude_cli_credential` | False | Skip Azure CLI |
| `exclude_powershell_credential` | False | Skip Azure PowerShell |
| `exclude_developer_cli_credential` | False | Skip Azure Developer CLI |
| `exclude_interactive_browser_credential` | **True** | Skip interactive browser |
| `exclude_broker_credential` | False | Skip WAM broker |
## get_bearer_token_provider
Helper that wraps a credential into a callable returning a bearer token string. Essential for OpenAI SDK and other non-Azure-SDK clients:
```python
from azure.identity import DefaultAzureCredential, get_bearer_token_provider
credential = DefaultAzureCredential()
token_provider = get_bearer_token_provider(
credential, "https://cognitiveservices.azure.com/.default"
)
# Use with OpenAI SDK
from openai import AzureOpenAI
with AzureOpenAI(
azure_endpoint="https://<resource>.openai.azure.com/",
azure_ad_token_provider=token_provider,
api_version="2024-10-21",
) as client:
# response = client.chat.completions.create(...)
...
```
## Credential Types
### Credential Chains
| Credential | Use Case |
|------------|----------|
| `DefaultAzureCredential` | Most scenarios — auto-detects environment |
| `ChainedTokenCredential` | Custom credential chain with explicit ordering |
### Azure-Hosted Applications
| Credential | Use Case |
|------------|----------|
| `EnvironmentCredential` | Auth via AZURE_CLIENT_SECRET / AZURE_CLIENT_CERTIFICATE_PATH env vars |
| `ManagedIdentityCredential` | Azure VMs, App Service, Functions, AKS, Arc, Service Fabric |
| `WorkloadIdentityCredential` | Kubernetes with Microsoft Entra Workload ID |
### Service Principals
| Credential | Use Case |
|------------|----------|
| `ClientSecretCredential` | Service principal with client secret |
| `CertificateCredential` | Service principal with PEM/PKCS12 certificate |
| `ClientAssertionCredential` | Service principal with signed JWT assertion |
| `AzurePipelinesCredential` | Azure Pipelines with workload identity federation |
| `OnBehalfOfCredential` | Middle-tier on-behalf-of flow (delegated user identity) |
### User Authentication
| Credential | Use Case |
|------------|----------|
| `InteractiveBrowserCredential` | Interactive browser OAuth sign-in |
| `DeviceCodeCredential` | Headless/SSH device code flow |
| `AuthorizationCodeCredential` | Previously obtained authorization code |
### Developer Tools
| Credential | Use Case |
|------------|----------|
| `AzureCliCredential` | `az login` |
| `AzureDeveloperCliCredential` | `azd auth login` |
| `AzurePowerShellCredential` | `Connect-AzAccount` |
| `VisualStudioCodeCredential` | VS Code Azure Resources extension |
## Specific Credential Examples
### ManagedIdentityCredential
For Azure-hosted resources (VMs, App Service, Functions, AKS):
```python
from azure.identity import ManagedIdentityCredential
# System-assigned managed identity
credential = ManagedIdentityCredential()
# User-assigned managed identity (client_id, object_id, or resource_id)
credential = ManagedIdentityCredential(
client_id="<user-assigned-mi-client-id>"
)
# Also valid:
# credential = ManagedIdentityCredential(object_id="<object-id>")
# credential = ManagedIdentityCredential(resource_id="<resource-id>")
```
### ClientSecretCredential
```python
import os
from azure.identity import ClientSecretCredential
credential = ClientSecretCredential(
tenant_id=os.environ["AZURE_TENANT_ID"],
client_id=os.environ["AZURE_CLIENT_ID"],
client_secret=os.environ["AZURE_CLIENT_SECRET"],
)
```
### CertificateCredential
> **Note:** The class is `CertificateCredential`, NOT `ClientCertificateCredential`.
```python
from azure.identity import CertificateCredential
# From file path
credential = CertificateCredential(
tenant_id="<tenant-id>",
client_id="<client-id>",
certificate_path="/path/to/cert.pem",
)
# From bytes with password
credential = CertificateCredential(
tenant_id="<tenant-id>",
client_id="<client-id>",
certificate_data=cert_bytes,
password="<cert-password>",
send_certificate_chain=True, # Required for SNI auth
)
```
### AzureCliCredential
```python
from azure.identity import AzureCliCredential
credential = AzureCliCredential()
# With tenant restriction
credential = AzureCliCredential(tenant_id="<tenant-id>")
```
### ChainedTokenCredential
Custom credential chain:
```python
from azure.identity import (
ChainedTokenCredential,
ManagedIdentityCredential,
AzureCliCredential,
)
# Try managed identity first, fall back to CLI
credential = ChainedTokenCredential(
ManagedIdentityCredential(client_id="<user-assigned-mi-client-id>"),
AzureCliCredential(),
)
```
### WorkloadIdentityCredential
For Azure Kubernetes Service with workload identity:
```python
from azure.identity import WorkloadIdentityCredential
# Reads from AZURE_TENANT_ID, AZURE_CLIENT_ID, AZURE_FEDERATED_TOKEN_FILE
credential = WorkloadIdentityCredential()
# Or explicit configuration
credential = WorkloadIdentityCredential(
tenant_id="<tenant-id>",
client_id="<client-id>",
token_file_path="/var/run/secrets/azure/tokens/azure-identity-token",
)
```
### DeviceCodeCredential
For headless devices (IoT, SSH, CLI tools):
```python
from azure.identity import DeviceCodeCredential
credential = DeviceCodeCredential()
# Prints device code prompt to stdout by default
# With custom prompt callback
def prompt_callback(verification_uri, user_code, expires_on):
print(f"Go to {verification_uri} and enter code {user_code}")
credential = DeviceCodeCredential(
client_id="<client-id>",
prompt_callback=prompt_callback,
)
```
### InteractiveBrowserCredential
For interactive OAuth browser sign-in:
```python
from azure.identity import InteractiveBrowserCredential
credential = InteractiveBrowserCredential()
# With specific tenant and client
credential = InteractiveBrowserCredential(
tenant_id="<tenant-id>",
client_id="<client-id>",
)
```
### OnBehalfOfCredential
For middle-tier services propagating user identity:
```python
from azure.identity import OnBehalfOfCredential
credential = OnBehalfOfCredential(
tenant_id="<tenant-id>",
client_id="<client-id>",
client_secret="<client-secret>",
user_assertion="<access-token-from-client>",
)
```
### AzurePipelinesCredential
For Azure DevOps pipelines with workload identity federation:
```python
import os
from azure.identity import AzurePipelinesCredential
credential = AzurePipelinesCredential(
tenant_id="<tenant-id>",
client_id="<client-id>",
service_connection_id="<service-connection-id>",
system_access_token=os.environ["SYSTEM_ACCESSTOKEN"],
)
```
## Getting Tokens Directly
```python
from azure.identity import DefaultAzureCredential
with DefaultAzureCredential() as credential:
# Get token for a specific scope
token = credential.get_token("https://management.azure.com/.default")
print(f"Token expires: {token.expires_on}")
# For Azure Database for PostgreSQL
token = credential.get_token("https://ossrdbms-aad.database.windows.net/.default")
```
## Async Credentials
Async credentials are in `azure.identity.aio`. Always close them or use `async with`:
```python
from azure.identity.aio import DefaultAzureCredential
from azure.storage.blob.aio import BlobServiceClient
async def main():
# Preferred: use async context manager for both credential and client
async with DefaultAzureCredential() as credential:
async with BlobServiceClient(
account_url="https://<account>.blob.core.windows.net",
credential=credential,
) as client:
# ... async operations
pass
```
> The async `get_bearer_token_provider` is at `azure.identity.aio.get_bearer_token_provider`.
## Sovereign Clouds
Use `AzureAuthorityHosts` or the `AZURE_AUTHORITY_HOST` env var:
```python
from azure.identity import DefaultAzureCredential, AzureAuthorityHosts
# Azure Government
credential = DefaultAzureCredential(authority=AzureAuthorityHosts.AZURE_GOVERNMENT)
# Azure China
credential = DefaultAzureCredential(authority=AzureAuthorityHosts.AZURE_CHINA)
```
| Constant | Authority |
|----------|-----------|
| `AzureAuthorityHosts.AZURE_PUBLIC_CLOUD` | `login.microsoftonline.com` (default) |
| `AzureAuthorityHosts.AZURE_GOVERNMENT` | `login.microsoftonline.us` |
| `AzureAuthorityHosts.AZURE_CHINA` | `login.chinacloudapi.cn` |
## Persistent Token Caching
Opt-in disk-based caching with `TokenCachePersistenceOptions`:
```python
from azure.identity import DefaultAzureCredential, TokenCachePersistenceOptions
credential = DefaultAzureCredential(
cache_persistence_options=TokenCachePersistenceOptions()
)
# Allow unencrypted fallback (NOT recommended for production)
credential = DefaultAzureCredential(
cache_persistence_options=TokenCachePersistenceOptions(allow_unencrypted_storage=True)
)
```
Storage: Windows (DPAPI), macOS (Keychain), Linux (Keyring).
## Multi-Tenant Support
Allow token acquisition for additional tenants beyond the configured one:
```python
from azure.identity import ClientSecretCredential
credential = ClientSecretCredential(
tenant_id="<home-tenant>",
client_id="<client-id>",
client_secret="<secret>",
additionally_allowed_tenants=["<other-tenant>", "*"], # "*" allows any tenant
)
```
## Error Handling
```python
from azure.identity import DefaultAzureCredential, CredentialUnavailableError
from azure.core.exceptions import ClientAuthenticationError
with DefaultAzureCredential() as credential:
try:
token = credential.get_token("https://management.azure.com/.default")
except CredentialUnavailableError:
# No credential in the chain could attempt authentication
pass
except ClientAuthenticationError as e:
# Authentication was attempted but failed
# e.message contains details from each credential in the chain
pass
```
## Logging
Enable authentication logging for debugging:
```python
import logging
# Enable verbose Azure Identity logging
logging.basicConfig(level=logging.DEBUG)
logger = logging.getLogger("azure.identity")
logger.setLevel(logging.DEBUG)
```
```bash
# Or via environment variable
AZURE_LOG_LEVEL=debug
```
## Credential Selection Matrix
| Environment | Recommended Credential |
|-------------|------------------------|
| Local Development | `DefaultAzureCredential` (uses Azure CLI) |
| Azure App Service | `DefaultAzureCredential` (uses Managed Identity) |
| Azure Functions | `DefaultAzureCredential` (uses Managed Identity) |
| Azure Kubernetes Service | `WorkloadIdentityCredential` |
| Azure VMs | `DefaultAzureCredential` (uses Managed Identity) |
| CI/CD Pipeline | `EnvironmentCredential` or `AzurePipelinesCredential` |
| Desktop App | `InteractiveBrowserCredential` |
| CLI / Headless Tool | `DeviceCodeCredential` |
| Middle-tier Service | `OnBehalfOfCredential` |
## Best Practices
1. **Pick sync OR async and stay consistent.** Do not mix `azure.xxx` sync clients with `azure.xxx.aio` async clients in the same call path. Choose one mode per module.
2. **Use credentials as context managers** (`with DefaultAzureCredential() as credential:`) when they own token caches / HTTP transports you want cleaned up; for async, use `async with` on credentials from `azure.identity.aio`.
3. **Use `DefaultAzureCredential`** for code that runs locally. Use a specific token credential for code that runs in Azure.
4. **Never hardcode credentials** — use environment variables or managed identity
5. **Prefer managed identity** in production Azure deployments
6. **Use `get_bearer_token_provider`** for non-Azure-SDK clients (OpenAI, REST APIs)
7. **Use `ChainedTokenCredential`** when you need a custom credential order
8. **Set `AZURE_CLIENT_ID`** for user-assigned managed identities (object ID and resource ID are also valid identifiers)
9. **Exclude unused credentials** to speed up `DefaultAzureCredential` authentication
10. **Use `CertificateCredential`** (not `ClientCertificateCredential` — that name doesn't exist)
11. **Enable `cache_persistence_options`** for long-running services to reduce token requests
12. **Reuse credential instances** — same credential can be shared across multiple clients
## Reference Links
| Resource | URL |
|----------|-----|
| PyPI Package | https://pypi.org/project/azure-identity/ |
| API Reference | https://learn.microsoft.com/python/api/azure-identity |
| GitHub Source | https://github.com/Azure/azure-sdk-for-python/tree/main/sdk/identity/azure-identity |
| Credential Chains | https://aka.ms/azsdk/python/identity/credential-chains |
모든 파일
1개 파일azure-identity-py 설치
스킬 파일을 다운로드하여 .claude/skills/ 디렉터리에 압축을 풀어주세요.
ZIP 다운로드저장소를 클론하고 스킬 파일을 프로젝트에 복사하세요.
git clone https://github.com/microsoft/skills/tree/main/.github/plugins/azure-sdk-python/skills/azure-identity-py # Copy SKILL.md to your .claude/skills/ directory
복사





집
