Dela via


Snabbstart: Azure Key Vault-nyckelklientbibliotek för JavaScript

Kom igång med Azure Key Vault-nyckelklientbiblioteket för JavaScript. Azure Key Vault är en molntjänst som tillhandahåller ett säkert lager för kryptografiska nycklar. Du kan på ett säkert sätt lagra nycklar, lösenord, certifikat och andra hemligheter. Du kan skapa och hantera Azure-nyckelvalv via Azure Portal. I den här snabbstarten får du lära dig hur du skapar, hämtar och tar bort nycklar från ett Azure-nyckelvalv med hjälp av JavaScript-nyckelklientbiblioteket.

Key Vault-klientbiblioteksresurser:

API-referensdokumentationEns källkodspaket | för bibliotek (npm) |

Mer information om Key Vault och nycklar finns i:

Förutsättningar

Den här snabbstarten förutsätter att du kör Azure CLI.

Logga in på Azure

  1. Kör kommandot login.

    az login
    

    Om CLI kan öppna din standardwebbläsare kommer den att göra det och läsa in en Azure-inloggningssida.

    Annars öppnar du en webbläsarsida på https://aka.ms/devicelogin och anger auktoriseringskoden som visas i terminalen.

  2. Logga in med dina autentiseringsuppgifter för kontot i webbläsaren.

Skapa ett nytt Node.js program

Skapa ett Node.js program som använder ditt nyckelvalv.

  1. I en terminal skapar du en mapp med namnet key-vault-node-app och ändrar till den mappen:

    mkdir key-vault-node-app && cd key-vault-node-app
    
  2. Initiera Node.js projektet:

    npm init -y
    

Installera Key Vault-paket

  1. Installera Klientbiblioteket för Azure Key Vault-hemligheter med hjälp av terminalen, @azure/keyvault-keys för Node.js.

    npm install @azure/keyvault-keys
    
  2. Installera Azure Identity-klientbiblioteket @azure /identitetspaketet för att autentisera till ett Nyckelvalv.

    npm install @azure/identity
    

Bevilja åtkomst till ditt nyckelvalv

Om du vill få behörigheter till ditt nyckelvalv via rollbaserad åtkomstkontroll (RBAC) tilldelar du en roll till ditt UPN (User Principal Name) med hjälp av Azure CLI-kommandot az role assignment create.

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

Ersätt <upn>, <subscription-id>, <resource-group-name> och <your-unique-keyvault-name> med dina faktiska värden. Ditt UPN är vanligtvis i formatet för en e-postadress (t.ex. username@domain.com).

Ange miljövariabler

Det här programmet använder key vault-slutpunkten som en miljövariabel med namnet KEY_VAULT_URL.

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

Autentisera och skapa en klient

Programbegäranden till de flesta Azure-tjänster måste auktoriseras. Att använda metoden DefaultAzureCredential som tillhandahålls av Azure Identity-klientbiblioteket är den rekommenderade metoden för att implementera lösenordslösa anslutningar till Azure-tjänster i koden. DefaultAzureCredential stöder flera autentiseringsmetoder och avgör vilken metod som ska användas vid körning. Med den här metoden kan din app använda olika autentiseringsmetoder i olika miljöer (lokalt jämfört med produktion) utan att implementera miljöspecifik kod.

I den här snabbstarten DefaultAzureCredential autentiserar du till nyckelvalvet med autentiseringsuppgifterna för den lokala utvecklingsanvändare som är inloggad i Azure CLI. När programmet distribueras till Azure kan samma DefaultAzureCredential kod automatiskt identifiera och använda en hanterad identitet som har tilldelats till en App Service, virtuell dator eller andra tjänster. Mer information finns i Översikt över hanterad identitet.

I den här koden används slutpunkten för ditt nyckelvalv för att skapa key vault-klienten. Slutpunktsformatet ser ut som https://<your-key-vault-name>.vault.azure.net men kan ändras för nationella moln. Mer information om autentisering till nyckelvalv finns i Utvecklarguide.

Kodexempel

Kodexemplen nedan visar hur du skapar en klient, anger en hemlighet, hämtar en hemlighet och tar bort en hemlighet.

Den här koden använder följande Key Vault Secret-klasser och -metoder:

