Inicio rápido: Establecimiento y recuperación de un secreto de Azure Key Vault mediante una aplicación web de NodeQuickstart: Set and retrieve a secret from Azure Key Vault by using a Node web app

En este inicio rápido se muestra cómo almacenar un secreto en Azure Key Vault y cómo recuperarlo mediante una aplicación web.This quickstart shows you how to store a secret in Azure Key Vault and how to retrieve it by using a web app. El uso de Key Vault le ayuda a proteger la información.Using Key Vault helps keep the information secure. Para ver el valor del secreto, tendría que ejecutar este inicio rápido Azure.To see the secret value, you would have to run this quickstart on Azure. La guía de inicio rápido usa Node.js e identidades administradas para recursos de Azure.The quickstart uses Node.js and managed identities for Azure resources. Aprenderá a:You learn how to:

  • Cree un almacén de claves.Create a key vault.
  • Almacenar un secreto en el almacén de claves.Store a secret in the key vault.
  • Recuperar un secreto del almacén de claves.Retrieve a secret from the key vault.
  • Crear una aplicación web de Azure.Create an Azure web application.
  • Habilite una identidad administrada para la aplicación web.Enable a managed identity for the web app.
  • Conceder los permisos necesarios para que la aplicación web lea datos del almacén de claves.Grant the required permissions for the web application to read data from the key vault.

Antes de continuar, asegúrese de que está familiarizado con los conceptos básicos sobre Key Vault.Before you proceed, make sure that you're familiar with the basic concepts for Key Vault.

Nota

Key Vault es un repositorio central para almacenar secretos mediante programación.Key Vault is a central repository to store secrets programmatically. Pero para poder hacer esto, las aplicaciones y los usuarios tienen primero que autenticarse en Key Vault, es decir, presentar un secreto.But to do so, applications and users need to first authenticate to Key Vault--that is, present a secret. Para seguir los procedimientos recomendados de seguridad, debe cambiar este secreto periódicamente.In keeping with security best practices, this first secret needs to be rotated periodically.

Con las identidades de servicio administradas para recursos de Azure, las aplicaciones que se ejecutan en Azure obtienen una identidad que Azure administra automáticamente.With managed service identities for Azure resources, applications that run in Azure get an identity that Azure manages automatically. Esto ayuda a solucionar el problema de introducción de secretos por el que los usuarios o aplicaciones pueden seguir procedimientos recomendados y no tener que preocuparse por el cambio del primer secreto.This helps solve the secret introduction problem so that users and applications can follow best practices and not have to worry about rotating the first secret.

Requisitos previosPrerequisites

  • Node.jsNode.js
  • GitGit
  • CLI de Azure 2.0.4 o posterior.Azure CLI 2.0.4 or later. Para realizar este inicio rápido, es necesario ejecutar localmente la CLI de Azure.This quickstart requires that you run the Azure CLI locally. 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.
  • Una suscripción de Azure.An Azure subscription. Si no tiene una suscripción a Azure, cree una cuenta gratuita antes de empezar.If you don't have an Azure subscription, create a free account before you begin.

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

Cree un grupo de recursos con el comando az group create.Create a resource group by using the az group create command. 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.

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 Este de EE. UU.The following example creates a resource group in the East US location.

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

El grupo de recursos que acaba de crear se utiliza en todo este artículo.The resource group that you just created is used throughout this article.

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

A continuación, creará un almacén de claves mediante el grupo de recursos creado en el paso anterior.Next you create a key vault by using the resource group that you created in the previous step. Aunque en este artículo se usa como nombre "ContosoKeyVault", debe usar un nombre único.Although this article uses “ContosoKeyVault” as the name, you have to use a unique name. Proporcione la siguiente información:Provide the following information:

  • Nombre del almacén de claves.Key vault name.
  • Nombre del grupo de recursos.Resource group name. el nombre debe ser una cadena de entre 3 y 24 caracteres, y solo debe contener estos caracteres: 0-9, a-z, A-Z y un guion (-).The name must be a string of 3-24 characters and must contain only 0-9, a-z, A-Z, and a hyphen (-).
  • Ubicación: Este de EE. UU.Location: East US.
az keyvault create --name "<YourKeyVaultName>" --resource-group "<YourResourceGroupName>" --location "East US"

En este momento, su cuenta de Azure es la única autorizada para realizar operaciones en este nuevo almacén.At this point, your Azure account is the only one that's authorized to perform any operations on this new 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. Se puede almacenar una cadena de conexión de SQL o cualquier otra información que necesite guardar de forma segura, pero que esté disponibles para la aplicación.You might be storing a SQL connection string or any other information that you need to keep securely but make available to your application. En este tutorial, la contraseña se llamará AppSecret y almacenará el valor de MySecret.In this tutorial, the password will be called AppSecret and will store the value of MySecret in it.

Escriba los siguientes comandos para crear un secreto en el almacén de claves denominado AppSecret.Type the following commands to create a secret in the key vault called AppSecret. Este secreto almacenará el valor MySecret.This secret will store the value MySecret.

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

Para ver el valor contenido en el secreto como texto sin formato:To view the value contained in the secret as plain text:

az keyvault secret show --name "AppSecret" --vault-name "<YourKeyVaultName>"

Este comando muestra la información secreta, URI incluido.This command shows the secret information, including the URI. Después de completar estos pasos debe tener un identificador URI para un secreto en un almacén de claves.After you complete these steps, you should have a URI to a secret in a key vault. Tome nota de esta información.Make note of this information. La necesitará en otro paso más adelante.You'll need it in a later step.

Clonación del repositorioClone the repo

Clone el repositorio para hacer una copia local en la que pueda editar el origen.Clone the repo to make a local copy where you can edit the source. Ejecute el siguiente comando:Run the following command:

git clone https://github.com/Azure-Samples/key-vault-node-quickstart.git

Instalación de dependenciasInstall dependencies

Ejecute los siguientes comandos para instalar dependencias:Run the following commands to install dependencies:

cd key-vault-node-quickstart
npm install

En este proyecto se usan dos módulos de Node: ms-rest-azure y azure-keyvault.This project uses two Node modules: ms-rest-azure and azure-keyvault.

Publicación de la aplicación web en AzurePublish the web app to Azure

Cree un plan de Azure App Service.Create an Azure App Service plan. Puede almacenar varias aplicaciones web en este plan.You can store multiple web apps in this plan.

```
az appservice plan create --name myAppServicePlan --resource-group myResourceGroup
```

A continuación, cree una aplicación web.Next, create a web app. En el siguiente ejemplo, reemplace <app_name> por un nombre de aplicación único global (caracteres válidos son a-z, 0-9 y -).In the following example, replace <app_name> with a globally unique app name (valid characters are a-z, 0-9, and -). El runtime se establece en NODE|6.9.The runtime is set to NODE|6.9. Para ver todos los entornos en tiempo de ejecución admitidos, ejecute az webapp list-runtimes.To see all supported runtimes, run az webapp list-runtimes.

```
# Bash
az webapp create --resource-group myResourceGroup --plan myAppServicePlan --name <app_name> --runtime "NODE|6.9" --deployment-local-git
```

Cuando se haya creado la aplicación web, la CLI de Azure mostrará información similar a la del ejemplo siguiente:When the web app has been created, the Azure CLI shows output similar to the following example:

```
{
  "availabilityState": "Normal",
  "clientAffinityEnabled": true,
  "clientCertEnabled": false,
  "cloningInfo": null,
  "containerSize": 0,
  "dailyMemoryTimeQuota": 0,
  "defaultHostName": "<app_name>.azurewebsites.net",
  "enabled": true,
  "deploymentLocalGitUrl": "https://<username>@<app_name>.scm.azurewebsites.net/<app_name>.git"
  < JSON data removed for brevity. >
}
```

Vaya a la aplicación web recién creada y verá que ya está funcionando.Browse to your newly created web app, and you should see that it's functioning. Reemplace <app_name> por un nombre de aplicación único.Replace <app_name> with a unique app name.

```
http://<app name>.azurewebsites.net
```

El comando anterior crea también una aplicación habilitada para Git que le permite implementarla en Azure desde el repositorio de Git local.The preceding command also creates a Git-enabled app that enables you to deploy to Azure from your local Git repository. El repositorio GIT local se configura con esta dirección URL: https://<username>@<app_name>.scm.azurewebsites.net/<app_name>.git.The local Git repo is configured with this URL: https://<username>@<app_name>.scm.azurewebsites.net/<app_name>.git.

Después de finalizar el comando anterior, puede agregar una instancia remota de Azure al repositorio de Git local.After you finish the preceding command, you can add an Azure remote to your local Git repository. Reemplace <url> por la dirección URL del repositorio de Git.Replace <url> with the URL of the Git repo.

```
git remote add azure <url>
```

Habilitación de una identidad administrada para la aplicación webEnable a managed identity for the web app

Azure Key Vault proporciona una manera de almacenar de forma segura las credenciales y otras claves y secretos, pero el código tiene que autenticarse en Key Vault para recuperarlos.Azure Key Vault provides a way to securely store credentials and other keys and secrets, but your code needs to authenticate to Key Vault to retrieve them. En ¿Qué es Managed Identities for Azure Resources? se facilita la resolución de este problema, al ofrecer a los servicios de Azure una identidad administrada automáticamente en Azure Active Directory (Azure AD).Managed identities for Azure resources overview makes solving this problem simpler, by giving Azure services an automatically managed identity in Azure Active Directory (Azure AD). Puede usar esta identidad para autenticar cualquier servicio que admita la autenticación de Azure AD, incluido Key Vault, sin necesidad de tener credenciales en el código.You can use this identity to authenticate to any service that supports Azure AD authentication, including Key Vault, without having any credentials in your code.

Ejecute el comando assign-identity para crear la identidad de esta aplicación:Run the assign-identity command to create the identity for this application:

az webapp identity assign --name <app_name> --resource-group "<YourResourceGroupName>"

Este comando equivale a ir al portal y cambiar la configuración de Identidad o sistema asignados a Activada en las propiedades de la aplicación web.This command is the equivalent of going to the portal and switching the Identity / System assigned setting to On in the web application properties.

Asignación de permisos a una aplicación para leer secretos de Key VaultAssign permissions to your application to read secrets from Key Vault

Anote la salida del comando anterior.Make note of the output of the previous command. Debe tener este formato:It should be in the format:

    {
      "principalId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
      "tenantId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
      "type": "SystemAssigned"
    }
    

A continuación, ejecute el siguiente comando con el nombre del almacén de claves y el valor de principalId:Then, run the following command by using the name of your key vault and the value of principalId:

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

Implementación de la aplicación de Node en Azure y recuperación del valor del secretoDeploy the Node app to Azure and retrieve the secret value

Ejecute el siguiente comando para implementar la aplicación en Azure:Run the following command to deploy the app to Azure:

git push azure master

Una vez hecho esto, cuando navegue a https://<app_name>.azurewebsites.net, podrá ver el valor secreto.After this, when you browse to https://<app_name>.azurewebsites.net, you can see the secret value. Asegúrese de reemplazar el nombre <YourKeyVaultName> por el nombre de su almacénMake sure that you replaced the name <YourKeyVaultName> with your vault name.

Pasos siguientesNext steps