Partager via


Démarrage rapide – Bibliothèque de client de secrets Azure Key Vault pour JavaScript

Bien démarrer avec la bibliothèque de client de secrets Azure Key Vault pour JavaScript. Azure Key Vault est un service cloud qui fournit un magasin de secrets sécurisé. Vous pouvez stocker des clés, des mots de passe, des certificats et d’autres secrets en toute sécurité. Vous pouvez créer et gérer des coffres de clés Azure grâce au portail Azure. Dans ce démarrage rapide, vous découvrez comment créer, récupérer et supprimer des secrets dans un coffre de clés Azure en utilisant la bibliothèque de client JavaScript.

Ressources de la bibliothèque de client Key Vault :

Documentation de référence sur les API | Code source de la bibliothèque | Package (npm)

Pour plus d’informations sur Key Vault et les secrets, consultez :

Prérequis

Prérequis

Ce guide de démarrage rapide suppose que vous exécutez Azure CLI.

Connexion à Azure

  1. Exécutez la commande login.

    az login
    

    Si l’interface CLI peut ouvrir votre navigateur par défaut, elle le fait et charge une page de connexion Azure par la même occasion.

    Sinon, ouvrez une page de navigateur à l’adresse https://aka.ms/devicelogin et entrez le code d’autorisation affiché dans votre terminal.

  2. Dans le navigateur, connectez-vous avec les informations d’identification de votre compte.

Créer un groupe de ressources et un coffre de clés

  1. Utilisez la commande az group create pour créer un groupe de ressources :

    az group create --name myResourceGroup --location eastus
    

    Si vous préférez, vous pouvez remplacer « eastus » par un emplacement plus proche de vous.

  2. Utilisez az keyvault create pour créer le coffre de clés :

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

    Remplacez <your-unique-keyvault-name> par un nom unique à l’échelle d’Azure. La pratique courante consiste à utiliser son nom ou le nom de son entreprise et à ajouter des chiffres ou des identificateurs.

Accorder l’accès à votre coffre de clés

Pour obtenir des autorisations sur votre coffre de clés par le Contrôle d’accès en fonction du rôle (RBAC), attribuez un rôle à votre « nom d’utilisateur principal » (UPN) à l’aide de la commande Azure CLI az role assignment create.

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

Remplacez <upn>, <subscription-id>, <resource-group-name> et <your-unique-keyvault-name> par vos valeurs réelles. Votre nom d’utilisateur principal (UPN) se présente généralement sous la forme d’une adresse électronique (par exemple username@domain.com).

Créer une application Node.js

Créez une application Node.js qui utilise votre coffre-fort de clé.

  1. Dans un terminal, créez un dossier nommé key-vault-node-app et modifiez-le dans ce dossier :

    mkdir key-vault-node-app && cd key-vault-node-app
    
  2. Initialiser le projet Node.js :

    npm init -y
    

Installer des packages Key Vault

  1. À l’aide du terminal, installez la bibliothèque de client de secrets Azure Key Vault, @azure/keyvault-secrets pour Node.js.

    npm install @azure/keyvault-secrets
    
  2. Installez la bibliothèque de client d’identité Azure, le package @azure/identity pour vous authentifier dans un coffre de clés.

    npm install @azure/identity
    

Accorder l’accès à votre coffre de clés

Pour obtenir des autorisations sur votre coffre de clés par le Contrôle d’accès en fonction du rôle (RBAC), attribuez un rôle à votre « nom d’utilisateur principal » (UPN) à l’aide de la commande Azure CLI az role assignment create.

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

Remplacez <upn>, <subscription-id>, <resource-group-name> et <your-unique-keyvault-name> par vos valeurs réelles. Votre nom d’utilisateur principal (UPN) se présente généralement sous la forme d’une adresse électronique (par exemple username@domain.com).

Définir des variables d’environnement

Cette application utilise le point de terminaison Key Vault comme variable d’environnement appelée KEY_VAULT_URL.

set KEY_VAULT_URL=<your-key-vault-endpoint>

Authentifier et créer un client

Les requêtes d’application vers les Services Azure doivent être autorisées. L’utilisation de la méthode DefaultAzureCredential fournie par la bibliothèque de client Azure Identity est l’approche recommandée pour implémenter des connexions sans mot de passe aux services Azure dans votre code. DefaultAzureCredential prend en charge plusieurs méthodes d’authentification et détermine quelle méthode doit être utilisée au moment de l’exécution. Cette approche permet à votre application d’utiliser différentes méthodes d’authentification dans différents environnements (local ou production) sans implémenter de code spécifique à l’environnement.