Konfigurera appramverket

  • Skapa en ny textfil och klistra in följande kod i filen index.js .

    const { KeyClient } = require("@azure/keyvault-keys");
    const { DefaultAzureCredential } = require("@azure/identity");
    
    async function main() {
    
        // 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 KeyClient(keyVaultUrl, credential);
    
        const uniqueString = Date.now();
        const keyName = `sample-key-${uniqueString}`;
        const ecKeyName = `sample-ec-key-${uniqueString}`;
        const rsaKeyName = `sample-rsa-key-${uniqueString}`;
    
        // Create key using the general method
        const result = await client.createKey(keyName, "EC");
        console.log("key: ", result);
    
        // Create key using specialized key creation methods
        const ecResult = await client.createEcKey(ecKeyName, { curve: "P-256" });
        const rsaResult = await client.createRsaKey(rsaKeyName, { keySize: 2048 });
        console.log("Elliptic curve key: ", ecResult);
        console.log("RSA Key: ", rsaResult);
    
        // Get a specific key
        const key = await client.getKey(keyName);
        console.log("key: ", key);
    
        // Or list the keys we have
        for await (const keyProperties of client.listPropertiesOfKeys()) {
        const key = await client.getKey(keyProperties.name);
        console.log("key: ", key);
        }
    
        // Update the key
        const updatedKey = await client.updateKeyProperties(keyName, result.properties.version, {
        enabled: false
        });
        console.log("updated key: ", updatedKey);
    
        // Delete the key - the key is soft-deleted but not yet purged
        const deletePoller = await client.beginDeleteKey(keyName);
        await deletePoller.pollUntilDone();
    
        const deletedKey = await client.getDeletedKey(keyName);
        console.log("deleted key: ", deletedKey);
    
        // Purge the key - the key is permanently deleted
        // This operation could take some time to complete
        console.time("purge a single key");
        await client.purgeDeletedKey(keyName);
        console.timeEnd("purge a single key");
    }
    
    main().catch((error) => {
      console.error("An error occurred:", error);
      process.exit(1);
    });
    

Köra exempelprogrammet

  1. Kör appen:

    node index.js
    
  2. Metoderna create and get returnerar ett fullständigt JSON-objekt för nyckeln:

    "key":  {
      "key": {
        "kid": "https://YOUR-KEY-VAULT-ENDPOINT/keys/YOUR-KEY-NAME/YOUR-KEY-VERSION",
        "kty": "YOUR-KEY-TYPE",
        "keyOps": [ ARRAY-OF-VALID-OPERATIONS ],
        ... other properties based on key type
      },
      "id": "https://YOUR-KEY-VAULT-ENDPOINT/keys/YOUR-KEY-NAME/YOUR-KEY-VERSION",
      "name": "YOUR-KEY-NAME",
      "keyOperations": [ ARRAY-OF-VALID-OPERATIONS ],
      "keyType": "YOUR-KEY-TYPE",
      "properties": {
        "tags": undefined,
        "enabled": true,
        "notBefore": undefined,
        "expiresOn": undefined,
        "createdOn": 2021-11-29T18:29:11.000Z,
        "updatedOn": 2021-11-29T18:29:11.000Z,
        "recoverableDays": 90,
        "recoveryLevel": "Recoverable+Purgeable",
        "exportable": undefined,
        "releasePolicy": undefined,
        "vaultUrl": "https://YOUR-KEY-VAULT-ENDPOINT",
        "version": "YOUR-KEY-VERSION",
        "name": "YOUR-KEY-VAULT-NAME",
        "managed": undefined,
        "id": "https://YOUR-KEY-VAULT-ENDPOINT/keys/YOUR-KEY-NAME/YOUR-KEY-VERSION"
      }
    }
    
  • Skapa en ny textfil och klistra in följande kod i filen index.ts .

    import {
      KeyClient,
      KeyVaultKey,
      KeyProperties,
      DeletedKey,
    } from "@azure/keyvault-keys";
    import { DefaultAzureCredential } from "@azure/identity";
    import "dotenv/config";
    
    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 printKey(keyVaultKey: KeyVaultKey): void {
      const { name, key, id, keyType, keyOperations, properties } = keyVaultKey;
      console.log("Key: ", { name, key, id, keyType });
    
      const { vaultUrl, version, enabled, expiresOn }: KeyProperties = properties;
      console.log("Key Properties: ", { vaultUrl, version, enabled, expiresOn });
    
      console.log("Key Operations: ", keyOperations.join(", "));
    }
    
    async function main(): Promise<void> {
      // Create a new KeyClient
      const client = new KeyClient(keyVaultUrl, credential);
    
      // Create unique key names
      const uniqueString = Date.now().toString();
      const keyName = `sample-key-${uniqueString}`;
      const ecKeyName = `sample-ec-key-${uniqueString}`;
      const rsaKeyName = `sample-rsa-key-${uniqueString}`;
    
      // Create a EC key
      const ecKey = await client.createKey(keyName, "EC");
      printKey(ecKey);
    
      // Elliptic curve key
      const ec256Key = await client.createEcKey(ecKeyName, {
        curve: "P-256",
      });
      printKey(ec256Key);
    
      // RSA key
      const rsa2048Key = await client.createRsaKey(rsaKeyName, {
        keySize: 2048,
      });
      printKey(rsa2048Key);
    
      // Get a key
      const key = await client.getKey(keyName);
      printKey(key);
    
      // Get properties of all keys
      for await (const keyProperties of client.listPropertiesOfKeys()) {
        const iteratedKey = await client.getKey(keyProperties.name);
        printKey(iteratedKey);
      }
    
      // Update key properties - disable key
      const updatedKey = await client.updateKeyProperties(
        keyName,
        ecKey.properties.version,
        {
          enabled: false,
        }
      );
      printKey(updatedKey);
    
      // Delete key (without immediate purge)
      const deletePoller = await client.beginDeleteKey(keyName);
      await deletePoller.pollUntilDone();
    
      // Get a deleted key
      const deletedKey = await client.getDeletedKey(keyName);
      console.log("deleted key: ", deletedKey.name);
    
      // Purge a deleted key
      console.time("purge a single key");
      await client.purgeDeletedKey(keyName);
      console.timeEnd("purge a single key");
    }
    
    main().catch((error) => {
      console.error("An error occurred:", error);
      process.exit(1);
    });
    

