|
Add this skill
npx mdskills install sickn33/azure-keyvault-pyComprehensive Azure Key Vault reference with clear examples but lacks agent workflow instructions
1---2name: azure-keyvault-py3description: |4 Azure Key Vault SDK for Python. Use for secrets, keys, and certificates management with secure storage.5 Triggers: "key vault", "SecretClient", "KeyClient", "CertificateClient", "secrets", "encryption keys".6package: azure-keyvault-secrets, azure-keyvault-keys, azure-keyvault-certificates7---89# Azure Key Vault SDK for Python1011Secure storage and management for secrets, cryptographic keys, and certificates.1213## Installation1415```bash16# Secrets17pip install azure-keyvault-secrets azure-identity1819# Keys (cryptographic operations)20pip install azure-keyvault-keys azure-identity2122# Certificates23pip install azure-keyvault-certificates azure-identity2425# All26pip install azure-keyvault-secrets azure-keyvault-keys azure-keyvault-certificates azure-identity27```2829## Environment Variables3031```bash32AZURE_KEYVAULT_URL=https://<vault-name>.vault.azure.net/33```3435## Secrets3637### SecretClient Setup3839```python40from azure.identity import DefaultAzureCredential41from azure.keyvault.secrets import SecretClient4243credential = DefaultAzureCredential()44vault_url = "https://<vault-name>.vault.azure.net/"4546client = SecretClient(vault_url=vault_url, credential=credential)47```4849### Secret Operations5051```python52# Set secret53secret = client.set_secret("database-password", "super-secret-value")54print(f"Created: {secret.name}, version: {secret.properties.version}")5556# Get secret57secret = client.get_secret("database-password")58print(f"Value: {secret.value}")5960# Get specific version61secret = client.get_secret("database-password", version="abc123")6263# List secrets (names only, not values)64for secret_properties in client.list_properties_of_secrets():65 print(f"Secret: {secret_properties.name}")6667# List versions68for version in client.list_properties_of_secret_versions("database-password"):69 print(f"Version: {version.version}, Created: {version.created_on}")7071# Delete secret (soft delete)72poller = client.begin_delete_secret("database-password")73deleted_secret = poller.result()7475# Purge (permanent delete, if soft-delete enabled)76client.purge_deleted_secret("database-password")7778# Recover deleted secret79client.begin_recover_deleted_secret("database-password").result()80```8182## Keys8384### KeyClient Setup8586```python87from azure.identity import DefaultAzureCredential88from azure.keyvault.keys import KeyClient8990credential = DefaultAzureCredential()91vault_url = "https://<vault-name>.vault.azure.net/"9293client = KeyClient(vault_url=vault_url, credential=credential)94```9596### Key Operations9798```python99from azure.keyvault.keys import KeyType100101# Create RSA key102rsa_key = client.create_rsa_key("rsa-key", size=2048)103104# Create EC key105ec_key = client.create_ec_key("ec-key", curve="P-256")106107# Get key108key = client.get_key("rsa-key")109print(f"Key type: {key.key_type}")110111# List keys112for key_properties in client.list_properties_of_keys():113 print(f"Key: {key_properties.name}")114115# Delete key116poller = client.begin_delete_key("rsa-key")117deleted_key = poller.result()118```119120### Cryptographic Operations121122```python123from azure.keyvault.keys.crypto import CryptographyClient, EncryptionAlgorithm124125# Get crypto client for a specific key126crypto_client = CryptographyClient(key, credential=credential)127# Or from key ID128crypto_client = CryptographyClient(129 "https://<vault>.vault.azure.net/keys/<key-name>/<version>",130 credential=credential131)132133# Encrypt134plaintext = b"Hello, Key Vault!"135result = crypto_client.encrypt(EncryptionAlgorithm.rsa_oaep, plaintext)136ciphertext = result.ciphertext137138# Decrypt139result = crypto_client.decrypt(EncryptionAlgorithm.rsa_oaep, ciphertext)140decrypted = result.plaintext141142# Sign143from azure.keyvault.keys.crypto import SignatureAlgorithm144import hashlib145146digest = hashlib.sha256(b"data to sign").digest()147result = crypto_client.sign(SignatureAlgorithm.rs256, digest)148signature = result.signature149150# Verify151result = crypto_client.verify(SignatureAlgorithm.rs256, digest, signature)152print(f"Valid: {result.is_valid}")153```154155## Certificates156157### CertificateClient Setup158159```python160from azure.identity import DefaultAzureCredential161from azure.keyvault.certificates import CertificateClient, CertificatePolicy162163credential = DefaultAzureCredential()164vault_url = "https://<vault-name>.vault.azure.net/"165166client = CertificateClient(vault_url=vault_url, credential=credential)167```168169### Certificate Operations170171```python172# Create self-signed certificate173policy = CertificatePolicy.get_default()174poller = client.begin_create_certificate("my-cert", policy=policy)175certificate = poller.result()176177# Get certificate178certificate = client.get_certificate("my-cert")179print(f"Thumbprint: {certificate.properties.x509_thumbprint.hex()}")180181# Get certificate with private key (as secret)182from azure.keyvault.secrets import SecretClient183secret_client = SecretClient(vault_url=vault_url, credential=credential)184cert_secret = secret_client.get_secret("my-cert")185# cert_secret.value contains PEM or PKCS12186187# List certificates188for cert in client.list_properties_of_certificates():189 print(f"Certificate: {cert.name}")190191# Delete certificate192poller = client.begin_delete_certificate("my-cert")193deleted = poller.result()194```195196## Client Types Table197198| Client | Package | Purpose |199|--------|---------|---------|200| `SecretClient` | `azure-keyvault-secrets` | Store/retrieve secrets |201| `KeyClient` | `azure-keyvault-keys` | Manage cryptographic keys |202| `CryptographyClient` | `azure-keyvault-keys` | Encrypt/decrypt/sign/verify |203| `CertificateClient` | `azure-keyvault-certificates` | Manage certificates |204205## Async Clients206207```python208from azure.identity.aio import DefaultAzureCredential209from azure.keyvault.secrets.aio import SecretClient210211async def get_secret():212 credential = DefaultAzureCredential()213 client = SecretClient(vault_url=vault_url, credential=credential)214215 async with client:216 secret = await client.get_secret("my-secret")217 print(secret.value)218219import asyncio220asyncio.run(get_secret())221```222223## Error Handling224225```python226from azure.core.exceptions import ResourceNotFoundError, HttpResponseError227228try:229 secret = client.get_secret("nonexistent")230except ResourceNotFoundError:231 print("Secret not found")232except HttpResponseError as e:233 if e.status_code == 403:234 print("Access denied - check RBAC permissions")235 raise236```237238## Best Practices2392401. **Use DefaultAzureCredential** for authentication2412. **Use managed identity** in Azure-hosted applications2423. **Enable soft-delete** for recovery (enabled by default)2434. **Use RBAC** over access policies for fine-grained control2445. **Rotate secrets** regularly using versioning2456. **Use Key Vault references** in App Service/Functions config2467. **Cache secrets** appropriately to reduce API calls2478. **Use async clients** for high-throughput scenarios248
Full transparency — inspect the skill content before installing.