opción
HogarHogar Skill Seguridad azure-keyvault-py

azure-keyvault-py

microsoft/skills microsoft/skills

Gestiona secretos, claves criptográficas y certificados en Azure Key Vault utilizando el SDK de Python.

...Expandir todo
9
Tiempo actualizado 12 de septiembre de 2026

SDK de Azure Key Vault para Python

Almacenamiento seguro y gestión de secretos, claves criptográficas y certificados.

Instalación

# Secretos
pip install azure-keyvault-secrets azure-identity

# Claves (operaciones criptográficas)
pip install azure-keyvault-keys azure-identity

# Certificados
pip install azure-keyvault-certificates azure-identity

# Todos
pip install azure-keyvault-secrets azure-keyvault-keys azure-keyvault-certificates azure-identity

Variables de entorno

AZURE_KEYVAULT_URL=https://<vault-name>.vault.azure.net/  # Obligatorio para todos los métodos de autenticación
AZURE_TOKEN_CREDENTIALS=prod # Obligatorio solo si se usa DefaultAzureCredential en producción
</vault-name>

Autenticación y ciclo de vida

🔑 Dos reglas se aplican a cada ejemplo de código a continuación:

  1. Preferir DefaultAzureCredential. Funciona localmente (Azure CLI / VS Code / Developer CLI) y en Azure (identidad administrada, identidad de carga de trabajo) sin cambios en el código. Evite las cadenas de conexión, claves de cuenta/API: estas omiten la auditoría y rotación de Entra.
    • Desarrollo local: DefaultAzureCredential funciona tal cual.
    • Producción: establezca AZURE_TOKEN_CREDENTIALS=prod (o AZURE_TOKEN_CREDENTIALS=<specific_credential></specific_credential>) para restringir la cadena de credenciales a credenciales seguras para producción.
  2. Envolver cada cliente en un gestor de contexto para que las transferencias HTTP, los sockets y las cachés de tokens se liberen de forma determinista:
    • Síncrono: with <client>(...) as client:</client>
    • Asíncrono: async with <client>(...) as client:</client> y async with DefaultAzureCredential() as credential: (de azure.identity.aio)

Los fragmentos de código pueden abreviar esta configuración, pero el código de producción debe seguir siempre ambas reglas.

Secretos

Configuración de SecretClient

from azure.identity import DefaultAzureCredential, ManagedIdentityCredential
from azure.keyvault.secrets import SecretClient

# Desarrollo local: DefaultAzureCredential. Producción: establezca AZURE_TOKEN_CREDENTIALS=prod o AZURE_TOKEN_CREDENTIALS=<specific_credential>
credential = DefaultAzureCredential(require_envvar=True)
# O use una credencial específica directamente en producción:
# Consulte 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:
    # Todas las operaciones de secretos van dentro de este bloque (ver ejemplos a continuación)
    ...
</vault-name></specific_credential>

Operaciones con secretos

# Establecer secreto
secret = client.set_secret("database-password", "super-secret-value")
print(f"Creado: {secret.name}, versión: {secret.properties.version}")

# Obtener secreto
secret = client.get_secret("database-password")
print(f"Valor: {secret.value}")

# Obtener versión específica
secret = client.get_secret("database-password", version="abc123")

# Listar secretos (solo nombres, no valores)
for secret_properties in client.list_properties_of_secrets():
    print(f"Secreto: {secret_properties.name}")

# Listar versiones
for version in client.list_properties_of_secret_versions("database-password"):
    print(f"Versión: {version.version}, Creado: {version.created_on}")

# Eliminar secreto (eliminación suave)
poller = client.begin_delete_secret("database-password")
deleted_secret = poller.result()

# Purgar (eliminación permanente, si la eliminación suave está habilitada)
client.purge_deleted_secret("database-password")

# Recuperar secreto eliminado
client.begin_recover_deleted_secret("database-password").result()

Claves

Configuración de 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:
    # Todas las operaciones de claves van dentro de este bloque (ver ejemplos a continuación)
    ...
</vault-name>

Operaciones con claves

from azure.keyvault.keys import KeyType

# Crear clave RSA
rsa_key = client.create_rsa_key("rsa-key", size=2048)

# Crear clave EC
ec_key = client.create_ec_key("ec-key", curve="P-256")

# Obtener clave
key = client.get_key("rsa-key")
print(f"Tipo de clave: {key.key_type}")

# Listar claves
for key_properties in client.list_properties_of_keys():
    print(f"Clave: {key_properties.name}")

# Eliminar clave
poller = client.begin_delete_key("rsa-key")
deleted_key = poller.result()

