Een VIRTUELE machine implementeren met een veilig opgeslagen certificaat in Azure Stack Hub

In dit artikel wordt beschreven hoe u een virtuele Machine (VM) van Azure Stack Hub implementeert met een Key Vault certificaat geïnstalleerd.

Overzicht

Certificaten worden in veel scenario's gebruikt, zoals verificatie bij Active Directory of het versleutelen van webverkeer. U kunt certificaten veilig opslaan als geheimen in een Azure Stack Hub-sleutelkluis. De voordelen van het gebruik van Azure Stack Hub Key Vault zijn:

  • Certificaten worden niet weergegeven in een script, opdrachtregelgeschiedenis of sjabloon.
  • Het certificaatbeheerproces is gestroomlijnd.
  • U hebt controle over de sleutels die toegang hebben tot certificaten.

Beschrijving van proces

In de volgende stappen wordt het proces beschreven dat is vereist om een certificaat naar de VIRTUELE machine te pushen:

  1. Maak een sleutelkluisgeheim.
  2. Werk het bestand azuredeploy.parameters.json bij.
  3. De sjabloon implementeren.

Notitie

U kunt deze stappen van de Azure Stack Development Kit (ASDK) of van een externe client gebruiken als u via VPN bent verbonden.

Vereisten

Een sleutelkluisgeheim maken

Met het volgende script maakt u een certificaat in de PFX-indeling, maakt u een sleutelkluis en slaat u het certificaat op in de sleutelkluis als geheim. Het contentType geheim moet worden ingesteld op pfx.

Belangrijk

U moet de -EnabledForDeployment parameter gebruiken bij het maken van de sleutelkluis. Deze parameter zorgt ervoor dat de sleutelkluis kan worden verwezen vanuit Azure Resource Manager-sjablonen.

# 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

Wanneer u dit script uitvoert, bevat de uitvoer de geheime URI. Noteer deze URI, omdat u ernaar moet verwijzen in het pushcertificaat naar Windows Resource Manager sjabloon. Download de map vm-push-certificate-windows-sjabloon naar uw ontwikkelcomputer. Deze map bevat de bestanden azuredeploy.json en azuredeploy.parameters.json , die u in de volgende stappen nodig hebt.

Wijzig het bestand azuredeploy.parameters.json op basis van uw omgevingswaarden. De belangrijke parameters zijn de kluisnaam, de kluisresourcegroep en de geheime URI (zoals gegenereerd door het vorige script). In de volgende sectie ziet u een voorbeeld van een parameterbestand.

Het bestand azuredeploy.parameters.json bijwerken

Werk het bestand azuredeploy.parameters.json bij met de vaultNamegeheime URI VmNameen andere parameters op basis van uw omgeving. In het volgende JSON-bestand ziet u een voorbeeld van het sjabloonparametersbestand:

{
  "$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"
    }
  }
}

De sjabloon implementeren

Implementeer de sjabloon met behulp van het volgende PowerShell-script:

# 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>"

Wanneer de sjabloon is geïmplementeerd, wordt de volgende uitvoer weergegeven:

Template deployment results

Azure Stack Hub pusht het certificaat tijdens de implementatie naar de VM. De certificaatlocatie is afhankelijk van het besturingssysteem van de VIRTUELE machine:

  • In Windows wordt het certificaat toegevoegd aan de locatie van het LocalMachine-certificaat, met het certificaatarchief dat de gebruiker heeft opgegeven.
  • In Linux wordt het certificaat in de map /var/lib/waagent geplaatst, met de bestandsnaam UppercaseThumbprint.crt voor het X509-certificaatbestand en UppercaseThumbprint.prv voor de persoonlijke sleutel.

Certificaten buiten gebruik stellen

Het buiten gebruik stellen van certificaten maakt deel uit van het certificaatbeheerproces. U kunt de oudere versie van een certificaat niet verwijderen, maar u kunt deze uitschakelen met behulp van de Set-AzureKeyVaultSecretAttribute cmdlet.

In het volgende voorbeeld ziet u hoe u een certificaat uitschakelt. Gebruik uw eigen waarden voor de VaultName, Nameen Version parameters.

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

Volgende stappen