Tutorial: Uso de Azure Key Vault con una máquina virtual Windows en PythonTutorial: Use Azure Key Vault with a Windows virtual machine in Python

Azure Key Vault ayuda a proteger secretos como las claves de API, las cadenas de conexión de base de datos necesarias para acceder a las aplicaciones, los servicios y los recursos de TI.Azure Key Vault helps you to protect secrets such as API keys, the database connection strings you need to access your applications, services, and IT resources.

En este tutorial, aprenderá cómo obtener una aplicación de consola para leer información de Azure Key Vault.In this tutorial, you learn how to get a console application to read information from Azure Key Vault. Para ello, use identidades administradas para recursos de Azure.To do so, you use managed identities for Azure resources.

En este tutorial se muestra cómo realizar las siguientes acciones:The tutorial shows you how to:

  • Cree un almacén de claves.Create a key vault.
  • Agregue un secreto al almacén de claves.Add a secret to the key vault.
  • Recuperar un secreto del almacén de claves.Retrieve a secret from the key vault.
  • Cree una máquina virtual de Azure.Create an Azure virtual machine.
  • Habilite una entidad administrada.Enable a managed identity.
  • Asigne permisos a la identidad de máquina virtual.Assign permissions to the VM identity.

Antes de empezar, lea los conceptos básicos de Key Vault.Before you begin, read Key Vault basic concepts.

Si no tiene una suscripción a Azure, cree una cuenta gratuita.If you don’t have an Azure subscription, create a free account.

Requisitos previosPrerequisites

Para Windows, Mac y Linux:For Windows, Mac, and Linux:

  • GitGit
  • Este tutorial requiere que se ejecute localmente la CLI de Azure.This tutorial requires that you run the Azure CLI locally. Debe tener instalada la versión 2.0.4 de la CLI de Azure o una versión posterior.You must have the Azure CLI version 2.0.4 or later installed. Ejecute az --version para encontrar la versión.Run az --version to find the version. Si necesita instalarla o actualizarla, consulte Instalación de la CLI de Azure 2.0.If you need to install or upgrade the CLI, see Install Azure CLI 2.0.

Acerca de Managed Service IdentityAbout Managed Service Identity

Azure Key Vault almacena las credenciales de forma segura, de modo que no se muestran en el código.Azure Key Vault stores credentials securely, so they're not displayed in your code. Sin embargo, debe autenticarse en Azure Key Vault para recuperar las claves.However, you need to authenticate to Azure Key Vault to retrieve your keys. Para autenticarse en Key Vault, necesita una credencial.To authenticate to Key Vault, you need a credential. Se trata de un dilema de arranque clásico.It's a classic bootstrap dilemma. Managed Service Identity (MSI) soluciona este problema al proporcionar una identidad de arranque que simplifica el proceso.Managed Service Identity (MSI) solves this issue by providing a bootstrap identity that simplifies the process.

Al habilitar MSI para un servicio de Azure, como Azure Virtual Machines, Azure App Service o Azure Functions, Azure crea una entidad de servicio.When you enable MSI for an Azure service, such as Azure Virtual Machines, Azure App Service, or Azure Functions, Azure creates a service principal. MSI hace esto para la instancia del servicio en Azure Active Directory (Azure AD) e inserta las credenciales de la entidad de servicio en esa instancia.MSI does this for the instance of the service in Azure Active Directory (Azure AD) and injects the service principal credentials into that instance.

MSI

A continuación, para obtener un token de acceso, el código llama a un servicio de metadatos local disponible en el recurso de Azure.Next, to get an access token, your code calls a local metadata service that's available on the Azure resource. Para autenticarse en una instancia del servicio Azure Key Vault, el código usa el token de acceso que obtiene del punto de conexión de MSI local.To authenticate to an Azure Key Vault service, your code uses the access token that it gets from the local MSI endpoint.

Inicio de sesión en AzureLog in to Azure

Para iniciar sesión en Azure mediante la CLI de Azure, escriba:To log in to Azure by using the Azure CLI, enter:

az login

Crear un grupo de recursosCreate a resource group

Un grupo de recursos de Azure es un contenedor lógico en el que se implementan y se administran los recursos de Azure.An Azure resource group is a logical container into which Azure resources are deployed and managed.

Cree un grupo de recursos con el comando az group create.Create a resource group by using the az group create command.

Seleccione el nombre de un grupo de recursos y rellene el marcador de posición.Select a resource group name and fill in the placeholder. En el siguiente ejemplo se crea un grupo de recursos en la ubicación Oeste de EE. UU:The following example creates a resource group in the West US location:

# To list locations: az account list-locations --output table
az group create --name "<YourResourceGroupName>" --location "West US"

Usará el grupo de recursos que acaba de crear en este tutorial.You use your newly created resource group throughout this tutorial.

Creación de un Almacén de clavesCreate a key vault

Para crear un almacén de claves en el grupo de recursos que creó en el paso anterior, proporcione la siguiente información:To create a key vault in the resource group that you created in the preceding step, provide the following information:

  • Nombre del almacén de claves: una cadena de entre 3 y 24 caracteres que puede contener solo números (0-9), letras (a-z, A-Z) y guiones (-).Key vault name: a string of 3 to 24 characters that can contain only numbers (0-9), letters (a-z, A-Z), and hyphens (-)
  • Definición de un nombre de grupo de recursosResource group name
  • Ubicación: Oeste de EE. UU.Location: West US
