Развертывание VM с сертификатом, безопасно хранящимся в Azure Stack Hub
В этой статье описано, как развернуть виртуальную машину (VM) Azure Stack Hub с установленным сертификатом Key Vault.
Общие сведения
Сертификаты используются во многих сценариях, например для аутентификации в Active Directory или шифрования веб-трафика. Вы можете безопасно хранить сертификаты в виде секретов в хранилище ключей Azure Stack Hub. Хранилище ключей Azure Stack обеспечивает следующие преимущества:
- сертификаты не предоставляются в скриптах, журналах командной строки или шаблонах;
- упрощенное управление сертификатами;
- возможность управлять ключами, используемыми для доступа к сертификатам.
Описание процесса
Ниже представлены шаги, которые необходимо предпринять для отправки сертификата на VM.
- Создайте секрет хранилища ключей.
- Обновите файл azuredeploy.parameters.json .
- Разверните шаблон.
Примечание
Эти шаги можно выполнить из Пакета средств разработки Azure Stack (ASDK) или из внешнего клиента при подключении через VPN.
Предварительные требования
- Необходимо подписаться на предложение, включающее службу Key Vault.
- Установка PowerShell для Azure Stack Hub.
- Подключение к Azure Stack Hub в роли пользователя с помощью PowerShell.
Создание секрета хранилища ключей
Следующий скрипт создает сертификат в формате PFX, создает хранилище ключей и сохраняет в нем сертификат в качестве секрета. Параметр contentType
секрета должен иметь значение pfx
.
Важно!
Используйте параметр -EnabledForDeployment
при создании хранилища ключей. Благодаря этому параметру на хранилище ключей можно ссылаться из шаблонов 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
В результате выполнения этого скрипта был выведен URI секрета. Запишите этот универсальный код ресурса (URI) так как на него необходимо указать ссылку при отправке сертификата в шаблон Resource Manager для Windows. Скачайте папку шаблона vm-push-certificate-windows template на компьютер разработчика. В этой папке содержатся файлы azuredeploy.json и azuredeploy.parameters.json, которые требуются в следующих шагах.
Измените файл azuredeploy.parameters.json в соответствии со значениями своей среды. К важным параметрам относятся имя хранилища, группа ресурсов хранилища и URI секрета (сгенерированный предыдущим скриптом). Ниже приведен пример файла параметров.
Обновление файла azuredeploy.parameters.json
Обновите файл azuredeploy.parameters.json, указав vaultName
, URI секрета, VmName
и другие параметры для своей среды. Ниже приведен пример JSON-файла параметров шаблона:
{
"$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"
}
}
}
Развертывание шаблона
Разверните шаблон с помощью следующего скрипта 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>"
При успешном развертывании шаблона выводятся следующие выходные данные:
При развертывании этой ВМ Azure Stack Hub отправляет на нее сертификат. Расположение сертификата зависит от операционной системы VM.
- В Windows сертификат добавляется в расположение сертификата LocalMachine с хранилищем сертификатов, предоставленным пользователем.
- В Linux сертификат размещается в каталоге /var/lib/waagent: файл сертификата X509 с именем UppercaseThumbprint.crt и файл закрытого ключа с именем UppercaseThumbprint.prv.
Списание сертификатов
Прекращение использования сертификатов — это часть процесса управления сертификатами. Вы не можете удалить более раннюю версию сертификата, но ее можно отключить с помощью командлета Set-AzureKeyVaultSecretAttribute
.
В примере ниже показано, как отключить сертификат. Для параметров VaultName
, Name
и Version
используйте свои значения.
Set-AzureKeyVaultSecretAttribute -VaultName contosovault -Name servicecert -Version e3391a126b65414f93f6f9806743a1f7 -Enable 0