Samouczek: używanie Azure Key Vault z maszyną wirtualną w języku JavaScript

Azure Key Vault pomaga chronić klucze, wpisy tajne i certyfikaty, takie jak klucze interfejsu API i parametry połączenia bazy danych.

W tym samouczku skonfigurujesz aplikację Node.js do odczytywania informacji z usługi Azure Key Vault za pomocą tożsamości zarządzanej dla zasobów platformy Azure. Uczysz się, jak:

  • Stwórz magazyn kluczy
  • Przechowaj tajemnicę w Key Vault
  • Tworzenie maszyny wirtualnej z systemem Azure Linux
  • Włączanie tożsamości zarządzanej dla maszyny wirtualnej
  • Udzielanie wymaganych uprawnień aplikacji konsolowej do odczytywania danych z Key Vault
  • Pobieranie tajemnicy z Key Vault

Przed rozpoczęciem przeczytaj Key Vault podstawowe pojęcia.

Jeśli nie masz subskrypcji Azure, utwórz konto free.

Prerequisites

W przypadku systemów Windows, Mac i Linux:

  • Git
  • Bieżąca wersja Azure CLI. Uruchom polecenie az --version , aby sprawdzić zainstalowaną wersję.

Zaloguj się do Azure

Zaloguj się do Azure przy użyciu Azure CLI:

az login

Utwórz grupę zasobów i magazyn kluczy

Ten przewodnik szybkiego startu korzysta z wcześniej utworzonego Azure Key Vault. Można utworzyć magazyn kluczy, wykonując kroki opisane w tych szybkich przewodnikach startowych:

Alternatywnie możesz uruchomić polecenia Azure CLI.

Important

Każdy magazyn kluczy musi mieć unikatową nazwę. Zastąp <vault-name> nazwą magazynu kluczy w poniższych przykładach.

az group create --name "myResourceGroup" -l "EastUS"

az keyvault create --name "<vault-name>" -g "myResourceGroup" --enable-rbac-authorization true

Wypełnij swój magazyn kluczy tajemnicą

Utwórzmy wpis tajny o nazwie mySecret z wartością Success!. Tajna informacja może być hasłem, ciągiem połączeniowym SQL lub innymi informacjami, które muszą być zarówno zabezpieczone, jak i dostępne dla Twojej aplikacji.

Aby dodać sekret do nowo utworzonego magazynu kluczy, użyj następującego polecenia:

az keyvault secret set --vault-name "<vault-name>" --name "mySecret" --value "Success!"

Tworzenie maszyny wirtualnej

Utwórz maszynę wirtualną o nazwie myVM przy użyciu jednej z następujących metod:

Linux Windows
Azure CLI Azure CLI
PowerShell PowerShell
Portal Azure Portal Azure

Aby utworzyć maszynę wirtualną z systemem Linux przy użyciu Azure CLI, użyj polecenia az vm create. W poniższym przykładzie dodano konto użytkownika o nazwie azureuser. Parametr --generate-ssh-keys generuje klucz SSH i przechowuje go w domyślnej lokalizacji klucza (~/.ssh).

az vm create \
  --resource-group <resource-group> \
  --name myVM \
  --image Ubuntu2204 \
  --admin-username azureuser \
  --generate-ssh-keys

Zanotuj wartość publicIpAddress w danych wyjściowych.

Przypisywanie tożsamości do maszyny wirtualnej

Utwórz tożsamość zarządzaną przypisaną przez system dla maszyny wirtualnej przy użyciu polecenia az vm identity assign :

az vm identity assign --name "myVM" --resource-group "<resource-group>"

Zanotuj tożsamość przypisaną przez system w danych wyjściowych:

{
  "systemAssignedIdentity": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "userAssignedIdentities": {}
}

Przypisywanie uprawnień do tożsamości maszyny wirtualnej

Przypisz tożsamości zarządzanej maszyny wirtualnej rolę Użytkownik wpisów tajnych usługi Key Vault w magazynie kluczy:

az role assignment create --role "Key Vault Secrets User" --assignee "<system-assigned-identity>" --scope /subscriptions/<subscription-id>/resourceGroups/<resource-group>/providers/Microsoft.KeyVault/vaults/<vault-name>

Zaloguj się do maszyny wirtualnej

Aby zalogować się do maszyny wirtualnej, postępuj zgodnie z instrukcjami w temacie Łączenie i logowanie się do maszyny wirtualnej Azure z systemem Linux lub Connect i zaloguj się do maszyny wirtualnej Azure z systemem Windows.

Aby zalogować się do maszyny wirtualnej z systemem Linux, użyj ssh wraz z poleceniem z kroku Utwórz maszynę wirtualną:

ssh azureuser@<public-ip-address>

Instalowanie bibliotek Node.js i npm na maszynie wirtualnej

Na maszynie wirtualnej zainstaluj dwie biblioteki npm używane przez przykładowy skrypt: @azure/keyvault-secrets i @azure/identity.

  1. W terminalu SSH zainstaluj Node.js i narzędzie npm:

    curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash - && \
        sudo apt-get install -y nodejs
    
  2. Utwórz katalog aplikacji i zainicjuj pakiet Node.js:

    mkdir app && cd app && npm init -y
    
  3. Zainstaluj pakiety Azure za pomocą polecenia npm:

    npm install @azure/keyvault-secrets @azure/identity
    

Tworzenie i edytowanie przykładowego pliku JavaScript

  1. Na maszynie app wirtualnej w katalogu utwórz plik JavaScript o nazwie index.js:

    touch index.js
    
  2. Otwórz plik za pomocą edytora tekstów Nano :

    nano index.js
    
  3. Wklej następujący kod do edytora, wstawiając w miejsce <vault-name> nazwę magazynu kluczy:

    // index.js
    
    const { SecretClient } = require("@azure/keyvault-secrets");
    const { DefaultAzureCredential } = require("@azure/identity");
    
    // Your Azure Key Vault name and secret name
    const keyVaultName = "<vault-name>";
    const keyVaultUri = `https://${keyVaultName}.vault.azure.net`;
    const secretName = "mySecret";
    
    // Authenticate to Azure
    const credential = new DefaultAzureCredential();
    const client = new SecretClient(keyVaultUri, credential);
    
    // Get Secret with Azure SDK for JS
    const getSecret = async (secretName) => {
    
        return (await client.getSecret(secretName)).value;
    }
    
    getSecret(secretName).then(secretValue => {
        console.log(`The value of secret '${secretName}' in '${keyVaultName}' is: '${secretValue}'`);
    }).catch(err => {
        console.log(err);
    })
    
  4. Zapisz plik za pomocą klawiszy Ctrl+X.

  5. W monicie Save modified buffer? wprowadź y.

  6. Po wyświetleniu monitu File Name to Write: index.js naciśnij klawisz Enter.

Uruchamianie przykładowej aplikacji Node.js

Uruchom program index.js. Jeśli wszystko jest poprawnie skonfigurowane, aplikacja wypisuje tajną wartość:

node index.js

The value of secret 'mySecret' in '<vault-name>' is: 'Success!'

Uprzątnij zasoby

Gdy nie są już potrzebne, usuń maszynę wirtualną i magazyn kluczy. Najszybszym sposobem jest usunięcie grupy zasobów, do której należą:

az group delete -g "myResourceGroup"

Dalsze kroki

REST API Azure Key Vault