Operaciones criptográficas

from azure.keyvault.keys.crypto import CryptographyClient, EncryptionAlgorithm

# Obtener cliente criptográfico para una clave específica
# crypto_client = CryptographyClient(key, credential=credential)
# O desde el identificador de clave
with CryptographyClient(
    "https://<vault>.vault.azure.net/keys/<key-name>/<version>",
    credential=credential
) as crypto_client:
    # Cifrar
    plaintext = b"Hello, Key Vault!"
    result = crypto_client.encrypt(EncryptionAlgorithm.rsa_oaep, plaintext)
    ciphertext = result.ciphertext

    # Descifrar
    result = crypto_client.decrypt(EncryptionAlgorithm.rsa_oaep, ciphertext)
    decrypted = result.plaintext

    # Firmar
    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

    # Verificar
    result = crypto_client.verify(SignatureAlgorithm.rs256, digest, signature)
    print(f"Válido: {result.is_valid}")
</version></key-name></vault>

Certificados

Configuración de 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:
    # Todas las operaciones de certificados van dentro de este bloque (ver ejemplos a continuación)
    ...
</vault-name>

Operaciones con certificados

# Crear certificado autofirmado
policy = CertificatePolicy.get_default()
poller = client.begin_create_certificate("my-cert", policy=policy)
certificate = poller.result()

# Obtener certificado
certificate = client.get_certificate("my-cert")
print(f"Huella digital: {certificate.properties.x509_thumbprint.hex()}")

# Obtener certificado con clave privada (como secreto)
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 contiene PEM o PKCS12

# Listar certificados
for cert in client.list_properties_of_certificates():
    print(f"Certificado: {cert.name}")

# Eliminar certificado
poller = client.begin_delete_certificate("my-cert")
deleted = poller.result()

Tabla de tipos de cliente

ClientePaquetePropósito
`SecretClient``azure-keyvault-secrets`Almacenar/recuperar secretos
`KeyClient``azure-keyvault-keys`Gestionar claves criptográficas
`CryptographyClient``azure-keyvault-keys`Cifrar/descifrar/firmar/verificar
`CertificateClient``azure-keyvault-certificates`Gestionar certificados

Clientes asíncronos

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())

Manejo de errores

from azure.core.exceptions import ResourceNotFoundError, HttpResponseError

try:
    secret = client.get_secret("nonexistent")
except ResourceNotFoundError:
    print("Secreto no encontrado")
except HttpResponseError as e:
    if e.status_code == 403:
        print("Acceso denegado: compruebe los permisos de RBAC")
    raise

Mejores prácticas

  1. Elegir síncrono O asíncrono y mantener la coherencia. No mezcle clientes síncronos azure.xxx con clientes asíncronos azure.xxx.aio en la misma ruta de llamada. Elija un modo por módulo.
  2. Usar siempre gestores de contexto para clientes y credenciales asíncronas. Envolver cada cliente en with Client(...) as client: (síncrono) o async with Client(...) as client: (asíncrono). Para DefaultAzureCredential asíncrono de azure.identity.aio, también usar async with credential: para que los tokens y las transferencias se limpien correctamente.
  3. Usar DefaultAzureCredential para código que se ejecuta localmente. Usar una credencial de token específica para código que se ejecuta en Azure.
  4. Usar identidad administrada en aplicaciones alojadas en Azure
  5. Habilitar la eliminación suave para la recuperación (habilitada por defecto)
  6. Usar RBAC en lugar de políticas de acceso para un control fino
  7. Rotar secretos regularmente usando versionado
  8. Usar referencias de Key Vault en la configuración de App Service/Functions
  9. Almacenar en caché los secretos de manera adecuada para reducir las llamadas a la API
  10. Usar clientes asíncronos para escenarios de alto rendimiento
Ver en GitHub
---
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

Todos los archivos

0 archivos

Instalar azure-keyvault-py

Descarga y extrae los archivos de habilidades en tu directorio .claude/skills/.

Descargar ZIP

Clona el repositorio y copia los archivos de la habilidad a tu proyecto.

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

Copiar Copiar
Configuración rápida: Copia la carpeta de la habilidad a .claude/skills/ Claude detectará y utilizará automáticamente la habilidad
Repositorio microsoft/skills

Habilidades relacionadas

gmgn-portfolio
Tiempo actualizado 1 de julio de 2026
zeroize-audit
Tiempo actualizado 1 de julio de 2026
device-integrity
Tiempo actualizado 29 de junio de 2026
flutter-use-http-package
Tiempo actualizado 30 de junio de 2026
OR