Övning – Hantera hemligheter i ARM-mallar

Slutförd

I föregående övning körde du en enkel ARM-mall som etablerar en virtuell Linux-dator. I den här delen ska du följa en liknande process.

Den här gången lagrar du lösenordet i Azure Key Vault i stället för att skicka det som en parameter. För att ARM-mallen ska kunna komma åt lösenordet skapar du en parameterfil som refererar till Key Vault-hemligheten i din prenumeration.

Distribuera Azure Key Vault

Kommentar

På grund av begränsningar i sandbox-miljön skapar du här en Key Vault via Azure-portalen. Normalt skulle du använda cmdleten New-AzKeyVault till att skapa en Key Vault-instans via Azure PowerShell.

Skapa en Key Vault-instans och ge åtkomstbehörighet under distributionen. Så här gör du:

  1. Skapa en PowerShell-variabel som innehåller namnet på Key Vault-instansen:

    $KVNAME="tailwind-secrets" + (Get-Random -Count 1 -Maximum 9999999)
    
  2. Kör $KVNAME för att skriva ut variabelns värde:

    $KVNAME
    

    Dina utdata bör se ut så här (du ser ett annat tal):

    tailwind-secrets5978564
    

    Kopiera värdet till ett praktiskt ställe till nästa steg.

  3. Logga in på Azure-portalen med samma konto som du använde när du aktiverade sandbox-miljön.

  4. I menyn i Azure-portalen eller på sidan Start väljer du Skapa en resurs.

  5. Ange Key Vault i sökrutan.

  6. Välj Key Vault i listan och välj Skapa för att börja konfigurera Key Vault.

  7. Ange de här värdena i fönstret Skapa:

    1. Resursgrupp: namn på resursgrupp.
    2. Nyckelvalvsnamn: Ditt värde $KVNAMEför , till exempel tailwind-secrets5978564.
  8. Välj Granska + skapa.

  9. Välj Skapa. Det här tar någon minut. När resursen har skapats väljer du Gå till resurs.

  10. Välj Åtkomstkonfiguration under Inställningar. Aktivera alternativet Azure Resource Manager för malldistribution och välj Tillämpa.

  11. Kör cmdleten ConvertTo-SecureString från PowerShell-sessionen och tilldela resultatet till variabeln secretSecureString:

    $secretSecureString = ConvertTo-SecureString 'insecurepassword123!' -AsPlainText -Force
    
  12. Kör följande Set-AzKeyVaultSecret-kommando för att skapa en hemlighet i Key Vault. Hemligheten heter vmPassword, med värdet insecurepassword123!:

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

Skapa parameterfilen

Här skapar du en parameterfil som innehåller namnet på den virtuella datorns, administratörens användarnamn och en referens till VM-lösenordet i nyckelvalvet.

Du kan skicka parametrar till mallar från kommandoraden. Kom ihåg att du också kan skicka parametrar till ARM-mallen under distributionen via en parameterfil. Med en parameterfil kan du komma åt hemligheter i nyckelvalv från din mall.

  1. Kör följande Get-AzKeyVault-kommando för att skriva ut nyckelvalvets ID:

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

    Resultatet ser ut ungefär så här:

    /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/<rgn>[resource group name]</rgn>/providers/Microsoft.KeyVault/vaults/tailwind-secrets3020
    

    Anteckna utdata till nästa steg.

  2. Skapa en fil med namnet azuredeploy.parameters.json i Visual Studio Code, i samma katalog som innehåller azuredeploy.json.

  3. Lägg till följande innehåll i 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. Ersätt värdet för id (den tomma strängen) med värdet du kopierade i föregående steg. Spara sedan filen.

Distribuera en virtuell Linux-dator

Här distribuerar du samma ARM-mall som du distribuerade i föregående övning. Den här gången anger du parameterfilen som refererar till den virtuella datorns lösenord i nyckelvalvet.

  1. Kör följande New-AzResourceGroupDeployment-kommando:

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

    I föregående övning angav du varje nyckel/värde-par direkt från kommandoraden. Här anger du parameterfilen med "./azuredeploy.parameters.json".

    dnsLabelPrefix anges till vm2- följt av ett slumpmässigt tal. Det här krävs för att du ska använda ett annat DNS-namn än i föregående övning.

Verifiera distributionen

