azure-keyvault-py
microsoft/skills
Python SDK を使用して、Azure Key Vault 内でシークレット、暗号化キー、および証明書 manages します。
...すべて拡張しますAzure Key Vault Python SDK
シークレット、暗号化キー、および証明書の安全な保存と管理。
インストール
# シークレット
pip install azure-keyvault-secrets azure-identity
# キー(暗号化操作)
pip install azure-keyvault-keys azure-identity
# 証明書
pip install azure-keyvault-certificates azure-identity
# すべて
pip install azure-keyvault-secrets azure-keyvault-keys azure-keyvault-certificates azure-identity
環境変数
AZURE_KEYVAULT_URL=https://<vault-name>.vault.azure.net/ # すべての認証方法で必須
AZURE_TOKEN_CREDENTIALS=prod # 本番環境で DefaultAzureCredential を使用する場合にのみ必須
</vault-name>認証とライフサイクル
🔑 以下のすべてのコードサンプルに適用される2つのルールがあります:
DefaultAzureCredentialを優先してください。 これにより、ローカル(Azure CLI / VS Code / Developer CLI)および Azure(マネージド ID、ワークロード ID)で、コードの変更なしに動作します。接続文字列やアカウント/API キーの使用は避けてください。これらは Entra の監査とローテーションをバイパスするためです。
- ローカル開発:
DefaultAzureCredentialはそのまま動作します。- 本番環境:
AZURE_TOKEN_CREDENTIALS=prod(またはAZURE_TOKEN_CREDENTIALS=<specific_credential></specific_credential>)を設定し、認証チェーンを本番環境安全な資格情報に制限します。- すべてのクライアントをコンテキストマネージャーでラップしてください。 これにより、HTTP トランスポート、ソケット、およびトークンキャッシュが確定的に解放されます:
- 同期:
with <client>(...) as client:</client>- 非同期:
async with <client>(...) as client:</client>およびasync with DefaultAzureCredential() as credential:(azure.identity.aioから)スニペットはこの設定を省略することがありますが、本番コードは常に両方のルールに従う必要があります。
シークレット
SecretClient のセットアップ
from azure.identity import DefaultAzureCredential, ManagedIdentityCredential
from azure.keyvault.secrets import SecretClient
# ローカル開発:DefaultAzureCredential。本番環境:AZURE_TOKEN_CREDENTIALS=prod または AZURE_TOKEN_CREDENTIALS=<specific_credential> を設定
credential = DefaultAzureCredential(require_envvar=True)
# または、本番環境で特定の資格情報を直接使用します:
# 詳細は https://learn.microsoft.com/python/api/overview/azure/identity-readme?view=azure-python#credential-classes を参照
# credential = ManagedIdentityCredential()
vault_url = "https://<vault-name>.vault.azure.net/"
with SecretClient(vault_url=vault_url, credential=credential) as client:
# すべてのシークレット操作はこのブロック内で行います(以下の例を参照)
...
</vault-name></specific_credential>シークレット操作
# シークレットの設定
secret = client.set_secret("database-password", "super-secret-value")
print(f"作成済み: {secret.name}, バージョン: {secret.properties.version}")
# シークレットの取得
secret = client.get_secret("database-password")
print(f"値: {secret.value}")
# 特定バージョンの取得
secret = client.get_secret("database-password", version="abc123")
# シークレットの一覧表示(名前のみ、値は含まれません)
for secret_properties in client.list_properties_of_secrets():
print(f"シークレット: {secret_properties.name}")
# バージョンの一覧表示
for version in client.list_properties_of_secret_versions("database-password"):
print(f"バージョン: {version.version}, 作成日時: {version.created_on}")
# シークレットの削除(ソフト削除)
poller = client.begin_delete_secret("database-password")
deleted_secret = poller.result()
# 完全削除(ソフト削除が有効な場合)
client.purge_deleted_secret("database-password")
# 削除されたシークレットの復元
client.begin_recover_deleted_secret("database-password").result()
キー
KeyClient のセットアップ
from azure.identity import DefaultAzureCredential
from azure.keyvault.keys import KeyClient
credential = DefaultAzureCredential()
vault_url = "https://<vault-name>.vault.azure.net/"
with KeyClient(vault_url=vault_url, credential=credential) as client:
# すべてのキー操作はこのブロック内で行います(以下の例を参照)
...
</vault-name>キー操作
from azure.keyvault.keys import KeyType
# RSA キーの作成
rsa_key = client.create_rsa_key("rsa-key", size=2048)
# EC キーの作成
ec_key = client.create_ec_key("ec-key", curve="P-256")
# キーの取得
key = client.get_key("rsa-key")
print(f"キーの種類: {key.key_type}")
# キーの一覧表示
for key_properties in client.list_properties_of_keys():
print(f"キー: {key_properties.name}")
# キーの削除
poller = client.begin_delete_key("rsa-key")
deleted_key = poller.result()
暗号化操作
from azure.keyvault.keys.crypto import CryptographyClient, EncryptionAlgorithm
# 特定のキーの暗号化クライアントの取得
# crypto_client = CryptographyClient(key, credential=credential)
# またはキー ID から取得
with CryptographyClient(
"https://<vault>.vault.azure.net/keys/<key-name>/<version>",
credential=credential
) as crypto_client:
# 暗号化
plaintext = b"Hello, Key Vault!"
result = crypto_client.encrypt(EncryptionAlgorithm.rsa_oaep, plaintext)
ciphertext = result.ciphertext
# 復号化
result = crypto_client.decrypt(EncryptionAlgorithm.rsa_oaep, ciphertext)
decrypted = result.plaintext
# 署名
from azure.keyvault.keys.crypto import SignatureAlgorithm
import hashlib
digest = hashlib.sha256(b"data to sign").digest()
result = crypto_client.sign(SignatureAlgorithm.rs256, digest)
signature = result.signature
# 検証
result = crypto_client.verify(SignatureAlgorithm.rs256, digest, signature)
print(f"有効: {result.is_valid}")
</version></key-name></vault>証明書
CertificateClient のセットアップ
from azure.identity import DefaultAzureCredential
from azure.keyvault.certificates import CertificateClient, CertificatePolicy
credential = DefaultAzureCredential()
vault_url = "https://<vault-name>.vault.azure.net/"
with CertificateClient(vault_url=vault_url, credential=credential) as client:
# すべての証明書操作はこのブロック内で行います(以下の例を参照)
...
</vault-name>証明書操作
# 自己署名証明書の作成
policy = CertificatePolicy.get_default()
poller = client.begin_create_certificate("my-cert", policy=policy)
certificate = poller.result()
# 証明書の取得
certificate = client.get_certificate("my-cert")
print(f"フィンガープリント: {certificate.properties.x509_thumbprint.hex()}")
# 秘密鍵を含む証明書の取得(シークレットとして)
from azure.keyvault.secrets import SecretClient
with SecretClient(vault_url=vault_url, credential=credential) as secret_client:
cert_secret = secret_client.get_secret("my-cert")
# cert_secret.value には PEM または PKCS12 が含まれます
# 証明書の一覧表示
for cert in client.list_properties_of_certificates():
print(f"証明書: {cert.name}")
# 証明書の削除
poller = client.begin_delete_certificate("my-cert")
deleted = poller.result()
クライアントタイプのテーブル
| クライアント | パッケージ | 目的 |
|---|---|---|
| `SecretClient` | `azure-keyvault-secrets` | シークレットの保存/取得 |
| `KeyClient` | `azure-keyvault-keys` | 暗号化キーの管理 |
| `CryptographyClient` | `azure-keyvault-keys` | 暗号化/復号化/署名/検証 |
| `CertificateClient` | `azure-keyvault-certificates` | 証明書の管理 |
非同期クライアント
from azure.identity.aio import DefaultAzureCredential
from azure.keyvault.secrets.aio import SecretClient
async def get_secret():
async with DefaultAzureCredential() as credential:
async with SecretClient(vault_url=vault_url, credential=credential) as client:
secret = await client.get_secret("my-secret")
print(secret.value)
import asyncio
asyncio.run(get_secret())
エラー処理
from azure.core.exceptions import ResourceNotFoundError, HttpResponseError
try:
secret = client.get_secret("nonexistent")
except ResourceNotFoundError:
print("シークレットが見つかりません")
except HttpResponseError as e:
if e.status_code == 403:
print("アクセス拒否 - RBAC 権限を確認してください")
raise
ベストプラクティス
- 同期または非同期のいずれかを選択し、一貫性を保ってください。 同一の呼び出しパス内で
azure.xxx同期クライアントとazure.xxx.aio非同期クライアントを混在させないでください。モジュールごとに1つのモードを選択してください。 - クライアントと非同期資格情報には常にコンテキストマネージャーを使用してください。 すべてのクライアントを
with Client(...) as client:(同期)またはasync with Client(...) as client:(非同期)でラップしてください。azure.identity.aioからの非同期DefaultAzureCredentialの場合、トークンとトランスポートをクリーンアップするためにasync with credential:も使用してください。 - ローカルで実行されるコードには
DefaultAzureCredentialを使用してください。 Azure で実行されるコードには、特定のトークン資格情報を使用してください。 - Azure でホストされるアプリケーションではマネージド ID を使用してください。
- 復元のためにソフト削除を有効にしてください(デフォルトで有効)
- きめ細かな制御のためにアクセスポリシーよりも RBAC を使用してください。
- バージョン管理を使用してシークレットを定期的にローテーションしてください。
- App Service/Functions 設定で Key Vault 参照を使用してください。
- API 呼び出しを減らすために、シークレットを適切にキャッシュしてください。
- 高スループットシナリオには非同期クライアントを使用してください。
---
name: azure-keyvault-py
description: Manage secrets, cryptographic keys, and certificates in Azure Key Vault using the Python SDK.
license: MIT
---
# Azure Key Vault SDK for Python
Secure storage and management for secrets, cryptographic keys, and certificates.
## Installation
```bash
# Secrets
pip install azure-keyvault-secrets azure-identity
# Keys (cryptographic operations)
pip install azure-keyvault-keys azure-identity
# Certificates
pip install azure-keyvault-certificates azure-identity
# All
pip install azure-keyvault-secrets azure-keyvault-keys azure-keyvault-certificates azure-identity
```
## Environment Variables
```bash
AZURE_KEYVAULT_URL=https://<vault-name>.vault.azure.net/ # Required for all auth methods
AZURE_TOKEN_CREDENTIALS=prod # Required only if DefaultAzureCredential is used in production
```
## Authentication & Lifecycle
> **🔑 Two rules apply to every code sample below:**
>
> 1. **Prefer `DefaultAzureCredential`.** It works locally (Azure CLI / VS Code / Developer CLI) and in Azure (managed identity, workload identity) with no code change. Avoid connection strings, account/API keys — they bypass Entra audit and rotation.
> - Local dev: `DefaultAzureCredential` works as-is.
> - Production: set `AZURE_TOKEN_CREDENTIALS=prod` (or `AZURE_TOKEN_CREDENTIALS=<specific_credential>`) to constrain the credential chain to production-safe credentials.
> 2. **Wrap every client in a context manager** so HTTP transports, sockets, and token caches are released deterministically:
> - Sync: `with <Client>(...) as client:`
> - Async: `async with <Client>(...) as client:` **and** `async with DefaultAzureCredential() as credential:` (from `azure.identity.aio`)
>
> Snippets may abbreviate this setup, but production code should always follow both rules.
## Secrets
### SecretClient Setup
```python
from azure.identity import DefaultAzureCredential, ManagedIdentityCredential
from azure.keyvault.secrets import SecretClient
# Local dev: DefaultAzureCredential. Production: set AZURE_TOKEN_CREDENTIALS=prod or AZURE_TOKEN_CREDENTIALS=<specific_credential>
credential = DefaultAzureCredential(require_envvar=True)
# Or use a specific credential directly in production:
# See https://learn.microsoft.com/python/api/overview/azure/identity-readme?view=azure-python#credential-classes
# credential = ManagedIdentityCredential()
vault_url = "https://<vault-name>.vault.azure.net/"
with SecretClient(vault_url=vault_url, credential=credential) as client:
# All secret operations go inside this block (see examples below)
...
```
### Secret Operations
```python
# Set secret
secret = client.set_secret("database-password", "super-secret-value")
print(f"Created: {secret.name}, version: {secret.properties.version}")
# Get secret
secret = client.get_secret("database-password")
print(f"Value: {secret.value}")
# Get specific version
secret = client.get_secret("database-password", version="abc123")
# List secrets (names only, not values)
for secret_properties in client.list_properties_of_secrets():
print(f"Secret: {secret_properties.name}")
# List versions
for version in client.list_properties_of_secret_versions("database-password"):
print(f"Version: {version.version}, Created: {version.created_on}")
# Delete secret (soft delete)
poller = client.begin_delete_secret("database-password")
deleted_secret = poller.result()
# Purge (permanent delete, if soft-delete enabled)
client.purge_deleted_secret("database-password")
# Recover deleted secret
client.begin_recover_deleted_secret("database-password").result()
```
## Keys
### KeyClient Setup
```python
from azure.identity import DefaultAzureCredential
from azure.keyvault.keys import KeyClient
credential = DefaultAzureCredential()
vault_url = "https://<vault-name>.vault.azure.net/"
with KeyClient(vault_url=vault_url, credential=credential) as client:
# All key operations go inside this block (see examples below)
...
```
### Key Operations
```python
from azure.keyvault.keys import KeyType
# Create RSA key
rsa_key = client.create_rsa_key("rsa-key", size=2048)
# Create EC key
ec_key = client.create_ec_key("ec-key", curve="P-256")
# Get key
key = client.get_key("rsa-key")
print(f"Key type: {key.key_type}")
# List keys
for key_properties in client.list_properties_of_keys():
print(f"Key: {key_properties.name}")
# Delete key
poller = client.begin_delete_key("rsa-key")
deleted_key = poller.result()
```
### Cryptographic Operations
```python
from azure.keyvault.keys.crypto import CryptographyClient, EncryptionAlgorithm
# Get crypto client for a specific key
# crypto_client = CryptographyClient(key, credential=credential)
# Or from key ID
with CryptographyClient(
"https://<vault>.vault.azure.net/keys/<key-name>/<version>",
credential=credential
) as crypto_client:
# Encrypt
plaintext = b"Hello, Key Vault!"
result = crypto_client.encrypt(EncryptionAlgorithm.rsa_oaep, plaintext)
ciphertext = result.ciphertext
# Decrypt
result = crypto_client.decrypt(EncryptionAlgorithm.rsa_oaep, ciphertext)
decrypted = result.plaintext
# Sign
from azure.keyvault.keys.crypto import SignatureAlgorithm
import hashlib
digest = hashlib.sha256(b"data to sign").digest()
result = crypto_client.sign(SignatureAlgorithm.rs256, digest)
signature = result.signature
# Verify
result = crypto_client.verify(SignatureAlgorithm.rs256, digest, signature)
print(f"Valid: {result.is_valid}")
```
## Certificates
### CertificateClient Setup
```python
from azure.identity import DefaultAzureCredential
from azure.keyvault.certificates import CertificateClient, CertificatePolicy
credential = DefaultAzureCredential()
vault_url = "https://<vault-name>.vault.azure.net/"
with CertificateClient(vault_url=vault_url, credential=credential) as client:
# All certificate operations go inside this block (see examples below)
...
```
### Certificate Operations
```python
# Create self-signed certificate
policy = CertificatePolicy.get_default()
poller = client.begin_create_certificate("my-cert", policy=policy)
certificate = poller.result()
# Get certificate
certificate = client.get_certificate("my-cert")
print(f"Thumbprint: {certificate.properties.x509_thumbprint.hex()}")
# Get certificate with private key (as secret)
from azure.keyvault.secrets import SecretClient
with SecretClient(vault_url=vault_url, credential=credential) as secret_client:
cert_secret = secret_client.get_secret("my-cert")
# cert_secret.value contains PEM or PKCS12
# List certificates
for cert in client.list_properties_of_certificates():
print(f"Certificate: {cert.name}")
# Delete certificate
poller = client.begin_delete_certificate("my-cert")
deleted = poller.result()
```
## Client Types Table
| Client | Package | Purpose |
|--------|---------|---------|
| `SecretClient` | `azure-keyvault-secrets` | Store/retrieve secrets |
| `KeyClient` | `azure-keyvault-keys` | Manage cryptographic keys |
| `CryptographyClient` | `azure-keyvault-keys` | Encrypt/decrypt/sign/verify |
| `CertificateClient` | `azure-keyvault-certificates` | Manage certificates |
## Async Clients
```python
from azure.identity.aio import DefaultAzureCredential
from azure.keyvault.secrets.aio import SecretClient
async def get_secret():
async with DefaultAzureCredential() as credential:
async with SecretClient(vault_url=vault_url, credential=credential) as client:
secret = await client.get_secret("my-secret")
print(secret.value)
import asyncio
asyncio.run(get_secret())
```
## Error Handling
```python
from azure.core.exceptions import ResourceNotFoundError, HttpResponseError
try:
secret = client.get_secret("nonexistent")
except ResourceNotFoundError:
print("Secret not found")
except HttpResponseError as e:
if e.status_code == 403:
print("Access denied - check RBAC permissions")
raise
```
## 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. **Always use context managers for clients and async credentials.** Wrap every client in `with Client(...) as client:` (sync) or `async with Client(...) as client:` (async). For async `DefaultAzureCredential` from `azure.identity.aio`, also use `async with credential:` so tokens and transports are cleaned up.
3. **Use `DefaultAzureCredential`** for code that runs locally. Use a specific token credential for code that runs in Azure.
4. **Use managed identity** in Azure-hosted applications
5. **Enable soft-delete** for recovery (enabled by default)
6. **Use RBAC** over access policies for fine-grained control
7. **Rotate secrets** regularly using versioning
8. **Use Key Vault references** in App Service/Functions config
9. **Cache secrets** appropriately to reduce API calls
10. **Use async clients** for high-throughput scenarios
すべてのファイル
0件のファイルazure-keyvault-pyをインストール
スキルファイルをダウンロードして、.claude/skills/ ディレクトリに展開してください。
ZIPをダウンロードリポジトリをクローンし、スキルファイルをプロジェクトにコピーしてください。
git clone https://github.com/microsoft/skills/tree/main/.github/plugins/azure-sdk-python/skills/azure-keyvault-py # Copy SKILL.md to your .claude/skills/ directory
コピー





家
