Delen via


Een VM met een veilig opgeslagen certificaat implementeren in Azure Stack Hub

In dit artikel wordt beschreven hoe u een virtuele machine (VM) van Azure Stack Hub implementeert waarop een Key Vault-certificaat is 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.

Procesbeschrijving

In de volgende stappen wordt het proces beschreven dat nodig is om een certificaat naar de VM te pushen:

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

Notitie

U kunt deze stappen gebruiken vanuit de Azure Stack Development Kit (ASDK) of vanuit een externe client als u verbinding hebt via VPN.

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. De contentType van het geheim moet worden ingesteld op pfx.

Belangrijk

U moet de -EnabledForDeployment parameter gebruiken bij het maken van de sleutelkluis. Deze parameter zorgt ervoor dat naar 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 de sjabloon Push certificate to Windows Resource Manager. Download de sjabloonmap vm-push-certificate-windows naar uw ontwikkelcomputer. Deze map bevat de bestanden azuredeploy.json en azuredeploy.parameters.json , die u nodig hebt in de volgende stappen.

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 vaultName, geheime URI, VmNameen andere parameters volgens 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:

Resultaten van sjabloonimplementatie

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

  • In Windows wordt het certificaat toegevoegd aan de LocalMachine-certificaatlocatie , met het certificaatarchief dat de gebruiker heeft opgegeven.
  • In Linux wordt het certificaat onder de map /var/lib/waagent geplaatst, met de bestandsnaam HoofdlettersThumbprint.crt voor het X509-certificaatbestand en HoofdlettersThumbprint.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 het wel 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 VaultNameparameters , Nameen Version .

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

Volgende stappen