Dans ce guide de démarrage rapide, DefaultAzureCredential s’authentifie auprès du coffre de clés à l’aide des informations d’identification de l’utilisateur de développement local connecté à Azure CLI. Quand l’application est déployée sur Azure, le même code DefaultAzureCredential peut découvrir et utiliser automatiquement une identité managée affectée à un service d’application, une machine virtuelle ou d’autres services. Pour plus d’informations, consultez Vue d’ensemble des identités managées.

Dans ce code, le point de terminaison de votre coffre de clés est utilisé pour créer le client Key Vault. Le format de point de terminaison ressemble à https://<your-key-vault-name>.vault.azure.net, mais peut changer pour les clouds souverains. Pour plus d’informations sur l’authentification auprès du coffre de clés, consultez le Guide du développeur.

Exemple de code

Les exemples de code ci-dessous vous montrent comment créer un client et définir, récupérer et supprimer un secret.

Ce code utilise les classes et méthodes de secret Key Vault suivantes :

Configurer le framework d’application

  • Créez un fichier texte et collez le code suivant dans le fichier index.js.

    const { SecretClient } = require("@azure/keyvault-secrets");
    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 keyVaultUrl = process.env["KEY_VAULT_URL"];
      if(!keyVaultUrl) throw new Error("KEY_VAULT_URL is empty");
    
      const client = new SecretClient(keyVaultUrl, credential);
    
      // Create a secret
      // The secret can be a string of any kind. For example,
      // a multiline text block such as an RSA private key with newline characters,
      // or a stringified JSON object, like `JSON.stringify({ mySecret: 'MySecretValue'})`.
      const uniqueString = new Date().getTime();
      const secretName = `secret${uniqueString}`;
      const result = await client.setSecret(secretName, "MySecretValue");
      console.log("result: ", result);
    
      // Read the secret we created
      const secret = await client.getSecret(secretName);
      console.log("secret: ", secret);
    
      // Update the secret with different attributes
      const updatedSecret = await client.updateSecretProperties(secretName, result.properties.version, {
        enabled: false
      });
      console.log("updated secret: ", updatedSecret);
    
      // Delete the secret immediately without ability to restore or purge.
      await client.beginDeleteSecret(secretName);
    }
    
    main().catch((error) => {
      console.error("An error occurred:", error);
      process.exit(1);
    });
    

