Tutorial: Usar Azure Key Vault com uma máquina virtual em JavaScript

Azure Key Vault ajuda você a proteger chaves, segredos e certificados, como chaves de API e cadeias de conexão de banco de dados.

Neste tutorial, você configura um aplicativo Node.js para ler informações de Azure Key Vault usando identidades gerenciadas para recursos de Azure. Você aprenderá como:

  • Criar um cofre de chaves
  • Armazenar um segredo no Key Vault
  • Criar uma máquina virtual Azure Linux
  • Habilitar uma identidade gerenciada para a máquina virtual
  • Conceda as permissões necessárias para o aplicativo de console ler dados de Key Vault
  • Recuperar um segredo de Key Vault

Antes de começar, leia Key Vault conceitos básicos.

Se você não tiver uma assinatura da Azure, crie uma conta gratuita.

Prerequisites

Para Windows, Mac e Linux:

  • Git
  • Este tutorial exige que você execute o CLI do Azure localmente. Você deve ter uma versão recente do CLI do Azure instalada. Execute az --version para encontrar a versão. Se você precisar instalar ou atualizar a CLI, consulte Instalar CLI do Azure.

Faça logon no Azure

Para fazer logon no Azure usando o CLI do Azure, insira:

az login

Criar um grupo de recursos e um cofre de chaves

Este início rápido usa um cofre de chaves do Azure pré-criado. Você pode criar um cofre de chaves seguindo as etapas nestes guias de início rápido:

Como alternativa, você pode executar esses comandos CLI do Azure.

Important

Cada cofre de chaves deve ter um nome exclusivo. Substitua <vault-name> pelo nome do cofre de chaves nos exemplos a seguir.

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

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

Preencha seu cofre de chaves com um segredo

Vamos criar um segredo chamado mySecret, com um valor de Êxito! . Um segredo pode ser uma senha, um sql cadeia de conexão ou qualquer outra informação que você precise manter seguras e disponíveis para seu aplicativo.

Para adicionar um segredo ao cofre de chaves recém-criado, use o seguinte comando:

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

Criar uma máquina virtual

Crie uma VM chamada myVM usando um dos seguintes métodos:

Linux Windows
CLI do Azure CLI do Azure
PowerShell PowerShell
Azure portal Portal do Azure

Para criar uma VM linux usando o CLI do Azure, use o comando az vm create. O exemplo a seguir cria uma conta de usuário chamada azureuser. O parâmetro --generate-ssh-keys é usado para gerar automaticamente uma chave SSH e colocá-la no local de chave padrão ( ~/.ssh).

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

Observe o valor de publicIpAddress na saída.

Atribuir uma identidade à VM

Crie uma identidade atribuída pelo sistema para a máquina virtual usando o comando CLI do Azure az vm assign:

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

Observe a identidade atribuída pelo sistema que é exibida no código a seguir. A saída do comando anterior seria:

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

Atribuir permissões à identidade da VM

Agora você pode atribuir as permissões de identidade criadas anteriormente para o cofre de chaves, executando o seguinte comando:

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>

Fazer login no VM

Para entrar na máquina virtual, siga as instruções em Conectar e entrar em uma máquina virtual Azure executando o Linux ou Conectar e entrar em uma máquina virtual Azure executando Windows.

Para fazer logon em uma VM do Linux, você pode usar o comando ssh com o <public-ip-address> determinado na etapa Criar uma máquina virtual :

ssh azureuser@<public-ip-address>

Instalar Node.js e npm bibliotecas na VM

Na máquina virtual, instale as duas bibliotecas npm que vamos usar no script JavaScript: @azure/keyvault-secrets e @azure/identity.

  1. No terminal SSH, instale Node.js e npm com os seguintes comandos:

    curl -sL https://deb.nodesource.com/setup_20.x | sudo -E bash - && \
        sudo apt-get install -y nodejs
    
  2. Crie um diretório de aplicativos e inicialize o Node.js pacote:

    mkdir app && cd app && npm init -y
    
  3. Instale os pacotes de serviço Azure usando npm:

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

Criar e editar o arquivo JavaScript de exemplo

  1. Na máquina virtual no diretório app, crie um arquivo JavaScript chamado index.js.

    touch index.js
    
  2. Abra o arquivo com qualquer editor de texto Nano.

    nano index.js
    
  3. Copie o código a seguir, substituindo <vault-name> pelo nome do cofre de chaves e cole no editor do Nano:

    // 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. Salve o arquivo com Ctrl + x.

  5. Quando solicitado Save modified buffer?, insira y.

  6. Quando solicitado File Name to Write: index.js, insira Enter.

Executar o aplicativo Node.js exemplo

Por fim, execute index.js. Se tudo correr bem, ele retornará o valor do seu segredo:

node index.js

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

Limpar os recursos

Quando eles não forem mais necessários, exclua a máquina virtual e o cofre de chaves. Você pode fazer isso rapidamente apenas excluindo o grupo de recursos ao qual eles pertencem:

az group delete -g "myResourceGroup"

Próximas etapas

Azure Key Vault API REST