az keyvault create --name "<YourKeyVaultName>" --resource-group "<YourResourceGroupName>" --location "West US"

En este momento, su cuenta de Azure es la única autorizada para realizar operaciones en este nuevo almacén de claves.At this point, your Azure account is the only one that's authorized to perform operations on this new key vault.

Incorporación de un secreto al almacén de clavesAdd a secret to the key vault

Estamos agregando un secreto para ayudar a ilustrar cómo funciona.We're adding a secret to help illustrate how this works. El secreto podría ser una cadena de conexión SQL o cualquier otra información que necesite mantener segura y disponible para la aplicación.The secret might be a SQL connection string or any other information that you need to keep both secure and available to your application.

Para crear un secreto en el almacén de claves denominado AppSecret, escriba el siguiente comando:To create a secret in the key vault called AppSecret, enter the following command:

az keyvault secret set --vault-name "<YourKeyVaultName>" --name "AppSecret" --value "MySecret"

Este secreto almacena el valor MySecret.This secret stores the value MySecret.

de una máquina virtualCreate a virtual machine

Puede crear una máquina virtual mediante uno de los métodos siguientes:You can create a virtual machine by using one of the following methods:

Asignación de una identidad a la máquina virtualAssign an identity to the VM

En este paso, va a crear una identidad asignada por el sistema para la máquina virtual mediante la ejecución del siguiente comando en la CLI de Azure:In this step, you create a system-assigned identity for the virtual machine by running the following command in the Azure CLI:

az vm identity assign --name <NameOfYourVirtualMachine> --resource-group <YourResourceGroupName>

Tenga en cuenta la identidad asignada por el sistema que se muestra en el código siguiente.Note the system-assigned identity that's displayed in the following code. La salida del comando anterior sería:The output of the preceding command would be:

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

Asignación de permisos a la identidad de máquina virtualAssign permissions to the VM identity

Ahora puede asignar los permisos de la identidad creada anteriormente al almacén de claves mediante la ejecución del comando siguiente:Now you can assign the previously created identity permissions to your key vault by running the following command:

az keyvault set-policy --name '<YourKeyVaultName>' --object-id <VMSystemAssignedIdentity> --secret-permissions get list

Iniciar sesión en la nueva máquina virtualLog on to the virtual machine

Para iniciar sesión en la máquina virtual, siga las instrucciones de Conexión a una máquina virtual de Azure donde se ejecuta Windows e inicio de sesión en ella.To log on to the virtual machine, follow the instructions in Connect and log on to an Azure virtual machine running Windows.

Creación y ejecución de una aplicación de Python de ejemploCreate and run a sample Python app

En la siguiente sección, se muestra un archivo de ejemplo denominado Sample.py.In the next section is an example file named Sample.py. Usa una biblioteca requests para realizar llamadas HTTP GET.It uses a requests library to make HTTP GET calls.

Edición de Sample.pyEdit Sample.py

Después de crear Sample.py, abra el archivo y, después, copie el código en esta sección.After you create Sample.py, open the file, and then copy the code in this section.

El código presenta un proceso de dos pasos:The code presents a two-step process:

  1. Capturar un token del punto de conexión MSI local en la máquina virtual.Fetch a token from the local MSI endpoint on the VM.
    Si lo hace, también captura un token de Azure AD.Doing so also fetches a token from Azure AD.
  2. Pase el token al almacén de claves y, después, capture el secreto.Pass the token to your key vault, and then fetch your secret.
    # importing the requests library 
    import requests 

    # Step 1: Fetch an access token from a Managed Identity enabled azure resource.      
    # Note that the resource here is https://vault.azure.net for public cloud and api-version is 2018-02-01
    MSI_ENDPOINT = "http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https%3A%2F%2Fvault.azure.net"
    r = requests.get(MSI_ENDPOINT, headers = {"Metadata" : "true"}) 
      
    # extracting data in json format 
    # This request gets an access_token from Azure AD by using the local MSI endpoint.
    data = r.json() 
    
    # Step 2: Pass the access_token received from previous HTTP GET call to your key vault.
    KeyVaultURL = "https://prashanthwinvmvault.vault.azure.net/secrets/RandomSecret?api-version=2016-10-01"
    kvSecret = requests.get(url = KeyVaultURL, headers = {"Authorization": "Bearer " + data["access_token"]})
    
    print(kvSecret.json()["value"])

Puede mostrar el valor del secreto al ejecutar el código siguiente:You can display the secret value by running the following code:

python Sample.py

El código anterior muestra cómo realizar operaciones con Azure Key Vault en una máquina virtual Windows.The preceding code shows you how to do operations with Azure Key Vault in a Windows virtual machine.

Limpieza de recursosClean up resources

Cuando ya no son necesarios, elimine la máquina virtual y el almacén de claves.When they are no longer needed, delete the virtual machine and your key vault.

Pasos siguientesNext steps