Köra exempelprogrammet

  1. Skapa TypeScript-appen:

    tsc
    
  2. Kör appen:

    node index.js
    
  3. Metoderna create and get returnerar ett fullständigt JSON-objekt för nyckeln:

    "key":  {
      "key": {
        "kid": "https://YOUR-KEY-VAULT-ENDPOINT/keys/YOUR-KEY-NAME/YOUR-KEY-VERSION",
        "kty": "YOUR-KEY-TYPE",
        "keyOps": [ ARRAY-OF-VALID-OPERATIONS ],
        ... other properties based on key type
      },
      "id": "https://YOUR-KEY-VAULT-ENDPOINT/keys/YOUR-KEY-NAME/YOUR-KEY-VERSION",
      "name": "YOUR-KEY-NAME",
      "keyOperations": [ ARRAY-OF-VALID-OPERATIONS ],
      "keyType": "YOUR-KEY-TYPE",
      "properties": {
        "tags": undefined,
        "enabled": true,
        "notBefore": undefined,
        "expiresOn": undefined,
        "createdOn": 2021-11-29T18:29:11.000Z,
        "updatedOn": 2021-11-29T18:29:11.000Z,
        "recoverableDays": 90,
        "recoveryLevel": "Recoverable+Purgeable",
        "exportable": undefined,
        "releasePolicy": undefined,
        "vaultUrl": "https://YOUR-KEY-VAULT-ENDPOINT",
        "version": "YOUR-KEY-VERSION",
        "name": "YOUR-KEY-VAULT-NAME",
        "managed": undefined,
        "id": "https://YOUR-KEY-VAULT-ENDPOINT/keys/YOUR-KEY-NAME/YOUR-KEY-VERSION"
      }
    }
    

Integrera med App Configuration

Azure SDK tillhandahåller en hjälpmetod, parseKeyVaultKeyIdentifier, för att parsa det angivna Nyckel-ID:t för Key Vault. Detta är nödvändigt om du använder appkonfigurationsreferenser till Key Vault. Appkonfiguration lagrar nyckel-ID:t för Key Vault. Du behöver metoden parseKeyVaultKeyIdentifier för att parsa det ID:t för att hämta nyckelnamnet. När du har nyckelnamnet kan du hämta det aktuella nyckelvärdet med hjälp av kod från den här snabbstarten.

Nästa steg

I den här snabbstarten skapade du ett nyckelvalv, lagrade en nyckel och hämtade nyckeln. Om du vill veta mer om Key Vault och hur du integrerar det med dina program fortsätter du till de här artiklarna.