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:

  1. Utwórz wpis tajny magazynu kluczy.
  2. Zaktualizuj plik azuredeploy.parameters.json .
  3. 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

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 vaultNamei VmNameinnych 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:

Wyniki wdrożenia szablonu

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, Namei Version .

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

Następne kroki