Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Azure Key Vault ayuda a solucionar los problemas siguientes:
- Administración de claves criptográficas (esta biblioteca): creación, almacenamiento y control del acceso a las claves usadas para cifrar los datos
- Administración de secretos (azure-keyvault-secrets): almacene y controle de forma segura el acceso a tokens, contraseñas, certificados, claves de API y otros secretos.
- Administración de certificados (azure-keyvault-certificates): creación, administración e implementación de certificados SSL/TLS públicos y privados
- Administración de almacenes (azure-keyvault-administration): control de acceso basado en rol (RBAC) y opciones de copia de seguridad y restauración de nivel de almacén
Código | fuente Paquete (PyPI) | Documentación | de referencia de API | Documentación del productoMuestras
Introducción
Instalar paquetes
Instale azure-keyvault-keys y azure-identity con pip:
pip install azure-keyvault-keys azure-identity
azure-identity se usa para la autenticación de Azure Active Directory, como se muestra a continuación.
Requisitos previos
Python 2.7, 3.5.3 o versiones posteriores
Un Key Vault. Si necesita crear uno, puede usar azure Cloud Shell para crear uno con estos comandos (reemplace
"my-resource-group"y"my-key-vault"por sus propios nombres únicos):(Opcional) si desea que un nuevo grupo de recursos contenga la Key Vault:
az group create --name my-resource-group --location westus2Cree el Key Vault:
az keyvault create --resource-group my-resource-group --name my-key-vaultSalida:
{ "id": "...", "location": "westus2", "name": "my-key-vault", "properties": { "accessPolicies": [...], "createMode": null, "enablePurgeProtection": null, "enableSoftDelete": null, "enabledForDeployment": false, "enabledForDiskEncryption": null, "enabledForTemplateDeployment": null, "networkAcls": null, "provisioningState": "Succeeded", "sku": { "name": "standard" }, "tenantId": "...", "vaultUri": "https://my-key-vault.vault.azure.net/" }, "resourceGroup": "my-resource-group", "type": "Microsoft.KeyVault/vaults" }La
"vaultUri"propiedad es lavault_urlusada por KeyClient.
Autenticar el cliente
En este documento se muestra cómo usar DefaultAzureCredential para autenticarse como entidad de servicio. Sin embargo, KeyClient acepta cualquier credencial de azure-identity . Consulte la documentación de azure-identity para más información sobre otras credenciales.
Creación de una entidad de servicio (opcional)
Este fragmento de código de Azure Cloud Shell muestra cómo crear una nueva entidad de servicio. Antes de usarlo, reemplace "your-application-name" por un nombre más adecuado para la entidad de servicio.
Cree una entidad de servicio:
az ad sp create-for-rbac --name http://my-application --skip-assignment
Salida:
{ "appId": "generated app id", "displayName": "my-application", "name": "http://my-application", "password": "random password", "tenant": "tenant id" }
Use la salida para establecer AZURE_CLIENT_ID ("appId" anterior), AZURE_CLIENT_SECRET ("contraseña" anterior) y AZURE_TENANT_ID ("inquilino" anterior) variables de entorno. En el ejemplo siguiente se muestra una manera de hacerlo en Bash:
export AZURE_CLIENT_ID="generated app id"
export AZURE_CLIENT_SECRET="random password"
export AZURE_TENANT_ID="tenant id"
Autorice a la entidad de servicio para realizar operaciones de clave en el Key Vault:
az keyvault set-policy --name my-key-vault --spn $AZURE_CLIENT_ID --key-permissions backup delete get list create update decrypt encrypt
Permisos posibles:
- Administración de claves: backup, delete, get, list, purge, recover, restore, create, update, import
- Operaciones criptográficas: descifrado, cifrado, unwrapKey, wrapKey, verify, sign
Creación de un cliente
Una vez establecida la AZURE_CLIENT_ID, AZURE_CLIENT_SECRET y AZURE_TENANT_ID variables de entorno, DefaultAzureCredential podrá autenticar KeyClient.
La construcción del cliente también requiere la dirección URL del almacén, que puede obtener desde la CLI de Azure o Azure Portal. En Azure Portal, esta dirección URL es el "nombre DNS" del almacén.
from azure.identity import DefaultAzureCredential
from azure.keyvault.keys import KeyClient
credential = DefaultAzureCredential()
key_client = KeyClient(vault_url="https://my-key-vault.vault.azure.net/", credential=credential)
Conceptos clave
Teclas
Azure Key Vault puede crear y almacenar claves de curva RSA y elípticas. Ambos se pueden proteger opcionalmente mediante módulos de seguridad de hardware (HSM). Azure Key Vault también puede realizar operaciones criptográficas con ellos. Para obtener más información sobre las claves y las operaciones y algoritmos admitidos, consulte la documentación de Key Vault.
KeyClient puede crear claves en el almacén, obtener claves existentes del almacén, actualizar metadatos de clave y eliminar claves, como se muestra en los siguientes.
Ejemplos
Esta sección contiene fragmentos de código que abarcan tareas comunes:
- Crear una clave
- Recuperar una clave
- Actualizar una clave existente
- Eliminar una clave
- Enumerar claves
- Realización de operaciones criptográficas
- Creación asincrónica de una clave
- Enumerar claves de forma asincrónica
Crear una clave
create_rsa_key y create_ec_key crear claves de curva RSA y elípticas en el almacén, respectivamente. Si ya existe una clave con el mismo nombre, se crea una nueva versión de esa clave.
from azure.identity import DefaultAzureCredential
from azure.keyvault.keys import KeyClient
credential = DefaultAzureCredential()
key_client = KeyClient(vault_url="https://my-key-vault.vault.azure.net/", credential=credential)
# Create an RSA key
rsa_key = key_client.create_rsa_key("rsa-key-name", size=2048)
print(rsa_key.name)
print(rsa_key.key_type)
# Create an elliptic curve key
ec_key = key_client.create_ec_key("ec-key-name", curve="P-256")
print(ec_key.name)
print(ec_key.key_type)
Recuperar una clave
get_key recupera una clave almacenada anteriormente en el almacén.
from azure.identity import DefaultAzureCredential
from azure.keyvault.keys import KeyClient
credential = DefaultAzureCredential()
key_client = KeyClient(vault_url="https://my-key-vault.vault.azure.net/", credential=credential)
key = key_client.get_key("key-name")
print(key.name)
Actualizar una clave existente
update_key_properties actualiza las propiedades de una clave almacenada previamente en el Key Vault.
from azure.identity import DefaultAzureCredential
from azure.keyvault.keys import KeyClient
credential = DefaultAzureCredential()
key_client = KeyClient(vault_url="https://my-key-vault.vault.azure.net/", credential=credential)
# we will now disable the key for further use
updated_key = key_client.update_key_properties("key-name", enabled=False)
print(updated_key.name)
print(updated_key.properties.enabled)
Eliminar una clave
begin_delete_key solicita Key Vault eliminar una clave, devolviendo un sondeo que permite esperar a que finalice la eliminación. La espera resulta útil cuando el almacén tiene habilitada la eliminación temporal y desea purgar (eliminar permanentemente) la clave lo antes posible. Cuando la eliminación temporal está deshabilitada, begin_delete_key es permanente.
from azure.identity import DefaultAzureCredential
from azure.keyvault.keys import KeyClient
credential = DefaultAzureCredential()
key_client = KeyClient(vault_url="https://my-key-vault.vault.azure.net/", credential=credential)
deleted_key = key_client.begin_delete_key("key-name").result()
print(deleted_key.name)
print(deleted_key.deleted_date)
Enumeración de claves
list_properties_of_keys enumera las propiedades de todas las claves del almacén del cliente.
from azure.identity import DefaultAzureCredential
from azure.keyvault.keys import KeyClient
credential = DefaultAzureCredential()
key_client = KeyClient(vault_url="https://my-key-vault.vault.azure.net/", credential=credential)
keys = key_client.list_properties_of_keys()
for key in keys:
# the list doesn't include values or versions of the keys
print(key.name)
Operaciones criptográficas
CryptographyClient permite operaciones criptográficas (cifrar/descifrar, encapsular/desencapsular, firmar/comprobar) mediante una clave determinada.
from azure.identity import DefaultAzureCredential
from azure.keyvault.keys import KeyClient
from azure.keyvault.keys.crypto import CryptographyClient, EncryptionAlgorithm
credential = DefaultAzureCredential()
key_client = KeyClient(vault_url="https://my-key-vault.vault.azure.net/", credential=credential)
key = key_client.get_key("key-name")
crypto_client = CryptographyClient(key, credential=credential)
plaintext = b"plaintext"
result = crypto_client.encrypt(EncryptionAlgorithm.rsa_oaep, plaintext)
decrypted = crypto_client.decrypt(result.algorithm, result.ciphertext)
Consulte la documentación del paquete para obtener más detalles de la API de criptografía.
API asincrónica
Esta biblioteca incluye una API asincrónica completa compatible con Python 3.5 y versiones posteriores. Para usarlo, primero debe instalar un transporte asincrónico, como aiohttp. Consulte la documentación de azure-core para más información.
Los clientes asincrónicos deben cerrarse cuando ya no sean necesarios. Cada cliente asincrónico es un administrador de contexto asincrónico y define un método asincrónico close . Por ejemplo:
from azure.keyvault.keys import KeyClient
# call close when the client is no longer needed
client = KeyClient()
...
await client.close()
# alternatively, use the client as an async context manager
client = KeyClient()
async with client:
...
Creación asincrónica de una clave
create_rsa_key y create_ec_key crear claves de curva RSA y elípticas en el almacén, respectivamente. Si ya existe una clave con el mismo nombre, se crea una nueva versión de la clave.
from azure.identity.aio import DefaultAzureCredential
from azure.keyvault.keys.aio import KeyClient
credential = DefaultAzureCredential()
key_client = KeyClient(vault_url="https://my-key-vault.vault.azure.net/", credential=credential)
# Create an RSA key
rsa_key = await key_client.create_rsa_key("rsa-key-name", size=2048)
print(rsa_key.name)
print(rsa_key.key_type)
# Create an elliptic curve key
ec_key = await key_client.create_ec_key("ec-key-name", curve="P-256")
print(ec_key.name)
print(ec_key.key_type)
Enumerar claves de forma asincrónica
list_properties_of_keys enumera las propiedades de todas las claves del almacén del cliente.
from azure.identity.aio import DefaultAzureCredential
from azure.keyvault.keys.aio import KeyClient
credential = DefaultAzureCredential()
key_client = KeyClient(vault_url="https://my-key-vault.vault.azure.net/", credential=credential)
keys = key_client.list_properties_of_keys()
async for key in keys:
print(key.name)
Solución de problemas
General
Key Vault los clientes generan excepciones definidas en azure-core. Por ejemplo, si intenta obtener una clave que no existe en el almacén, KeyClient genera ResourceNotFoundError:
from azure.identity import DefaultAzureCredential
from azure.keyvault.keys import KeyClient
from azure.core.exceptions import ResourceNotFoundError
credential = DefaultAzureCredential()
key_client = KeyClient(vault_url="https://my-key-vault.vault.azure.net/", credential=credential)
try:
key_client.get_key("which-does-not-exist")
except ResourceNotFoundError as e:
print(e.message)
Registro
Esta biblioteca usa la biblioteca de registro estándar para el registro. La información básica sobre las sesiones HTTP (direcciones URL, encabezados, etc.) se registra en el nivel INFO.
El registro detallado de nivel de DEPURACIÓN, incluidos los cuerpos de solicitud/respuesta y los encabezados no aprobados, se puede habilitar en un cliente con el logging_enable argumento :
from azure.identity import DefaultAzureCredential
from azure.keyvault.keys import KeyClient
import sys
import logging
# Create a logger for the 'azure' SDK
logger = logging.getLogger('azure')
logger.setLevel(logging.DEBUG)
# Configure a console output
handler = logging.StreamHandler(stream=sys.stdout)
logger.addHandler(handler)
credential = DefaultAzureCredential()
# This client will log detailed information about its HTTP sessions, at DEBUG level
client = KeyClient(vault_url="https://my-key-vault.vault.azure.net/", credential=credential, logging_enable=True)
Igualmente, logging_enable puede habilitar el registro detallado de una sola operación, aunque no esté habilitado para el cliente:
client.get_key("my-key", logging_enable=True)
Pasos siguientes
Hay varios ejemplos disponibles en el repositorio de GitHub del SDK de Azure para Python. Estos proporcionan código de ejemplo para escenarios de Key Vault adicionales:
- hello_world.py y hello_world_async.py : claves create/get/update/delete
- list_operations.py y list_operations_async.py : operaciones de lista básicas para claves
- backup_restore_operations.py y backup_restore_operations_async.py : copia de seguridad y recuperación de claves
- recover_purge_operations.py y recover_purge_operations_async.py : recuperación y purga de claves
Documentación adicional
Para obtener documentación más amplia sobre Azure Key Vault, consulte la documentación de referencia de api.
Contribuciones
Este proyecto agradece las contribuciones y sugerencias. La mayoría de las contribuciones requieren que acepte un Contrato de licencia para el colaborador (CLA) que declara que tiene el derecho a concedernos y nos concede los derechos para usar su contribución. Para más detalles, visite https://cla.microsoft.com.
Cuando se envía una solicitud de incorporación de cambios, un bot de CLA determinará de forma automática si tiene que aportar un CLA y completar la PR adecuadamente (por ejemplo, la etiqueta, el comentario). Solo siga las instrucciones que le dará el bot. Solo será necesario que lo haga una vez en todos los repositorios con nuestro CLA.
El proyecto ha adoptado el Código de conducta de código abierto de Microsoft. Para obtener más información, consulte las preguntas más frecuentes del código de conducta o póngase en contacto con opencode@microsoft.com si tiene cualquier otra pregunta o comentario.

Azure SDK for Python