Exercício — Gerenciar segredos no modelo do ARM

Concluído

No exercício anterior, você executou um modelo básico do ARM (Azure Resource Manager) que provisiona uma máquina virtual do Linux. Nesta parte, você segue um processo semelhante.

Desta vez, em vez de passar a senha como um parâmetro, você armazena a senha no Azure Key Vault. A fim de habilitar o modelo do ARM para acessar a senha, crie um arquivo de parâmetro que referencie o segredo do cofre de chaves na sua assinatura.

Implantar o Azure Key Vault

Observação

Devido às limitações da área restrita, aqui você criará um cofre de chaves no Azure Key Vault pelo portal do Azure. Normalmente, o cmdlet New-AzKeyVault é usado para criar um cofre de chaves por meio do Azure PowerShell.

Crie um cofre de chaves e permita o acesso no momento da implantação. Para fazer isso:

  1. Crie uma variável do PowerShell que contenha o nome do cofre de chaves:

    $KVNAME="tailwind-secrets" + (Get-Random -Count 1 -Maximum 9999999)
    
  2. Execute $KVNAME para imprimir seu valor:

    $KVNAME
    

    A saída é semelhante a esta (o número será diferente):

    tailwind-secrets5978564
    

    Copie o valor em um local conveniente para a próxima etapa.

  3. Entre no portal do Azure usando a mesma conta com a qual você ativou a área restrita.

  4. No menu do portal do Azure ou na Página inicial, selecione Criar um recurso.

  5. Digite Key Vault na caixa de pesquisa.

  6. Selecione Key Vault na lista e Criar para começar a configurar o cofre de chaves.

  7. No painel de criação, especifique estes valores:

    1. Grupo de recursos: nome do grupo de recursos.
    2. Nome do cofre de chaves: o valor de $KVNAME, por exemplo, tailwind-secrets5978564.
  8. Selecione Examinar + criar.

  9. Selecione Criar. Isso deve levar cerca de um minuto. Depois de criar o recurso, selecione Ir para o recurso.

  10. Escolha Configuração de Acesso em Configurações. Habilite a opção Azure Resource Manager para implantação de modelo e selecione Salvar.

  11. Na sua sessão do PowerShell, execute o cmdlet ConvertTo-SecureString e atribua o resultado à variável secretSecureString:

    $secretSecureString = ConvertTo-SecureString 'insecurepassword123!' -AsPlainText -Force
    
  12. Execute o comando Set-AzKeyVaultSecret a seguir para criar um segredo no cofre de chaves. O segredo é chamado vmPassword, com o valor insecurepassword123!:

    $secret = Set-AzKeyVaultSecret -VaultName $KVNAME -Name vmPassword -SecretValue $secretSecureString
    

Criar o arquivo de parâmetros

Aqui, você cria um arquivo de parâmetros que contém o nome da VM, o nome de usuário do administrador e uma referência à senha da VM no cofre de chaves.

Você pode passar parâmetros para modelos da linha de comando. Lembre-se de que um arquivo de parâmetro é uma maneira alternativa de passar parâmetros para o modelo do ARM durante a implantação. Um arquivo de parâmetro permite que você acesse os segredos do cofre de chaves do seu modelo.

  1. Execute o seguinte comando Get-AzKeyVault para imprimir a ID do cofre de chaves:

    Get-AzKeyVault -VaultName $KVNAME | Select-Object -ExpandProperty ResourceId
    

    A saída será semelhante a esta:

    /subscriptions/7c7df858-93a0-4f38-8990-304c836a4e8d/resourceGroups/<rgn>[resource group name]</rgn>/providers/Microsoft.KeyVault/vaults/tailwind-secrets3020
    

    Observe a saída para a próxima etapa.

  2. No Visual Studio Code, crie um arquivo chamado azuredeploy.parameters.json no mesmo diretório que contém azuredeploy.json.

  3. Adicione esse conteúdo ao azuredeploy.parameters.json:

    {
      "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
      "contentVersion": "1.0.0.0",
      "parameters": {
        "adminUsername": {
          "value": "azureuser"
        },
        "vmName": {
          "value": "vm2"
        },
        "adminPasswordOrKey": {
          "reference": {
             "keyVault": {
             "id": ""
             },
             "secretName": "vmPassword"
          }
        }
      }
    }
    
  4. Substitua o valor de id (a cadeia de caracteres vazia) pelo valor que você copiou na etapa anterior. Em seguida, salve o arquivo.

Implantar VM do Linux