Exécuter l’exemple d’application

  1. Exécutez l’application :

    node index.js
    
  2. Les méthodes de création et d’obtenir retournent un objet JSON complet pour le certificat :

    {
        "value": "MySecretValue",
        "name": "secret1637692472606",
        "properties": {
            "createdOn": "2021-11-23T18:34:33.000Z",
            "updatedOn": "2021-11-23T18:34:33.000Z",
            "enabled": true,
            "recoverableDays": 90,
            "recoveryLevel": "Recoverable+Purgeable",
            "id": "https: //YOUR-KEYVAULT-ENDPOINT.vault.azure.net/secrets/secret1637692472606/YOUR-VERSION",
            "vaultUrl": "https: //YOUR-KEYVAULT-ENDPOINT.vault.azure.net",
            "version": "YOUR-VERSION",
            "name": "secret1637692472606"
        }
    }
    

    La méthode de mise à jour renvoie les propriétés nom/valeurs de propriétés :

    "createdOn": "2021-11-23T18:34:33.000Z",
    "updatedOn": "2021-11-23T18:34:33.000Z",
    "enabled": true,
    "recoverableDays": 90,
    "recoveryLevel": "Recoverable+Purgeable",
    "id": "https: //YOUR-KEYVAULT-ENDPOINT/secrets/secret1637692472606/YOUR-VERSION",
    "vaultUrl": "https: //YOUR-KEYVAULT-ENDPOINT",
    "version": "YOUR-VERSION",
    "name": "secret1637692472606"
    
  • Créez un fichier texte et collez le code suivant dans le fichier index.ts.

    import {
      SecretClient,
      KeyVaultSecret,
      SecretProperties,
    } from "@azure/keyvault-secrets";
    import { DefaultAzureCredential } from "@azure/identity";
    import "dotenv/config";
    
    // Passwordless credential
    const credential = new DefaultAzureCredential();
    
    // Get Key Vault name from environment variables
    // such as `https://${keyVaultName}.vault.azure.net`
    const keyVaultUrl = process.env.KEY_VAULT_URL;
    if (!keyVaultUrl) throw new Error("KEY_VAULT_URL is empty");
    
    function printSecret(secret: KeyVaultSecret): void {
      const { name, value, properties } = secret;
      const { enabled, expiresOn, createdOn } = properties;
      console.log("Secret: ", { name, value, enabled, expiresOn, createdOn });
    }
    function printSecretProperties(secret: SecretProperties): void {
      const { name, enabled, expiresOn, createdOn } = secret;
      console.log("Secret: ", { name, enabled, expiresOn, createdOn });
    }
    
    async function main(): Promise<void> {
      // Create a new SecretClient
      const client = new SecretClient(keyVaultUrl, credential);
    
      // Create a unique secret name
      const uniqueString = new Date().getTime().toString();
      const secretName = `secret${uniqueString}`;
    
      // Create a secret
      const createSecretResult = await client.setSecret(
        secretName,
        "MySecretValue"
      );
      printSecret(createSecretResult);
    
      // Get the secret by name
      const getSecretResult = await client.getSecret(secretName);
      printSecret(getSecretResult);
    
      // Update properties
      const updatedSecret = await client.updateSecretProperties(
        secretName,
        getSecretResult.properties.version,
        {
          enabled: false,
        }
      );
      printSecretProperties(updatedSecret);
    
      // Delete secret (without immediate purge)
      const deletePoller = await client.beginDeleteSecret(secretName);
      await deletePoller.pollUntilDone();
    }
    
    main().catch((error) => {
      console.error("An error occurred:", error);
      process.exit(1);
    });
    

Exécuter l’exemple d’application

  1. Générez l’application TypeScript :

    tsc
    
  2. Exécutez l’application :

    node index.js
    
  3. Les méthodes de création et d’obtenir retournent un objet JSON complet pour le certificat :

    {
        "value": "MySecretValue",
        "name": "secret1637692472606",
        "properties": {
            "createdOn": "2021-11-23T18:34:33.000Z",
            "updatedOn": "2021-11-23T18:34:33.000Z",
            "enabled": true,
            "recoverableDays": 90,
            "recoveryLevel": "Recoverable+Purgeable",
            "id": "https: //YOUR-KEYVAULT-ENDPOINT.vault.azure.net/secrets/secret1637692472606/YOUR-VERSION",
            "vaultUrl": "https: //YOUR-KEYVAULT-ENDPOINT.vault.azure.net",
            "version": "YOUR-VERSION",
            "name": "secret1637692472606"
        }
    }
    

    La méthode de mise à jour renvoie les propriétés nom/valeurs de propriétés :

    "createdOn": "2021-11-23T18:34:33.000Z",
    "updatedOn": "2021-11-23T18:34:33.000Z",
    "enabled": true,
    "recoverableDays": 90,
    "recoveryLevel": "Recoverable+Purgeable",
    "id": "https: //YOUR-KEYVAULT-ENDPOINT/secrets/secret1637692472606/YOUR-VERSION",
    "vaultUrl": "https: //YOUR-KEYVAULT-ENDPOINT",
    "version": "YOUR-VERSION",
    "name": "secret1637692472606"
    

Intégration à la configuration de l’application

Le SDK Azure fournit une méthode d’aide, parseKeyVaultCertificateIdentifier,pour analyser l'ID du certificat Key Vault donné. Cette étape est nécessaire si vous utilisez des références de configuration d’application à Key Vault. App Config stocke l'ID de la clé du coffre- fort. Vous avez besoin de la méthode parseKeyVaultCertificateIdentifier pour analyser cet ID et obtenir le nom du certificat. Une fois que vous avez le nom de la clé, vous pouvez obtenir la valeur de clé actuelle à l’aide du code de ce démarrage rapide.

Étapes suivantes

Dans ce guide de démarrage rapide, vous avez créé un coffre de clés, stocké un secret et récupéré ce secret. Pour en savoir plus sur Key Vault et sur la manière de l’intégrer à vos applications, consultez les articles ci-dessous.