Inicio rápido: Biblioteca cliente de secretos de Azure Key Vault para Python

Introducción a la biblioteca cliente de secretos de Azure Key Vault para Python. Siga estos pasos para instalar el paquete y probar el código de ejemplo para realizar tareas básicas. Si usa Key Vault para almacenar secretos, no tendrá que almacenarlos en el código, lo que aumenta la seguridad de las aplicaciones.

Documentación de referencia de API | Código fuente de la biblioteca | Paquete (índice de paquetes de Python)

Prerrequisitos

En este inicio rápido se supone que está ejecutando la CLI de Azure o Azure PowerShell en una ventana de terminal de Linux.

Configuración de un entorno local

En este inicio rápido se usa la biblioteca de identidades de Azure con la CLI de Azure o Azure PowerShell para autenticar el usuario en los servicios de Azure. Los desarrolladores también pueden usar Visual Studio o Visual Studio Code para autenticar sus llamadas. Para más información, consulte Autenticación del cliente mediante la biblioteca cliente Azure Identity.

Inicio de sesión en Azure

  1. Ejecute el comando az login.

    az login
    

    Si la CLI puede abrir el explorador predeterminado, lo hará y cargará una página de inicio de sesión de Azure.

    En caso contrario, abra una página del explorador en https://aka.ms/devicelogin y escriba el código de autorización que se muestra en el terminal.

  2. Inicie sesión con las credenciales de su cuenta en el explorador.

Instalación de los paquetes

  1. En un símbolo del sistema o en un terminal, cree una carpeta de proyecto adecuada y, después, cree y active un entorno virtual de Python, como se describe en el apartado Uso de entornos virtuales de Python.

  2. Instale la biblioteca de identidades de Microsoft Entra:

    pip install azure-identity
    
  3. Instale la biblioteca de secretos de Key Vault:

    pip install azure-keyvault-secrets
    

Creación de un grupo de recursos y de un almacén de claves

  1. Uso del comando az group create para crear un grupo de recursos:

    az group create --name myResourceGroup --location eastus
    

    Si lo prefiere, puede cambiar "eastus" a una ubicación más próxima.

  2. Use az keyvault create para crear el almacén de claves:

    az keyvault create --name <your-unique-keyvault-name> --resource-group myResourceGroup
    

    Reemplace <your-unique-keyvault-name> por un nombre que sea único en todo Azure. Normalmente, se usa el nombre personal o de la empresa, junto con otros números e identificadores.

Establecimiento de la variable de entorno KEY_VAULT_NAME

Nuestro script usará el valor asignado a la variable de entorno KEY_VAULT_NAME como el nombre del almacén de claves. Por lo tanto, debe establecer este valor mediante el comando siguiente:

export KEY_VAULT_NAME=<your-unique-keyvault-name>

Concesión de acceso al almacén de claves

Para conceder permisos de aplicación al almacén de claves a través del control de acceso basado en rol (RBAC), asigne un rol mediante el comando de la CLI de Azure crear la asignación de roles.

az role assignment create --role "Key Vault Secrets User" --assignee "<app-id>" --scope "/subscriptions/<subscription-id>/resourceGroups/<resource-group-name>/providers/Microsoft.KeyVault/vaults/<your-unique-keyvault-name>"

Reemplace <app-id>, <suscripción-id>, <resource-group-name> y <your-unique-keyvault-name> por los valores reales. <app-id> es el identificador de aplicación (cliente) de la aplicación registrada en Azure AD.

Creación del código de ejemplo

La biblioteca cliente de secretos de Azure Key Vault para Python permite administrar los secretos. El siguiente código de ejemplo muestra cómo crear un cliente y cómo establecer, recuperar y eliminar un secreto.

Cree un archivo llamado kv_secrets.py que contenga este código.

import os
from azure.keyvault.secrets import SecretClient
from azure.identity import DefaultAzureCredential

keyVaultName = os.environ["KEY_VAULT_NAME"]
KVUri = f"https://{keyVaultName}.vault.azure.net"

credential = DefaultAzureCredential()
client = SecretClient(vault_url=KVUri, credential=credential)

secretName = input("Input a name for your secret > ")
secretValue = input("Input a value for your secret > ")

