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:
- Maak een sleutelkluisgeheim.
- Werk het bestand azuredeploy.parameters.json bij.
- 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
- U moet zich abonneren op een aanbieding die de Key Vault-service bevat.
- Installeer PowerShell voor Azure Stack Hub.
- Configureer de PowerShell-omgeving van de Azure Stack Hub-gebruiker.
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, VmName
en 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:
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 VaultName
parameters , Name
en Version
.
Set-AzureKeyVaultSecretAttribute -VaultName contosovault -Name servicecert -Version e3391a126b65414f93f6f9806743a1f7 -Enable 0