Självstudie: Integrera Azure Key Vault i din ARM-malldistribution

Lär dig hur du hämtar hemligheter från ett Azure-nyckelvalv och skickar hemligheterna som parametrar när du distribuerar en Azure Resource Manager-mall (ARM-mall). Parametervärdet exponeras aldrig eftersom du bara refererar till dess nyckelvalvs-ID. Du kan referera till key vault-hemligheten med hjälp av ett statiskt ID eller ett dynamiskt ID. I den här självstudien används ett statiskt ID. Med metoden statiskt ID refererar du till nyckelvalvet i mallparameterfilen, inte mallfilen. Mer information om båda metoderna finns i Använda Azure Key Vault för att skicka säkert parametervärde under distributionen.

I självstudien Ange resursdistributionsordning skapar du en virtuell dator (VM). Du måste ange användarnamn och lösenord för vm-administratören. I stället för att ange lösenordet kan du i förväg lagra lösenordet i ett Azure-nyckelvalv och sedan anpassa mallen för att hämta lösenordet från nyckelvalvet under distributionen.

Diagram som visar integreringen av en Resource Manager mall med ett nyckelvalv

Den här självstudien omfattar följande uppgifter:

  • Förbereda ett nyckelvalv
  • Öppna en snabbstartsmall
  • Redigera parameterfilen
  • Distribuera mallen
  • Verifiera distributionen
  • Rensa resurser

Om du inte har en Azure-prenumeration kan du skapa ett kostnadsfritt konto innan du börjar.

En Learn-modul som använder ett säkert värde från ett nyckelvalv finns i Hantera komplexa molndistributioner med hjälp av avancerade ARM-mallfunktioner.

Förutsättningar

För att kunna följa stegen i den här artikeln behöver du:

Förbereda ett nyckelvalv

I det här avsnittet skapar du ett nyckelvalv och lägger till en hemlighet i det, så att du kan hämta hemligheten när du distribuerar mallen. Det finns många sätt att skapa ett nyckelvalv. I den här självstudien använder du Azure PowerShell för att distribuera en ARM-mall. Den här mallen gör två saker:

  • Skapar ett nyckelvalv med egenskapen enabledForTemplateDeployment aktiverad. Den här egenskapen måste vara sann innan malldistributionsprocessen kan komma åt hemligheterna som definieras i nyckelvalvet.
  • Lägger till en hemlighet i nyckelvalvet. Hemligheten lagrar administratörslösenordet för den virtuella datorn.

Anteckning

Som den användare som distribuerar mallen för virtuella datorer måste ägaren eller deltagaren ge dig åtkomst till behörigheten Microsoft.KeyVault/vaults/deploy/action för nyckelvalvet om du inte är ägare till eller deltagare i nyckelvalvet. Mer information finns i Använda Azure Key Vault för att skicka ett säkert parametervärde under distributionen.

Om du vill köra följande Azure PowerShell skript väljer du Prova för att öppna Cloud Shell. Om du vill klistra in skriptet högerklickar du på gränssnittsfönstret och väljer sedan Klistra in.

$projectName = Read-Host -Prompt "Enter a project name that is used for generating resource names"
$location = Read-Host -Prompt "Enter the location (i.e. centralus)"
$upn = Read-Host -Prompt "Enter your user principal name (email address) used to sign in to Azure"
$secretValue = Read-Host -Prompt "Enter the virtual machine administrator password" -AsSecureString

$resourceGroupName = "${projectName}rg"
$keyVaultName = $projectName
$adUserId = (Get-AzADUser -UserPrincipalName $upn).Id
$templateUri = "https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/tutorials-use-key-vault/CreateKeyVault.json"

New-AzResourceGroup -Name $resourceGroupName -Location $location
New-AzResourceGroupDeployment -ResourceGroupName $resourceGroupName -TemplateUri $templateUri -keyVaultName $keyVaultName -adUserId $adUserId -secretValue $secretValue

Write-Host "Press [ENTER] to continue ..."

Viktigt

  • Resursgruppens namn är projektnamnet, men med rg tillagt. Om du vill göra det enklare att rensa de resurser som du skapade i den här självstudien använder du samma projektnamn och resursgruppsnamn när du distribuerar nästa mall.
  • Standardnamnet för hemligheten är vmAdminPassword. Den är hårdkodad i mallen.
  • Om du vill aktivera mallen för att hämta hemligheten måste du aktivera en åtkomstprincip som heter Aktivera åtkomst till Azure Resource Manager för malldistribution för nyckelvalvet. Den här principen är aktiverad i mallen. Mer information om åtkomstprincipen finns i Distribuera nyckelvalv och hemligheter.

Mallen har ett utdatavärde som kallas keyVaultId. Du kommer att använda det här ID:t tillsammans med det hemliga namnet för att hämta det hemliga värdet senare i självstudien. Resurs-ID-formatet är:

/subscriptions/<SubscriptionID>/resourceGroups/mykeyvaultdeploymentrg/providers/Microsoft.KeyVault/vaults/<KeyVaultName>

När du kopierar och klistrar in ID:t kan det vara indelat i flera rader. Sammanfoga linjerna och trimma de extra blankstegen.

Verifiera distributionen genom att köra följande PowerShell-kommando i samma gränssnittsfönster för att hämta hemligheten i klartext. Kommandot fungerar bara i samma gränssnittssession eftersom det använder variabeln $keyVaultName, som definieras i föregående PowerShell-skript.

