Distribuera en virtuell dator med ett säkert lagrat certifikat på Azure Stack Hub

I den här artikeln beskrivs hur du distribuerar en virtuell Azure Stack Hub-dator (VM) med ett Key Vault certifikat installerat.

Översikt

Certifikat används i många scenarier, till exempel autentisering till Active Directory eller kryptering av webbtrafik. Du kan lagra certifikat på ett säkert sätt som hemligheter i ett Azure Stack Hub-nyckelvalv. Fördelarna med att använda Azure Stack Hub Key Vault är:

  • Certifikat exponeras inte i ett skript, kommandoradshistorik eller en mall.
  • Certifikathanteringsprocessen effektiviseras.
  • Du har kontroll över de nycklar som har åtkomst till certifikat.

Processbeskrivning

Följande steg beskriver processen som krävs för att skicka ett certifikat till den virtuella datorn:

  1. Skapa en nyckelvalvshemlighet.
  2. Uppdatera filen azuredeploy.parameters.json .
  3. Distribuera mallen.

Anteckning

Du kan använda de här stegen från Azure Stack Development Kit (ASDK) eller från en extern klient om du är ansluten via VPN.

Förutsättningar

Skapa en nyckelvalvshemlighet

Följande skript skapar ett certifikat i pfx-format, skapar ett nyckelvalv och lagrar certifikatet i nyckelvalvet som en hemlighet. Hemlighetens contentType måste anges till pfx.

Viktigt

Du måste använda parametern -EnabledForDeployment när du skapar nyckelvalvet. Den här parametern säkerställer att nyckelvalvet kan refereras från Azure Resource Manager-mallar.

# Create a certificate in the .pfx format
New-SelfSignedCertificate `
  -certstorelocation cert:\LocalMachine\My `
  -dnsname contoso.microsoft.com

$pwd = ConvertTo-SecureString `
  -String "<Password used to export the certificate>" `
  -Force `
  -AsPlainText

Export-PfxCertificate `
  -cert "cert:\localMachine\my\<certificate thumbprint that was created in the previous step>" `
  -FilePath "<Fully qualified path to where the exported certificate can be stored>" `
  -Password $pwd

# Create a key vault and upload the certificate into the key vault as a secret
$vaultName = "contosovault"
$resourceGroup = "contosovaultrg"
$location = "local"
$secretName = "servicecert"
$fileName = "<Fully qualified path to where the exported certificate can be stored>"
$certPassword = "<Password used to export the certificate>"

$fileContentBytes = get-content $fileName `
  -Encoding Byte

$fileContentEncoded = [System.Convert]::ToBase64String($fileContentBytes)
$jsonObject = @"
{
"data": "$filecontentencoded",
"dataType" :"pfx",
"password": "$certPassword"
}
"@
$jsonObjectBytes = [System.Text.Encoding]::UTF8.GetBytes($jsonObject)
$jsonEncoded = [System.Convert]::ToBase64String($jsonObjectBytes)

New-AzResourceGroup `
  -Name $resourceGroup `
  -Location $location

New-AzKeyVault `
  -VaultName $vaultName `
  -ResourceGroupName $resourceGroup `
  -Location $location `
  -sku standard `
  -EnabledForDeployment

$secret = ConvertTo-SecureString `
  -String $jsonEncoded `
  -AsPlainText -Force

Set-AzureKeyVaultSecret `
  -VaultName $vaultName `
  -Name $secretName `
   -SecretValue $secret

När du kör det här skriptet innehåller utdata den hemliga URI:n. Anteckna den här URI:n eftersom du måste referera till den i mallen Push-certifikat till Windows Resource Manager. Ladda ned mallmappen vm-push-certificate-windows till utvecklingsdatorn. Den här mappen innehåller filerna azuredeploy.json och azuredeploy.parameters.json , som du behöver i följande steg.

Ändra filen azuredeploy.parameters.json enligt dina miljövärden. De viktiga parametrarna är valvnamnet, valvresursgruppen och den hemliga URI:n (som genererades av föregående skript). I följande avsnitt visas ett exempel på en parameterfil.

Uppdatera filen azuredeploy.parameters.json

Uppdatera filen azuredeploy.parameters.json med parametrarna vaultName, hemlig URI och VmNameandra parametrar enligt din miljö. Följande JSON-fil visar ett exempel på filen med mallparametrar:

{
  "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "newStorageAccountName": {
      "value": "kvstorage01"
    },
    "vmName": {
      "value": "VM1"
    },
    "vmSize": {
      "value": "Standard_D1_v2"
    },
    "adminUserName": {
      "value": "demouser"
    },
    "adminPassword": {
      "value": "demouser@123"
    },
    "vaultName": {
      "value": "contosovault"
    },
    "vaultResourceGroup": {
      "value": "contosovaultrg"
    },
    "secretUrlWithVersion": {
      "value": "https://testkv001.vault.local.azurestack.external/secrets/testcert002/82afeeb84f4442329ce06593502e7840"
    }
  }
}

Distribuera mallen

Distribuera mallen med hjälp av följande PowerShell-skript:

# Deploy a Resource Manager template to create a VM and push the secret to it
New-AzResourceGroupDeployment `
  -Name KVDeployment `
  -ResourceGroupName $resourceGroup `
  -TemplateFile "<Fully qualified path to the azuredeploy.json file>" `
  -TemplateParameterFile "<Fully qualified path to the azuredeploy.parameters.json file>"

När mallen har distribuerats visas följande utdata:

Malldistributionsresultat

Azure Stack Hub push-överför certifikatet till den virtuella datorn under distributionen. Certifikatplatsen beror på operativsystemet för den virtuella datorn:

  • I Windows läggs certifikatet till på platsen för LocalMachine-certifikatet , med certifikatarkivet som användaren angav.
  • I Linux placeras certifikatet under katalogen /var/lib/waagent med filnamnet UppercaseThumbprint.crt för X509-certifikatfilen och UppercaseThumbprint.prv för den privata nyckeln.

Dra tillbaka certifikat

Att dra tillbaka certifikat är en del av certifikathanteringsprocessen. Du kan inte ta bort den äldre versionen av ett certifikat, men du kan inaktivera det med hjälp av cmdleten Set-AzureKeyVaultSecretAttribute .

I följande exempel visas hur du inaktiverar ett certifikat. Använd dina egna värden för parametrarna VaultName, Nameoch Version .

Set-AzureKeyVaultSecretAttribute -VaultName contosovault -Name servicecert -Version e3391a126b65414f93f6f9806743a1f7 -Enable 0

Nästa steg