Tutorial: Uso de Azure Key Vault con una máquina virtual en Python

Azure Key Vault le ayuda a proteger las claves, los secretos y los certificados, como las claves de API y las cadenas de conexión de base de datos.

En este tutorial, configurará una aplicación de Python para leer información de Azure Key Vault mediante identidades administradas para recursos de Azure. Aprenderá a:

  • Creación de un Almacén de claves
  • Almacenar un secreto en Key Vault
  • Crear una máquina virtual Linux de Azure
  • Habilitar una identidad administrada para la máquina virtual
  • Conceder los permisos necesarios para que la aplicación de consola lea datos de Key Vault
  • Recuperar un secreto del almacén de claves

Antes de empezar, lea los conceptos básicos de Key Vault.

Si no tiene una suscripción a Azure, cree una cuenta gratuita.

Requisitos previos

Para Windows, Mac y Linux:

  • Git
  • Este tutorial requiere que se ejecute localmente la CLI de Azure. Debe tener instalada la versión 2.0.4 de la CLI de Azure o una versión posterior. Ejecute az --version para encontrar la versión. Si necesita instalarla o actualizarla, consulte Instalación de la CLI de Azure 2.0.

Inicio de sesión en Azure

Para iniciar sesión en Azure mediante la CLI de Azure, escriba:

az login

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

En este inicio rápido se usa un almacén de claves de Azure creado previamente. Puede crear un almacén de claves siguiendo los pasos descritos en el inicio rápido de CLI de Azure, inicio rápido de Azure PowerShell o inicio rápido de Azure Portal.

Como alternativa, puede ejecutar simplemente los siguientes comandos de la CLI de Azure o de Azure PowerShell.

Importante

Cada almacén de claves debe tener un nombre único. Reemplace <nombre-almacén de claves-único> por el nombre del almacén de claves en los siguientes ejemplos.

az group create --name "myResourceGroup" -l "EastUS"

az keyvault create --name "<your-unique-keyvault-name>" -g "myResourceGroup"

Rellenado del almacén de claves con un secreto

Vamos a crear un secreto llamado mySecret cuyo valor sea ¡Correcto! . Un secreto puede ser una contraseña, una cadena de conexión SQL o cualquier otra información que necesite mantener segura y disponible para la aplicación.

Para agregar un secreto al almacén de claves recién creado, use el comando siguiente:

az keyvault secret set --vault-name "<your-unique-keyvault-name>" --name "mySecret" --value "Success!"

Creación de una máquina virtual

Create una máquina virtual llamada myVM, para lo que debe usar uno de los siguientes métodos:

Linux Windows
CLI de Azure CLI de Azure
PowerShell PowerShell
Azure Portal Portal de Azure

Para crear una máquina virtual Linux mediante la CLI de Azure, use el comando az vm create. En el ejemplo siguiente se agrega una cuenta de usuario llamada azureuser. El parámetro --generate-ssh-keys se usa para generar automáticamente una clave SSH y colocarla en la ubicación de la clave predeterminada ( ~/.ssh).

az vm create \
  --resource-group myResourceGroup \
  --name myVM \
  --image Ubuntu2204 \
  --admin-username azureuser \
  --generate-ssh-keys

Anote el valor de publicIpAddress en la salida.

Asignación de una identidad a la máquina virtual

Cree una identidad asignada por el sistema para la máquina virtual mediante el comando az vm identity assign de la CLI de Azure:

az vm identity assign --name "myVM" --resource-group "myResourceGroup"

Tenga en cuenta la identidad asignada por el sistema que se muestra en el código siguiente. La salida del comando anterior sería:

{
  "systemAssignedIdentity": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "userAssignedIdentities": {}
}

Asignación de permisos a la identidad de máquina virtual

Ahora puede asignar los permisos de la identidad creada anteriormente al almacén de claves mediante la ejecución del comando siguiente:

az keyvault set-policy --name "<your-unique-keyvault-name>" --object-id "<systemAssignedIdentity>" --secret-permissions get list

Inicio de sesión en la máquina virtual

Para iniciar sesión en la máquina virtual, siga las instrucciones que encontrará en el artículo en el que se explica la conexión y el inicio de sesión en una máquina virtual Linux en Azure, o bien en el que se explica la conexión y el inicio de sesión en una máquina virtual Windows en Azure.

Para iniciar sesión en una máquina virtual Linux, puede usar el comando ssh con el valor de <publicIpAddress> que se proporciona en el paso Creación de una máquina virtual:

ssh azureuser@<PublicIpAddress>

Instalación de bibliotecas de Python en la máquina virtual

En la máquina virtual, instale las dos bibliotecas de Python que vamos a usar en el script de Python: azure-keyvault-secrets y azure.identity.

En una máquina virtual Linux, por ejemplo, se puede usar pip3 para instalarlas:

pip3 install azure-keyvault-secrets

pip3 install azure.identity

Creación y edición del script de Python de ejemplo

En la máquina virtual, cree un archivo de Python llamado sample.py. Posteriormente, edítelo para que contenga el siguiente código, reemplazando <nombre-almacén de claves-único> por el nombre de su almacén de claves:

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

key_vault_name = "<your-unique-keyvault-name>"
key_vault_uri = f"https://{key_vault_name}.vault.azure.net"
secret_name = "mySecret"

credential = DefaultAzureCredential()
client = SecretClient(vault_url=key_vault_uri, credential=credential)
retrieved_secret = client.get_secret(secret_name)

print(f"The value of secret '{secret_name}' in '{key_vault_name}' is: '{retrieved_secret.value}'")

Ejecución de la aplicación de Python de ejemplo

Por último, ejecute sample.py. Si todo ha ido bien, debería devolver el valor de su secreto:

python3 sample.py

The value of secret 'mySecret' in '<your-unique-keyvault-name>' is: 'Success!'

Limpieza de recursos

Cuando ya no sean necesarios, elimine la máquina virtual y el almacén de claves. Puede hacerlo rápidamente eliminando el grupo de recursos al que pertenecen:

az group delete -g myResourceGroup

Pasos siguientes

API REST de Azure Key Vault