Kontrollera att den virtuella datorn är etablerad och går att ansluta till via SSH. Så här gör du:

  1. Kör kommandot Invoke-Expression för att ansluta till den virtuella datorn via SSH:

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

    När du uppmanas till det anger du yes för att fortsätta ansluta. Ange sedan administratörslösenordet . insecurepassword123!

    Viktigt!

    I praktiken bör du använda säkra lösenord. Du kan också autentisera med offentlig nyckel, vilket normalt är säkrare än att använda lösenord.

  2. Utgå från SSH-anslutningen till den virtuella datorn och kör hostname för att skriva ut den virtuella datorns värdnamn:

    hostname
    

    Du ser den virtuella datorns interna värdnamn: vm1

    vm2
    
  3. Kör exit för att stänga SSH-sessionen.

    exit
    

Bra jobbat! Du har utökat distributionen med en parameterfil som läser hemligheter från Key Vault.

Distribuera Azure Key Vault

I Azure Key Vault skapar du en Key Vault-instans och lägger till den virtuella datorns lösenord som en säker hemlighet. Så här gör du:

  1. Skapa en Bash-variabel som innehåller namnet på Key Vault-instansen.

    KVNAME=tailwind-secrets$RANDOM
    

    Namn på Key Vault-instanser måste vara unika. Delen $RANDOM ser till att namnet på Key Vault-instansen slutar med en slumpmässig serie siffror.

  2. Kör följande az keyvault create-kommando för att skapa Key Vault-instansen:

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

    Argumentet --enabled-for-template-deployment gör att ARM-mallen kan hämta hemligheter från nyckelvalvet.

  3. Kör följande az keyvault secret set-kommando för att skapa en hemlighet i Key Vault. Hemligheten heter vmPassword, med värdet insecurepassword123!:

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

Skapa parameterfilen

Här skapar du en parameterfil som innehåller namnet på den virtuella datorns, administratörens användarnamn och en referens till VM-lösenordet i nyckelvalvet.

Du kan skicka parametrar till mallar från kommandoraden. Kom ihåg att du också kan skicka parametrar till ARM-mallen under distributionen via en parameterfil. Med en parameterfil kan du komma åt hemligheter i nyckelvalv från din mall.

  1. Kör följande az keyvault show-kommando för att skriva ut nyckelvalvets ID:

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

    Resultatet ser ut ungefär så här:

    /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/<rgn>[resource group name]</rgn>/providers/Microsoft.KeyVault/vaults/tailwind-secrets3020
    

    Anteckna utdata till nästa steg.

  2. Skapa en fil med namnet azuredeploy.parameters.json i Visual Studio Code, i samma katalog som innehåller azuredeploy.json.

  3. Lägg till följande innehåll i 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. Ersätt värdet för id (den tomma strängen) med värdet du kopierade i föregående steg. Spara sedan filen.

Distribuera en virtuell Linux-dator

Här distribuerar du samma ARM-mall som du distribuerade i föregående övning. Den här gången anger du parameterfilen som refererar till den virtuella datorns lösenord i nyckelvalvet.

Distribuera mallen med följande az deployment group create-kommando:

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

I föregående övning angav du varje nyckel/värde-par i argumentet --parameters. Här anger du parameterfilen med @azuredeploy.parameters.json.

dnsLabelPrefix anges till vm2- följt av ett slumpmässigt tal. Det här krävs för att du ska använda ett annat DNS-namn än i föregående övning.

Verifiera distributionen

Precis som i föregående övning kontrollerar du att den virtuella datorn är etablerad och går att ansluta till via SSH. Den här gången hoppar du över några mellanliggande steg för att korta ned det hela.

  1. Kör följande kommando för att ansluta till din virtuella dator via SSH:

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

    När du uppmanas till det anger du yes för att fortsätta ansluta. Ange sedan administratörslösenordet . insecurepassword123!

  2. Utgå från SSH-anslutningen till den virtuella datorn och kör hostname för att skriva ut den virtuella datorns värdnamn:

    hostname
    

    Du ser den virtuella datorns interna värdnamn: vm2

    vm2
    
  3. Kör exit för att stänga SSH-sessionen.

    exit
    

Bra jobbat! Du har utökat distributionen med en parameterfil som läser hemligheter från Key Vault.