Развертывание VM с сертификатом, безопасно хранящимся в Azure Stack HubDeploy a VM with a securely stored certificate on Azure Stack Hub

В этой статье описано, как развернуть виртуальную машину (VM) Azure Stack Hub с установленным сертификатом Key Vault.This article describes how to deploy an Azure Stack Hub virtual machine (VM) with a Key Vault certificate installed.

ОбзорOverview

Сертификаты используются во многих сценариях, например для аутентификации в Active Directory или шифрования веб-трафика.Certificates are used in many scenarios, such as authenticating to Active Directory, or encrypting web traffic. Вы можете безопасно хранить сертификаты в виде секретов в хранилище ключей Azure Stack Hub.You can securely store certificates as secrets in an Azure Stack Hub key vault. Хранилище ключей Azure Stack обеспечивает следующие преимущества:The benefits of using Azure Stack Hub Key Vault are:

  • сертификаты не предоставляются в скриптах, журналах командной строки или шаблонах;Certificates are not exposed in a script, command-line history, or template.
  • упрощенное управление сертификатами;The certificate management process is streamlined.
  • возможность управлять ключами, используемыми для доступа к сертификатам.You have control of the keys that access certificates.

Описание процессаProcess description

Ниже представлены шаги, которые необходимо предпринять для отправки сертификата на VM.The following steps describe the process required to push a certificate to the VM:

  1. Создайте секрет хранилища ключей.Create a key vault secret.
  2. Обновите файл azuredeploy.parameters.json соответствующим образом.Update the azuredeploy.parameters.json file.
  3. Разверните шаблон.Deploy the template.

Примечание

Эти шаги можно выполнить из Пакета средств разработки Azure Stack (ASDK) или из внешнего клиента при подключении через VPN.You can use these steps from the Azure Stack Development Kit (ASDK), or from an external client if you're connected through VPN.

Предварительные требованияPrerequisites

Создание секрета хранилища ключейCreate a key vault secret

Следующий скрипт создает сертификат в формате PFX, создает хранилище ключей и сохраняет в нем сертификат в качестве секрета.The following script creates a certificate in the .pfx format, creates a key vault, and stores the certificate in the key vault as a secret. Для contentType секрета необходимо задать значение pfx .The contentType of the secret must be set to pfx.

Важно!

Используйте параметр -EnabledForDeployment при создании хранилища ключей.You must use the -EnabledForDeployment parameter when creating the key vault. Благодаря этому параметру на хранилище ключей можно ссылаться из шаблонов Azure Resource Manager.This parameter ensures that the key vault can be referenced from Azure Resource Manager templates.

# 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

В результате выполнения этого скрипта был выведен URI секрета.When you run this script, the output includes the secret URI. Запишите этот универсальный код ресурса (URI) так как на него необходимо указать ссылку при отправке сертификата в шаблон Resource Manager для Windows.Make a note of this URI, as you must reference it in the Push certificate to Windows Resource Manager template. Скачайте папку шаблона vm-push-certificate-windows template на компьютер разработчика.Download the vm-push-certificate-windows template folder to your development computer. В этой папке содержатся файлы azuredeploy.json и azuredeploy.parameters.json, которые требуются в следующих шагах.This folder contains the azuredeploy.json and azuredeploy.parameters.json files, which you need in the following steps.

Измените файл azuredeploy.parameters.json в соответствии со значениями своей среды.Modify the azuredeploy.parameters.json file according to your environment values. К важным параметрам относятся имя хранилища, группа ресурсов хранилища и URI секрета (сгенерированный предыдущим скриптом).The important parameters are the vault name, the vault resource group, and the secret URI (as generated by the previous script). Ниже приведен пример файла параметров.The following section shows an example of a parameter file.

Обновление файла azuredeploy.parameters.jsonUpdate the azuredeploy.parameters.json file

Обновите файл azuredeploy.parameters.json, указав vaultName, URI секрета, VmName и другие параметры для своей среды.Update the azuredeploy.parameters.json file with the vaultName, secret URI, VmName, and other parameters as per your environment. Ниже приведен пример JSON-файла параметров шаблона:The following JSON file shows an example of the template parameters file:

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

Развертывание шаблонаDeploy the template

Разверните шаблон с помощью следующего скрипта PowerShell:Deploy the template by using the following 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>"

При успешном развертывании шаблона выводятся следующие выходные данные:When the template is deployed successfully, it displays the following output:

Результаты развертывания шаблона

При развертывании этой ВМ Azure Stack Hub отправляет на нее сертификат.Azure Stack Hub pushes the certificate to the VM during deployment. Расположение сертификата зависит от операционной системы VM.The certificate location depends on the operating system of the VM:

  • В Windows сертификат добавляется в расположение сертификата LocalMachine с хранилищем сертификатов, предоставленным пользователем.In Windows, the certificate is added to the LocalMachine certificate location, with the certificate store that the user provided.
  • В Linux сертификат размещается в каталоге /var/lib/waagent: файл сертификата X509 с именем UppercaseThumbprint.crt и файл закрытого ключа с именем UppercaseThumbprint.prv.In Linux, the certificate is placed under the /var/lib/waagent directory, with the file name UppercaseThumbprint.crt for the X509 certificate file and UppercaseThumbprint.prv for the private key.

Списание сертификатовRetire certificates

Прекращение использования сертификатов — это часть процесса управления сертификатами.Retiring certificates is part of the certificate management process. Вы не можете удалить более раннюю версию сертификата, но ее можно отключить с помощью командлета Set-AzureKeyVaultSecretAttribute.You can't delete the older version of a certificate, but you can disable it by using the Set-AzureKeyVaultSecretAttribute cmdlet.

В примере ниже показано, как отключить сертификат.The following example shows how to disable a certificate. Для параметров VaultName, Name и Version используйте свои значения.Use your own values for the VaultName, Name, and Version parameters.

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

Дальнейшие действияNext steps