Aqui, você implanta o mesmo modelo do ARM implantado no exercício anterior. Desta vez, você fornece o arquivo de parâmetro que faz referência à senha da VM no cofre de chaves.

  1. Execute o seguinte comando New-AzResourceGroupDeployment:

    New-AzResourceGroupDeployment `
      -TemplateFile "./azuredeploy.json" `
      -TemplateParameterFile "./azuredeploy.parameters.json" `
      -dnsLabelPrefix ("vm2-" + (Get-Random -Count 1 -Maximum 9999999))
    

    No exercício anterior, você forneceu cada par chave-valor diretamente da linha de comando. Aqui, você especifica "./azuredeploy.parameters.json" para fornecer o arquivo de parâmetros.

    O dnsLabelPrefix é definido como vm2-, seguido por um número aleatório. Isso é necessário para garantir que o nome DNS seja diferente do nome DNS usado no exercício anterior.

Verificar a implantação

Verifique se a VM está provisionada e pode ser conectada via SSH. Para fazer isso:

  1. Execute o comando Invoke-Expression para se conectar à VM por meio do SSH:

    Invoke-Expression (Get-AzResourceGroupDeployment -Name azuredeploy -ResourceGroupName <rgn>your resource group</rgn>).outputs.sshCommand.value
    

    Quando solicitado, insira yes para continuar a se conectar. Em seguida, insira a senha do administrador, insecurepassword123!.

    Importante

    Na prática, mantenha as senhas seguras. Use também a autenticação de chave pública, que normalmente é mais segura do que usar senhas.

  2. De sua conexão SSH com a VM, execute hostname para imprimir o nome do host da VM:

    hostname
    

    Você vê o nome do host interno da VM, vm1:

    vm2
    
  3. Execute exit para sair de sua sessão SSH.

    exit
    

Bom trabalho! Você estendeu a implantação para incluir um arquivo de parâmetros que lê informações secretas do Key Vault.

Implantar o Azure Key Vault

No Azure Key Vault, crie um cofre de chaves e adicione a senha da VM como um segredo seguro. Para fazer isso:

  1. Crie uma variável do Bash que contenha o nome do cofre de chaves.

    KVNAME=tailwind-secrets$RANDOM
    

    Os nomes do cofre de chaves precisam ser exclusivos. A parte $RANDOM garante que o nome do cofre de chaves termine com uma série aleatória de números.

  2. Execute o seguinte comando az keyvault create para criar o cofre de chaves:

    az keyvault create \
      --name $KVNAME \
      --enabled-for-template-deployment true
    

    O argumento --enabled-for-template-deployment permite que o modelo do ARM (Azure Resource Manager) recupere segredos do cofre de chaves.

  3. Execute o comando az keyvault secret set a seguir para criar um segredo no cofre de chaves. O segredo é chamado vmPassword, com o valor insecurepassword123!:

    az keyvault secret set \
      --vault-name $KVNAME \
      --name vmPassword \
      --value 'insecurepassword123!'
    

Criar o arquivo de parâmetros

Aqui, você cria um arquivo de parâmetros que contém o nome da VM, o nome de usuário do administrador e uma referência à senha da VM no cofre de chaves.

Você pode passar parâmetros para modelos da linha de comando. Lembre-se de que um arquivo de parâmetro é uma maneira alternativa de passar parâmetros para o modelo do ARM durante a implantação. Um arquivo de parâmetro permite que você acesse os segredos do cofre de chaves do seu modelo.

  1. Execute o seguinte comando az keyvault show para imprimir a ID do cofre de chaves:

    az keyvault show \
      --name $KVNAME \
      --query id \
      --output tsv
    

    A saída será semelhante a esta:

    /subscriptions/7c7df858-93a0-4f38-8990-304c836a4e8d/resourceGroups/<rgn>[resource group name]</rgn>/providers/Microsoft.KeyVault/vaults/tailwind-secrets3020
    

    Observe a saída para a próxima etapa.

  2. No Visual Studio Code, crie um arquivo chamado azuredeploy.parameters.json no mesmo diretório que contém azuredeploy.json.

  3. Adicione esse conteúdo ao azuredeploy.parameters.json:

    {
      "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
      "contentVersion": "1.0.0.0",
      "parameters": {
        "adminUsername": {
          "value": "azureuser"
        },
        "vmName": {
          "value": "vm2"
        },
        "adminPasswordOrKey": {
          "reference": {
             "keyVault": {
             "id": ""
             },
             "secretName": "vmPassword"
          }
        }
      }
    }
    
  4. Substitua o valor de id (a cadeia de caracteres vazia) pelo valor que você copiou na etapa anterior. Em seguida, salve o arquivo.

Implantar VM do Linux

Aqui, você implanta o mesmo modelo do ARM implantado no exercício anterior. Desta vez, você fornece o arquivo de parâmetro que faz referência à senha da VM no cofre de chaves.

Execute o seguinte comando az deployment group create para implantar o modelo:

az deployment group create \
  --template-file azuredeploy.json \
  --parameters @azuredeploy.parameters.json dnsLabelPrefix="vm2-$RANDOM"

No exercício anterior, você forneceu cada par chave-valor no argumento --parameters. Aqui, você especifica @azuredeploy.parameters.json para fornecer o arquivo de parâmetros.

O dnsLabelPrefix é definido como vm2-, seguido por um número aleatório. Isso é necessário para garantir que o nome DNS seja diferente do nome DNS usado no exercício anterior.

Verificar a implantação

Como você fez no exercício anterior, verifique se a VM está provisionada e pode ser conectada via SSH. Para resumir, desta vez você pulará algumas das etapas intermediárias.

  1. Execute o seguinte para se conectar à VM por SSH:

    $(az deployment group show \
      --name azuredeploy \
      --query properties.outputs.sshCommand.value \
      --output tsv)
    

    Quando solicitado, insira yes para continuar a se conectar. Em seguida, insira a senha do administrador, insecurepassword123!.

  2. De sua conexão SSH com a VM, execute hostname para imprimir o nome do host da VM:

    hostname
    

    Você vê o nome do host interno da VM, vm2:

    vm2
    
  3. Execute exit para sair de sua sessão SSH.

    exit
    

Bom trabalho! Você estendeu a implantação para incluir um arquivo de parâmetros que lê informações secretas do Key Vault.