azure-identity-py について
azure-identity-py は、Microsoft Entra ID のトークンを使う Python Azure SDK クライアント向けの認証ライブラリです。複数の資格情報タイプと、設定可能なデフォルト資格情報チェーンを備えています。
主な機能
- 01デフォルト資格情報チェーン
- 02マネージド ID とサービスプリンシパル認証情報
- 03CLI・ブラウザー・デバイスコード認証
- 04カスタム資格情報チェーン
- 05同期・非同期クライアント対応
活用シーン
- 01Azure CLI によるローカル認証
- 02Azure 上のアプリでのトークン取得
- 03CI/CD のサービスプリンシパル認証設定
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ sickn33/ agentic-awesome-skills --skill azure-identity-pyインストール後、Claude Code で/azure-identity-pyを入力して読み込まれたか確認します。
詳細
Azure Identity SDK for Python
Microsoft Entra ID(旧称 Azure AD)を使用して Azure SDK クライアントを認証するライブラリです。
インストール
pip install azure-identity
環境変数
# Service Principal (for production/CI)
AZURE_TENANT_ID=<your-tenant-id>
AZURE_CLIENT_ID=<your-client-id>
AZURE_CLIENT_SECRET=<your-client-secret>
# User-assigned Managed Identity (optional)
AZURE_CLIENT_ID=<managed-identity-client-id>
DefaultAzureCredential
開発環境や柔軟な環境で役立ちます。本番環境では、意図しない別のアカウントへのフォールバックを避けるため、明示的に意図した資格情報(ワークロード ID/マネージド ID など)を選択してください。以下のチェーンは説明用であり、バージョンや構成によって異なります。
from azure.identity import DefaultAzureCredential
from azure.storage.blob import BlobServiceClient
# Works in local dev AND production without code changes
credential = DefaultAzureCredential()
client = BlobServiceClient(
account_url="https://<account>.blob.core.windows.net",
credential=credential
)
資格情報チェーンの順序
| 順序 | 資格情報 | 環境 |
|---|---|---|
| 1 | EnvironmentCredential | CI/CD、コンテナー |
| 2 | WorkloadIdentityCredential | Kubernetes |
| 3 | ManagedIdentityCredential | Azure VM、App Service、Functions |
| 4 | SharedTokenCacheCredential | Windows のみ |
| 5 | VisualStudioCodeCredential | Azure 拡張機能を使用する VS Code |
| 6 | AzureCliCredential | az login |
| 7 | AzurePowerShellCredential | Connect-AzAccount |
| 8 | AzureDeveloperCliCredential | azd auth login |
DefaultAzureCredential のカスタマイズ
# 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
)
# Enable interactive browser (disabled by default)
credential = DefaultAzureCredential(
exclude_interactive_browser_credential=False
)
トークンを取得する前に、テナント、クライアント/プリンシパル、クラウド、必要なオーディエンス/スコープを確認してください。トークンは出力しないでください。リポジトリにコミットする dotenv の例や、シェルの履歴に貼り付ける内容にはシークレットを含めないでください。サポートされている場合は、マネージド ID/ワークロード ID を優先してください。失敗時の経路では、資格情報/クライアントを閉じてください。選択したパッケージに適用されるオプションのブローカー/開発者資格情報を含め、現在の資格情報チェーンのガイダンスを確認してください。
特定の資格情報の種類
ManagedIdentityCredential
Azure でホストされるリソース(VM、App Service、Functions、AKS)向けです。
from azure.identity import ManagedIdentityCredential
# System-assigned managed identity
credential = ManagedIdentityCredential()
# User-assigned managed identity
credential = ManagedIdentityCredential(
client_id="<user-assigned-mi-client-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"]
)
AzureCliCredential
az login で使用するアカウントを使います。
from azure.identity import AzureCliCredential
credential = AzureCliCredential()
ChainedTokenCredential
カスタムの資格情報チェーンです。
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()
)
資格情報の種類の表
| 資格情報 | 用途 | 認証方法 |
|---|---|---|
DefaultAzureCredential | ほとんどのシナリオ | 自動検出 |
ManagedIdentityCredential | Azure でホストされるアプリ | マネージド ID |
ClientSecretCredential | サービスプリンシパル | クライアントシークレット |
ClientCertificateCredential | サービスプリンシパル | 証明書 |
AzureCliCredential | ローカル開発 | Azure CLI |
AzureDeveloperCliCredential | ローカル開発 | Azure Developer CLI |
InteractiveBrowserCredential | ユーザーのサインイン | ブラウザー OAuth |
DeviceCodeCredential | ヘッドレス/SSH | デバイスコードフロー |
トークンを直接取得する
from azure.identity import DefaultAzureCredential
credential = DefaultAzureCredential()
# 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")
非同期クライアント
from azure.identity.aio import DefaultAzureCredential
from azure.storage.blob.aio import BlobServiceClient
async def main():
credential = DefaultAzureCredential()
async with BlobServiceClient(
account_url="https://<account>.blob.core.windows.net",
credential=credential
) as client:
# ... async operations
pass
await credential.close()
ベストプラクティス
- ローカルと Azure の両方で実行するコードには DefaultAzureCredential を使用する
- 資格情報をハードコードしない — 環境変数またはマネージド ID を使用する
- 本番環境の Azure デプロイではマネージド ID を優先する
- カスタムの資格情報の順序が必要な場合は ChainedTokenCredential を使用する
- 非同期資格情報は明示的に閉じるか、コンテキストマネージャーを使用する
- ユーザー割り当てマネージド ID には AZURE_CLIENT_ID を設定する
- 使用しない資格情報を除外して、認証を高速化する
使用する場面
このスキルは、概要に記載されたワークフローまたはアクションを実行する場合に適用できます。
制限事項
- 上記の説明にある範囲とタスクが明確に一致する場合にのみ、このスキルを使用してください。
- 出力を、環境固有の検証、テスト、専門家によるレビューの代わりとして扱わないでください。
- 必要な入力、権限、安全上の境界、成功基準が不足している場合は、作業を中断して確認を求めてください。