Wdrażanie maszyny wirtualnej przy użyciu bezpiecznie przechowywanego certyfikatu w usłudze Azure Stack Hub
W tym artykule opisano sposób wdrażania maszyny wirtualnej usługi Azure Stack Hub z zainstalowanym certyfikatem Key Vault.
Omówienie
Certyfikaty są używane w wielu scenariuszach, takich jak uwierzytelnianie w usłudze Active Directory lub szyfrowanie ruchu internetowego. Certyfikaty można bezpiecznie przechowywać jako wpisy tajne w magazynie kluczy usługi Azure Stack Hub. Zalety korzystania z usługi Azure Stack Hub Key Vault to:
- Certyfikaty nie są widoczne w skrycie, historii wiersza polecenia ani szablonie.
- Proces zarządzania certyfikatami jest usprawniony.
- Masz kontrolę nad kluczami, które uzyskują dostęp do certyfikatów.
Opis procesu
W poniższych krokach opisano proces wymagany do wypychania certyfikatu do maszyny wirtualnej:
- Utwórz wpis tajny magazynu kluczy.
- Zaktualizuj plik azuredeploy.parameters.json .
- Wdrażanie szablonu.
Uwaga
Możesz użyć tych kroków z zestawu Azure Stack Development Kit (ASDK) lub klienta zewnętrznego, jeśli masz połączenie za pośrednictwem sieci VPN.
Wymagania wstępne
- Musisz zasubskrybować ofertę obejmującą usługę Key Vault.
- Zainstaluj program PowerShell dla usługi Azure Stack Hub.
- Skonfiguruj środowisko programu PowerShell użytkownika usługi Azure Stack Hub.
Tworzenie wpisu tajnego magazynu kluczy
Poniższy skrypt tworzy certyfikat w formacie pfx, tworzy magazyn kluczy i przechowuje certyfikat w magazynie kluczy jako wpis tajny. Klucz contentType
tajny musi być ustawiony na pfx
.
Ważne
Należy użyć parametru -EnabledForDeployment
podczas tworzenia magazynu kluczy. Ten parametr zapewnia, że magazyn kluczy można odwoływać się do szablonów usługi Azure Resource Manager.
# 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
Po uruchomieniu tego skryptu dane wyjściowe zawierają identyfikator URI wpisu tajnego. Zanotuj ten identyfikator URI, ponieważ musisz odwołać się do niego w szablonie Wypychanie certyfikatu do systemu Windows Resource Manager. Pobierz folder szablonu vm-push-certificate-windows na komputer dewelopera. Ten folder zawiera pliki azuredeploy.json i azuredeploy.parameters.json , które są potrzebne w poniższych krokach.
Zmodyfikuj plik azuredeploy.parameters.json zgodnie z wartościami środowiska. Ważnymi parametrami są nazwa magazynu, grupa zasobów magazynu i identyfikator URI wpisu tajnego (wygenerowany przez poprzedni skrypt). W poniższej sekcji przedstawiono przykład pliku parametrów.
Aktualizowanie pliku azuredeploy.parameters.json
Zaktualizuj plik azuredeploy.parameters.json przy użyciu identyfikatora URI wpisu tajnego vaultName
i VmName
innych parametrów zgodnie ze środowiskiem. Poniższy plik JSON przedstawia przykładowy plik parametrów szablonu:
{
"$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"
}
}
}
Wdrożenie szablonu
Wdróż szablon przy użyciu następującego skryptu programu PowerShell:
# 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>"
Po pomyślnym wdrożeniu szablonu zostaną wyświetlone następujące dane wyjściowe:
Usługa Azure Stack Hub wypycha certyfikat do maszyny wirtualnej podczas wdrażania. Lokalizacja certyfikatu zależy od systemu operacyjnego maszyny wirtualnej:
- W systemie Windows certyfikat jest dodawany do lokalizacji certyfikatu LocalMachine z magazynem certyfikatów podanym przez użytkownika.
- W systemie Linux certyfikat jest umieszczany w katalogu /var/lib/waagent z nazwą pliku UppercaseThumbprint.crt dla pliku certyfikatu X509 i UppercaseThumbprint.prv dla klucza prywatnego.
Wycofywanie certyfikatów
Wycofywanie certyfikatów jest częścią procesu zarządzania certyfikatami. Nie można usunąć starszej wersji certyfikatu, ale można ją wyłączyć za pomocą Set-AzureKeyVaultSecretAttribute
polecenia cmdlet .
W poniższym przykładzie pokazano, jak wyłączyć certyfikat. Użyj własnych wartości dla parametrów VaultName
, Name
i Version
.
Set-AzureKeyVaultSecretAttribute -VaultName contosovault -Name servicecert -Version e3391a126b65414f93f6f9806743a1f7 -Enable 0