Szybki start: biblioteka klienta certyfikatów usługi Azure Key Vault dla języka JavaScript

Wprowadzenie do biblioteki klienta certyfikatów usługi Azure Key Vault dla języka JavaScript. Azure Key Vault to usługa w chmurze, która zapewnia bezpieczny magazyn certyfikatów. Możesz bezpiecznie przechowywać klucze, hasła, certyfikaty oraz inne wpisy tajne. Magazyny kluczy platformy Azure można tworzyć oraz nimi zarządzać za pośrednictwem witryny Azure Portal. Z tego przewodnika Szybki start dowiesz się, jak tworzyć, pobierać i usuwać certyfikaty z magazynu kluczy platformy Azure przy użyciu biblioteki klienta Języka JavaScript

Zasoby biblioteki klienta usługi Key Vault:

Dokumentacja interfejsu API — pakiet | kodu | źródłowego biblioteki (npm)

Aby uzyskać więcej informacji na temat usługi Key Vault i certyfikatów, zobacz:

Wymagania wstępne

W tym przewodniku Szybki start założono, że używasz interfejsu wiersza polecenia platformy Azure.

Logowanie się do platformy Azure

  1. Uruchom polecenie login.

    az login
    

    Jeśli interfejs wiersza polecenia może otworzyć domyślną przeglądarkę, zrobi to i załaduje stronę logowania platformy Azure.

    W przeciwnym razie otwórz stronę przeglądarki pod https://aka.ms/devicelogin adresem i wprowadź kod autoryzacji wyświetlany w terminalu.

  2. Zaloguj się w przeglądarce przy użyciu poświadczeń swojego konta.

Tworzenie nowej aplikacji Node.js

Utwórz aplikację Node.js korzystającą z magazynu kluczy.

  1. W terminalu utwórz folder o nazwie key-vault-node-app i przejdź do tego folderu:

    mkdir key-vault-node-app && cd key-vault-node-app
    
  2. Zainicjuj projekt Node.js:

    npm init -y
    

Instalowanie pakietów usługi Key Vault

  1. Za pomocą terminalu zainstaluj bibliotekę wpisów tajnych usługi Azure Key Vault, @azure/keyvault-certificates dla Node.js.

    npm install @azure/keyvault-certificates
    
  2. Zainstaluj bibliotekę klienta tożsamości platformy Azure, @azure/tożsamość, aby uwierzytelnić się w usłudze Key Vault.

    npm install @azure/identity
    

Udzielanie dostępu do magazynu kluczy

Aby udzielić aplikacji uprawnień do magazynu kluczy za pomocą kontroli dostępu opartej na rolach (RBAC), przypisz rolę przy użyciu polecenia interfejsu wiersza polecenia platformy Azure az role assignment create.

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>"

Zastąp <ciąg app-id, <subscription-id>>, <resource-group-name i <your-unique-keyvault-name>> rzeczywistymi wartościami. <app-id> to identyfikator aplikacji (klienta) zarejestrowanej aplikacji w usłudze Azure AD.

Ustawianie zmiennych środowiskowych

Ta aplikacja używa nazwy magazynu kluczy jako zmiennej środowiskowej o nazwie KEY_VAULT_NAME.

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

Uwierzytelnianie i tworzenie klienta

Żądania aplikacji do większości usług platformy Azure muszą być autoryzowane. Użycie metody DefaultAzureCredential udostępnionej przez bibliotekę klienta tożsamości platformy Azure jest zalecanym podejściem do implementowania połączeń bez hasła z usługami platformy Azure w kodzie. DefaultAzureCredential obsługuje wiele metod uwierzytelniania i określa, która metoda powinna być używana w czasie wykonywania. Takie podejście umożliwia aplikacji używanie różnych metod uwierzytelniania w różnych środowiskach (lokalnych i produkcyjnych) bez implementowania kodu specyficznego dla środowiska.

W tym przewodniku Szybki start DefaultAzureCredential uwierzytelnia się w magazynie kluczy przy użyciu poświadczeń lokalnego użytkownika dewelopera zalogowanego do interfejsu wiersza polecenia platformy Azure. Po wdrożeniu aplikacji na platformie Azure ten sam DefaultAzureCredential kod może automatycznie odnajdywać i używać tożsamości zarządzanej przypisanej do usługi App Service, maszyny wirtualnej lub innych usług. Aby uzyskać więcej informacji, zobacz Omówienie tożsamości zarządzanej.

W tym kodzie nazwa magazynu kluczy służy do tworzenia identyfikatora URI magazynu kluczy w formacie https://<your-key-vault-name>.vault.azure.net. Aby uzyskać więcej informacji na temat uwierzytelniania w magazynie kluczy, zobacz Przewodnik dewelopera.

Przykład kodu

Ten kod używa następujących klas i metod certyfikatów usługi Key Vault:

Konfigurowanie struktury aplikacji

  1. Utwórz nowy plik tekstowy i wklej następujący kod do pliku 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);
    });
    

Uruchamianie przykładowej aplikacji

  1. Uruchom aplikację:

    node index.js
    
  2. Metody tworzenia i pobierania zwracają pełny obiekt JSON dla certyfikatu:

    {
      "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
      }
    }
    

Integrowanie z usługą App Configuration

Zestaw Azure SDK udostępnia metodę pomocnika, parseKeyVaultCertificateIdentifier, aby przeanalizować dany identyfikator certyfikatu usługi Key Vault, co jest konieczne, jeśli używasz odwołań usługi App Configuration do usługi Key Vault. Konfiguracja aplikacji przechowuje identyfikator certyfikatu usługi Key Vault. Potrzebujesz metody parseKeyVaultCertificateIdentifier, aby przeanalizować ten identyfikator, aby uzyskać nazwę certyfikatu. Po utworzeniu nazwy certyfikatu możesz pobrać bieżący certyfikat przy użyciu kodu z tego przewodnika Szybki start.

Następne kroki

W tym przewodniku Szybki start utworzono magazyn kluczy, zapisano certyfikat i pobrano ten certyfikat. Aby dowiedzieć się więcej o usłudze Key Vault i sposobie jej integracji z aplikacjami, przejdź do tych artykułów.