Руководство по использованию Azure Key Vault с виртуальной машиной в JavaScript

Azure Key Vault помогает защитить ключи, секреты и сертификаты, такие как ключи API и строки подключения к базе данных.

В этом руководстве вы настраиваете приложение Node.js для получения сведений из Azure Key Vault с помощью управляемого удостоверения для ресурсов Azure. Вы узнаете, как:

  • Создание хранилища ключей
  • Хранение секрета в Key Vault
  • Создание виртуальной машины Linux Azure
  • Включите управляемое удостоверение для виртуальной машины.
  • Предоставьте необходимые разрешения для консольного приложения для чтения данных из Key Vault
  • Получение секрета из Key Vault

Прежде чем начать, прочитайте Key Vault основные понятия.

Если у вас нет подписки Azure, создайте учетную запись free.

Prerequisites

Для Windows, Mac и Linux:

  • Git
  • Текущая версия Azure CLI. Запустите az --version , чтобы проверить установленную версию.

Вход в Azure

Войдите в Azure с помощью Azure CLI:

az login

Создание группы ресурсов и хранилища ключей

В этом кратком руководстве используется предварительно созданное хранилище ключей Azure. Вы можете создать хранилище ключей, выполнив действия, описанные в следующих кратких руководствах.

Или вы можете выполнить эти команды Azure CLI.

Important

Каждое хранилище ключей должно иметь уникальное имя. Замените <vault-name> именем хранилища ключей в следующих примерах.

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

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

Заполните ваше хранилище ключей секретом

Мы создадим секрет с именем mySecret и значением Success!. Секрет может быть паролем, SQL строка подключения или любой другой информацией, необходимой для обеспечения безопасности и доступности приложения.

Чтобы добавить секрет в новое созданное хранилище ключей, используйте следующую команду:

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

Создание виртуальной машины

Создайте виртуальную машину с именем myVM с помощью одного из следующих методов:

Linux Windows
Azure CLI; Azure CLI;
PowerShell PowerShell
портал Azure портал Azure

Чтобы создать виртуальную машину Linux с помощью Azure CLI, используйте команду az vm create. В следующем примере добавляется учетная запись пользователя с именем azureuser. Параметр --generate-ssh-keys создает ключ SSH и сохраняет его в расположении ключа по умолчанию (~/.ssh).

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

Запишите значение publicIpAddress в выходных данных.

Назначьте удостоверение виртуальной машине

Создайте управляемое удостоверение, назначаемое системой для виртуальной машины, с помощью команды az vm identity assign :

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

Обратите внимание на идентификатор, назначенный системой, в выводе:

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

Назначение разрешения для идентификатора виртуальной машины

Предоставьте управляемому удостоверению виртуальной машины роль Key Vault Secrets User для хранилища ключей:

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>

Вход на виртуальную машину

Чтобы войти на виртуальную машину, следуйте инструкциям в разделе "Подключение" и войдите в виртуальную машину Azure под управлением Linux или Connect и выполните вход в виртуальную машину Azure с Windows.

Чтобы войти на виртуальную машину Linux, используйте ssh с <public-ip-address> помощью шага "Создать виртуальную машину ":

ssh azureuser@<public-ip-address>

Установка Node.js и библиотек npm на виртуальной машине

На виртуальной машине установите две библиотеки npm, которые использует пример скрипта: @azure/keyvault-secret и @azure/identity.

  1. В терминале SSH установите Node.js и npm:

    curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash - && \
        sudo apt-get install -y nodejs
    
  2. Создайте каталог приложений и инициализируйте пакет Node.js:

    mkdir app && cd app && npm init -y
    
  3. Установите пакеты Azure с помощьюnpm:

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

Создание и изменение примера файла JavaScript

  1. На виртуальной машине в каталоге app создайте файл JavaScript с именем index.js:

    touch index.js
    
  2. Откройте этот файл в текстовом редакторе Nano:

    nano index.js
    
  3. Вставьте следующий код в редактор, заменив <vault-name> на имя хранилища ключей:

    // 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. Сохраните файл, нажав Ctrl+X.

  5. В командной строке Save modified buffer? введите y.

  6. В приглашении File Name to Write: index.js нажмите клавишу Enter.

Запуск примера приложения Node.js

Выполните команду index.js. Если все настроено правильно, приложение выводит значение секрета:

node index.js

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

Очистите ресурсы

Если они больше не нужны, удалите виртуальную машину и хранилище ключей. Самый быстрый способ — удалить группу ресурсов, к которой они относятся:

az group delete -g "myResourceGroup"

Дальнейшие шаги

REST API службы Azure Key Vault