Azure SDK for Python

Azure SDK for Pythonとは

[[Python]] から Azure のリソースを操作する公式SDKです。[[boto3(AWS SDK for Python)]] が1つのパッケージで全サービスを扱うのに対し、Azure SDK はサービスごとにパッケージが分かれているのが大きな違いです。

pip install azure-identity azure-mgmt-resource azure-storage-blob
パッケージの系統役割
azure-identity認証。どのSDKからも共通で使う
azure-mgmt-*リソースの管理操作(作成・一覧・削除)
サービス別データ面の操作(azure-storage-blob など)

必要なものだけを入れる設計のため依存が小さく保てる一方、「管理操作」と「データ操作」でパッケージが別という構造を最初に理解しておく必要があります。ストレージのコンテナを作るのは azure-mgmt-storage、その中のファイルを読み書きするのは azure-storage-blob、という具合です。

認証はazure-identityに集約する

認証はどのサービスでも azure-identity の資格情報オブジェクトを渡す形で統一されています。

from azure.identity import DefaultAzureCredential
from azure.mgmt.resource import ResourceManagementClient

credential = DefaultAzureCredential()
client = ResourceManagementClient(credential, subscription_id)
for group in client.resource_groups.list():
    print(group.name)

DefaultAzureCredential は、環境変数・開発者のログイン状態・マネージドIDなどを順に試す仕組みです。ローカルでは開発者のログイン、本番ではマネージドIDが選ばれるため、コードを変えずに環境だけを切り替えられます。

本番でマネージドIDを使えば、資格情報そのものを配置せずに済みます。[[シークレット管理]] の観点では、鍵を安全に保管するより鍵を持たない構成にするほうが確実です。

実務での注意点

  • サブスクリプションIDが必須 — 管理系クライアントはほぼ必ず必要です。環境変数で渡す設計にしておくと環境の切り替えが楽になります
  • 一覧はイテレータで返る — 内部でページングされ、繰り返し処理の中で追加取得が起きます。全件をリストへ展開すると待ち時間が集中します
  • APIバージョン — azure-mgmt-* はサービスのAPIバージョンに紐づきます。ドキュメントとパッケージの版が食い違うと、存在しない引数を渡して失敗します
  • クラウド差異 — [[クラウドコンピューティング]] の概念は共通でも、権限モデルや命名はAWSと異なります。同じ処理を両クラウドで書くときは、呼び出し口を抽象化して差異を1箇所へ閉じ込めます

関連技術とのつながり

  • [[Python]] — 実装言語。運用スクリプトから呼ぶ用途が多い
  • [[クラウドコンピューティング]] — 操作対象。概念は共通でも権限モデルは各社で異なる
  • [[シークレット管理]] — マネージドIDで「鍵を持たない」構成にできる
  • [[boto3(AWS SDK for Python)]] — 同じ立ち位置のAWS版。パッケージ構成と認証の作りが対照的
Q: Azure SDK for Python のパッケージ構成の特徴はどれ?
- [ ] 1つのパッケージで全サービスを扱う
- [x] 認証・管理操作・データ操作がサービスごとのパッケージに分かれている
- [ ] 認証専用のパッケージは存在しない
解説: `azure-identity` が認証、`azure-mgmt-*` が管理操作、サービス別パッケージがデータ操作を担う構成です。

Q: `DefaultAzureCredential` の利点はどれ?
- [x] 環境に応じて資格情報の取得方法を自動で選ぶため、コードを変えずに環境を切り替えられる
- [ ] 認証を省略できる
- [ ] アクセスキーをコードへ埋め込みやすくなる
解説: 環境変数・開発者のログイン・マネージドIDなどを順に試すため、ローカルと本番で同じコードが使えます。

Q: 本番のAzure環境で資格情報の配置を避ける手段はどれ?
- [ ] 設定ファイルにキーを書いて権限を絞る
- [x] マネージドIDを使う
- [ ] キーを暗号化してリポジトリへ入れる
解説: マネージドIDを使えば資格情報そのものを配置せずに済み、管理対象を減らせます。