print(f"Creating a secret in {keyVaultName} called '{secretName}' with the value '{secretValue}' ...")

client.set_secret(secretName, secretValue)

print(" done.")

print(f"Retrieving your secret from {keyVaultName}.")

retrieved_secret = client.get_secret(secretName)

print(f"Your secret is '{retrieved_secret.value}'.")
print(f"Deleting your secret from {keyVaultName} ...")

poller = client.begin_delete_secret(secretName)
deleted_secret = poller.result()

print(" done.")

Ejecución del código

Asegúrese de que el código de la sección anterior se encuentra en un archivo llamado kv_secrets.py. Luego, ejecute el código con el siguiente comando:

python kv_secrets.py
  • Si se producen errores de permisos, asegúrese de que ha ejecutado el comando az keyvault set-policy o Set-AzKeyVaultAccessPolicy.
  • Al volver a ejecutar el código con el mismo nombre de secreto, puede aparecer el error "(Conflict) Secret <name> is currently in a deleted but recoverable state". Use otro nombre de secreto.

Detalles del código

Autenticación y creación de un cliente

Deben autorizarse las solicitudes de aplicación a la mayor parte de servicios de Azure. El uso de la clase DefaultAzureCredential que proporciona la biblioteca cliente de Azure Identity es el enfoque recomendado para implementar conexiones sin contraseña a los servicios de Azure en el código. DefaultAzureCredential admite varios métodos de autenticación y determina el que se debe usar en tiempo de ejecución. Este enfoque permite que la aplicación use diferentes métodos de autenticación en distintos entornos (local frente a producción) sin implementar código específico del entorno.

En este inicio rápido, DefaultAzureCredential se autentica en el almacén de claves mediante las credenciales del usuario de desarrollo local que inició sesión en la CLI de Azure. Cuando la aplicación se implementa en Azure, el mismo código DefaultAzureCredential puede detectar y usar automáticamente una identidad administrada asignada a una instancia de App Service, máquina virtual u otros servicios. Para más información, consulte Introducción a la identidad administrada.

En el ejemplo siguiente, el nombre del almacén de claves se expande usando el valor de la variable KVUri, con el formato "https://<nombre-del-almacén-de-claves>.vault.azure.net".

credential = DefaultAzureCredential()
client = SecretClient(vault_url=KVUri, credential=credential)

Almacenamiento de un secreto

Una vez que haya obtenido el objeto de cliente para el almacén de claves, puede almacenar un secreto mediante el método set_secret:

client.set_secret(secretName, secretValue)

La llamada a set_secret genera una llamada a la API REST de Azure para el almacén de claves.

Cuando Azure administra la solicitud, autentica la identidad del autor de la llamada (la entidad de servicio) mediante el objeto de credencial que proporcionó al cliente.

Recuperación de un secreto

Para leer un secreto de Key Vault, use el método get_secret:

retrieved_secret = client.get_secret(secretName)

El valor de secreto se incluye en retrieved_secret.value.

Los secretos también se pueden recuperar con el comando az keyvault secret show de la CLI de Azure o con el cmdlet Get-AzKeyVaultSecret de Azure PowerShell.

Eliminación de un secreto

Para eliminar un secreto, use el método begin_delete_secret:

poller = client.begin_delete_secret(secretName)
deleted_secret = poller.result()

El método begin_delete_secret es asincrónico y devuelve un objeto de sondeador. La llamada al método result del sondeador espera hasta su finalización.

Puede comprobar que se ha eliminado el secreto con el comando az keyvault secret show de la CLI de Azure o con el cmdlet Get-AzKeyVaultSecret de Azure PowerShell.

Aun después de haberse eliminado, los secretos permanecen en estado eliminado, pero recuperable, durante un tiempo. Si vuelve a ejecutar el código, use otro nombre de secreto.

Limpieza de recursos

Si también desea experimentar con certificados y claves, puede volver a usar la instancia de Key Vault que se ha creado en este artículo.

De lo contrario, cuando haya terminado con los recursos creados en este artículo, utilice el siguiente comando para eliminar el grupo de recursos y todos los recursos que contiene:

az group delete --resource-group myResourceGroup

Pasos siguientes