$secret = Get-AzKeyVaultSecret -VaultName $keyVaultName -Name "vmAdminPassword"
$ssPtr = [System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($secret.SecretValue)
try {
   $secretValueText = [System.Runtime.InteropServices.Marshal]::PtrToStringBSTR($ssPtr)
} finally {
   [System.Runtime.InteropServices.Marshal]::ZeroFreeBSTR($ssPtr)
}
Write-Output $secretValueText

Nu har du förberett ett nyckelvalv och en hemlighet. I följande avsnitt visas hur du anpassar en befintlig mall för att hämta hemligheten under distributionen.

Öppna en snabbstartsmall

Azure Snabbstartsmallar är en lagringsplats för ARM-mallar. I stället för att skapa en mall från början får du en exempelmall som du anpassar. Mallen som används i den här självstudien kallas Distribuera en enkel virtuell Windows-dator.

  1. I Visual Studio Code väljer du Arkiv>Öppna fil.

  2. I rutan Filnamn klistrar du in följande webbadress:

    https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/quickstarts/microsoft.compute/vm-simple-windows/azuredeploy.json
    
  3. Välj Öppna för att öppna filen. Scenariot är detsamma som det som används i Självstudie: Skapa ARM-mallar med beroende resurser. Mallen definierar sex resurser:

    Det är bra att ha viss grundläggande förståelse för mallen innan du anpassar den.

  4. Välj Arkiv>Spara som och spara sedan en kopia av filen på den lokala datorn med namnet azuredeploy.json.

  5. Upprepa steg 1–3 för att öppna följande URL och spara sedan filen som azuredeploy.parameters.json.

    https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/quickstarts/microsoft.compute/vm-simple-windows/azuredeploy.parameters.json
    

Redigera parameterfilen

Med den statiska ID-metoden behöver du inte göra några ändringar i mallfilen. Du hämtar det hemliga värdet genom att konfigurera mallparameterfilen.

  1. Öppna azuredeploy.parameters.json i Visual Studio Code om det inte redan är öppet.

  2. Uppdatera parametern adminPassword till:

    "adminPassword": {
      "reference": {
        "keyVault": {
          "id": "/subscriptions/<SubscriptionID>/resourceGroups/mykeyvaultdeploymentrg/providers/Microsoft.KeyVault/vaults/<KeyVaultName>"
        },
        "secretName": "vmAdminPassword"
      }
    },
    

    Viktigt

    Ersätt värdet för med resurs-ID:t för id nyckelvalvet som du skapade i föregående procedur. secretName är hårdkodad som vmAdminPassword. Se Förbereda ett nyckelvalv.

    Integrera nyckelvalv och Resource Manager mallfil för distributionsparametrar för virtuella datorer

  3. Uppdatera följande värden:

    • adminUsername: Namnet på administratörskontot för den virtuella datorn.
    • dnsLabelPrefix: Namnge värdet dnsLabelPrefix .

    Exempel på namn finns i föregående bild.

  4. Spara ändringarna.

Distribuera mallen

  1. Logga in på Cloud Shell.

  2. Välj önskad miljö genom att välja Antingen PowerShell eller Bash (för CLI) i det övre vänstra hörnet. Du måste starta om gränssnittet när du byter.

    Azure Portal Cloud Shell ladda upp fil

  3. Välj Ladda upp/ned filer och välj sedan Ladda upp. Ladda upp både azuredeploy.json och azuredeploy.parameters.json till Cloud Shell. När du har laddat upp filen kan du använda ls kommandot och cat kommandot för att kontrollera att filen har laddats upp.

  4. Kör följande PowerShell-skript för att distribuera mallen.

    $projectName = Read-Host -Prompt "Enter the same project name that is used for creating the key vault"
    $location = Read-Host -Prompt "Enter the same location that is used for creating the key vault (i.e. centralus)"
    $resourceGroupName = "${projectName}rg"
    
    New-AzResourceGroupDeployment `
        -ResourceGroupName $resourceGroupName `
        -TemplateFile "$HOME/azuredeploy.json" `
        -TemplateParameterFile "$HOME/azuredeploy.parameters.json"
    
    Write-Host "Press [ENTER] to continue ..."
    

    När du distribuerar mallen använder du samma resursgrupp som du använde i nyckelvalvet. Den här metoden gör det enklare för dig att rensa resurserna eftersom du bara behöver ta bort en resursgrupp i stället för två.

Verifiera distributionen

När du har distribuerat den virtuella datorn testar du inloggningsuppgifterna med hjälp av lösenordet som lagras i nyckelvalvet.

  1. Öppna Azure-portalen.

  2. Välj Resursgrupper><YourResourceGroupName>>simpleWinVM.

  3. Välj Anslut överst.

  4. Välj Ladda ned RDP-fil och följ sedan anvisningarna för att logga in på den virtuella datorn med hjälp av lösenordet som lagras i nyckelvalvet.

Rensa resurser

När du inte längre behöver dina Azure-resurser rensar du de resurser som du har distribuerat genom att ta bort resursgruppen.

$projectName = Read-Host -Prompt "Enter the same project name that is used for creating the key vault"
$resourceGroupName = "${projectName}rg"

Remove-AzResourceGroup -Name $resourceGroupName

Write-Host "Press [ENTER] to continue ..."

Nästa steg

I den här självstudien hämtade du en hemlighet från ditt Azure-nyckelvalv. Sedan använde du hemligheten i malldistributionen. Information om hur du använder tillägg för virtuell dator för att utföra distributionsuppgifter finns i: