Inicio rápido: Biblioteca cliente de certificados de Azure Key Vault para JavaScript

Empiece a trabajar con la biblioteca cliente de certificados de Azure Key Vault para JavaScript. Azure Key Vault es un servicio en la nube que proporciona un almacén seguro para los certificados. Puede almacenar de forma segura claves, contraseñas, certificados y otros secretos. Las instancias de Azure Key Vault se pueden crear y administrar a través de Azure Portal. En este inicio rápido, aprenderá a crear, recuperar y eliminar certificados de una instancia de Azure Key Vault mediante la biblioteca cliente de JavaScript.

Recursos de la biblioteca cliente de Key Vault:

Documentación de referencia de la API | Código fuente de la biblioteca | Paquete (npm)

Para más información sobre Key Vault y los certificados, consulte:

Prerrequisitos

En este inicio rápido, se da por supuesto que ejecuta la CLI de Azure.

Inicio de sesión en Azure

  1. Ejecute el comando 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.

Creación de una aplicación de Node.js

Cree una aplicación Node.js que use el almacén de claves.

  1. En un terminal, cree una carpeta con el nombre key-vault-node-app y cámbiela a esa carpeta:

    mkdir key-vault-node-app && cd key-vault-node-app
    
  2. Inicialice el proyecto de Node.js:

    npm init -y
    

Instalación de paquetes de Key Vault

  1. Con el terminal, instale la biblioteca de secretos de Azure Key Vault, @azure/keyvault-certificates para Node.js.

    npm install @azure/keyvault-certificates
    
  2. Instale la biblioteca cliente de identidades de Azure, @azure/identity para autenticarse en un almacén de claves.

    npm install @azure/identity
    

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.

Establecimiento de variables de entorno

Esta aplicación también usa el nombre del almacén de claves como variable de entorno llamada KEY_VAULT_NAME.

set KEY_VAULT_NAME=<your-key-vault-name>

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 del método 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 este código, el nombre del almacén de claves se utiliza para crear el URI del almacén de claves, con el formato https://<your-key-vault-name>.vault.azure.net. Para más información sobre la autenticación en el almacén de claves, consulte la Guía del desarrollador.

Ejemplo de código

Este código usa las siguientes clases y métodos de certificados de Key Vault:

Instalación del marco de la aplicación

  1. Cree un nuevo archivo de texto y pegue el siguiente código en el archivo index.js.

    const { CertificateClient, DefaultCertificatePolicy } = require("@azure/keyvault-certificates");
    const { DefaultAzureCredential } = require("@azure/identity");
    
    async function main() {
      // If you're using MSI, DefaultAzureCredential should "just work".
      // Otherwise, DefaultAzureCredential expects the following three environment variables:
      // - AZURE_TENANT_ID: The tenant ID in Azure Active Directory
      // - AZURE_CLIENT_ID: The application (client) ID registered in the AAD tenant
      // - AZURE_CLIENT_SECRET: The client secret for the registered application
      const credential = new DefaultAzureCredential();
    
      const keyVaultName = process.env["KEY_VAULT_NAME"];
      if(!keyVaultName) throw new Error("KEY_VAULT_NAME is empty");
      const url = "https://" + keyVaultName + ".vault.azure.net";
    
      const client = new CertificateClient(url, credential);
    
      const uniqueString = new Date().getTime();
      const certificateName = `cert${uniqueString}`;
    
      // Creating a self-signed certificate
      const createPoller = await client.beginCreateCertificate(
        certificateName,
        DefaultCertificatePolicy
      );
    
      const pendingCertificate = createPoller.getResult();
      console.log("Certificate: ", pendingCertificate);
    
      // To read a certificate with their policy:
      let certificateWithPolicy = await client.getCertificate(certificateName);
      // Note: It will always read the latest version of the certificate.
    
      console.log("Certificate with policy:", certificateWithPolicy);
    
      // To read a certificate from a specific version:
      const certificateFromVersion = await client.getCertificateVersion(
        certificateName,
        certificateWithPolicy.properties.version
      );
      // Note: It will not retrieve the certificate's policy.
      console.log("Certificate from a specific version:", certificateFromVersion);
    
      const updatedCertificate = await client.updateCertificateProperties(certificateName, "", {
        tags: {
          customTag: "value"
        }
      });
      console.log("Updated certificate:", updatedCertificate);
    
      // Updating the certificate's policy:
      await client.updateCertificatePolicy(certificateName, {
        issuerName: "Self",
        subject: "cn=MyOtherCert"
      });
      certificateWithPolicy = await client.getCertificate(certificateName);
      console.log("updatedCertificate certificate's policy:", certificateWithPolicy.policy);
    
      // delete certificate
      const deletePoller = await client.beginDeleteCertificate(certificateName);
      const deletedCertificate = await deletePoller.pollUntilDone();
      console.log("Recovery Id: ", deletedCertificate.recoveryId);
      console.log("Deleted Date: ", deletedCertificate.deletedOn);
      console.log("Scheduled Purge Date: ", deletedCertificate.scheduledPurgeDate);
    }
    
    main().catch((error) => {
      console.error("An error occurred:", error);
      process.exit(1);
    });
    

Ejecutar la aplicación de ejemplo

  1. Ejecute la aplicación:

    node index.js
    
  2. Los métodos crear y obtener devuelven un objeto JSON completo para el certificado:

    {
      "keyId": undefined,
      "secretId": undefined,
      "name": "YOUR-CERTIFICATE-NAME",
        "reuseKey": false,
        "keyCurveName": undefined,
        "exportable": true,
        "issuerName": 'Self',
        "certificateType": undefined,
        "certificateTransparency": undefined
      },
      "properties": {
        "createdOn": 2021-11-29T20:17:45.000Z,
        "updatedOn": 2021-11-29T20:17:45.000Z,
        "expiresOn": 2022-11-29T20:17:45.000Z,
        "id": "https://YOUR-KEY-VAULT-NAME.vault.azure.net/certificates/YOUR-CERTIFICATE-NAME/YOUR-CERTIFICATE-VERSION",
        "enabled": false,
        "notBefore": 2021-11-29T20:07:45.000Z,
        "recoveryLevel": "Recoverable+Purgeable",
        "name": "YOUR-CERTIFICATE-NAME",
        "vaultUrl": "https://YOUR-KEY-VAULT-NAME.vault.azure.net",
        "version": "YOUR-CERTIFICATE-VERSION",
        "tags": undefined,
        "x509Thumbprint": undefined,
        "recoverableDays": 90
      }
    }
    

Integración con App Configuration

El SDK de Azure proporciona un método auxiliar, parseKeyVaultCertificateIdentifier, para analizar el identificador de certificado de Key Vault dado, que es necesario si usa referencias de App Configuration a Key Vault. App Config almacena el identificador de certificado de Key Vault. Necesita el método parseKeyVaultCertificateIdentifier para analizar ese identificador para obtener el nombre del certificado. Una vez que tenga el nombre del certificado, puede obtener el certificado actual con el código de este inicio rápido.

Pasos siguientes

En este inicio rápido, ha creado un almacén de claves, ha almacenado un certificado y, posteriormente, lo ha recuperado. Para más información sobre Key Vault y cómo integrarlo con las aplicaciones, vaya a estos artículos.