Руководство. Защита веб-сервера на виртуальной машине Windows в Azure с помощью сертификатов TLS, хранящихся в Key Vault

Область применения: ✔️ Виртуальные машины Windows ✔️ Гибкие масштабируемые наборы

Примечание.

В настоящее время этот документ работает только для обобщенных изображений. При попытке этого руководства с помощью специализированного диска вы получите сообщение об ошибке.

Для защиты веб-серверов можно использовать сертификат TLS для шифрования веб-трафика. Сертификаты TLS можно хранить в Azure Key Vault и разрешать безопасное развертывание сертификатов на виртуальных машинах Windows в Azure. Из этого руководства вы узнаете, как выполнить следующие задачи:

  • Создайте хранилище Azure Key Vault.
  • Создайте или отправьте сертификат в Key Vault.
  • Создайте виртуальную машину и установите веб-сервер IIS.
  • Вставьте сертификат в виртуальную машину и настройте IIS с привязкой TLS.

Запуск Azure Cloud Shell

Azure Cloud Shell — это бесплатная интерактивная оболочка, с помощью которой можно выполнять действия, описанные в этой статье. Она включает предварительно установленные общие инструменты Azure и настроена для использования с вашей учетной записью.

Чтобы открыть Cloud Shell, просто выберите Open Cloudshell в правом верхнем углу блока кода. Cloud Shell можно также запустить в отдельной вкладке браузера, перейдя на страницу https://shell.azure.com/powershell. Выберите "Копировать ", чтобы скопировать блоки кода, вставьте их в Cloud Shell и нажмите клавишу ВВОД, чтобы запустить их.

Обзор

Azure Key Vault защищает криптографические ключи и секреты, в том числе сертификаты и пароли. Key Vault помогает оптимизировать управление сертификатами и позволяет контролировать ключи, которые предоставляют доступ к этим сертификатам. Вы можете создать самозаверяющий сертификат в Key Vault или отправить существующий доверенный сертификат, который вы уже владеете.

Вместо использования пользовательского образа виртуальной машины, включающего сертификаты, внедряйте сертификаты в запущенную виртуальную машину. Этот процесс гарантирует установку на веб-сервер самых последних сертификатов во время развертывания. Если вы обновляете или заменяете сертификат, вам не нужно создавать новый пользовательский образ виртуальной машины. Последняя версия сертификатов автоматически внедряется при создании дополнительных виртуальных машин. При этом сертификат никогда не покидает платформу Azure и не отображается в скрипте, журнале командной строки или шаблоне.

создать Azure Key Vault;

Прежде чем создать хранилище ключей и сертификаты, выполните командлет New-AzResourceGroup, чтобы создать группу ресурсов. В следующем примере создается имя группы ресурсов myResourceGroupSecureWeb в расположении восточная часть США:

$resourceGroup = "myResourceGroupSecureWeb"
$location = "East US"
New-AzResourceGroup -ResourceGroupName $resourceGroup -Location $location

Далее, чтобы создать Key Vault, используйте командлет New-AzKeyVault. Каждому хранилищу ключей требуется уникальное имя и должно быть все нижнее регистр. Замените mykeyvault собственным уникальным именем Key Vault в следующем примере:

$keyvaultName="mykeyvault"
New-AzKeyVault -VaultName $keyvaultName `
    -ResourceGroup $resourceGroup `
    -Location $location `
    -EnabledForDeployment

Создание сертификата и его хранение в Key Vault

Для использования в рабочей среде необходимо импортировать действительный сертификат, подписанный доверенным поставщиком с помощью Import-AzKeyVaultCertificate. В следующем примере показано, как с помощью командлета Add-AzKeyVaultCertificate создать самозаверяющий сертификат, использующий политику сертификата по умолчанию из New-AzreKeyVaultCertificatePolicy.

$policy = New-AzKeyVaultCertificatePolicy `
    -SubjectName "CN=www.contoso.com" `
    -SecretContentType "application/x-pkcs12" `
    -IssuerName Self `
    -ValidityInMonths 12

Add-AzKeyVaultCertificate `
    -VaultName $keyvaultName `
    -Name "mycert" `
    -CertificatePolicy $policy 

Создание виртуальной машины

Укажите имя и пароль администратора для виртуальной машины с помощью командлета Get-Credential:

$cred = Get-Credential

Теперь вы можете создать виртуальную машину с помощью командлета New-AzVM. В следующем примере создается виртуальная машина с именем myVM в расположении EastUS. Если они еще не существуют, создаются вспомогательные сетевые ресурсы. Чтобы разрешить безопасный веб-трафик, командлет также открывает порт 443.

# Create a VM
New-AzVm `
    -ResourceGroupName $resourceGroup `
    -Name "myVM" `
    -Location $location `
    -VirtualNetworkName "myVnet" `
    -SubnetName "mySubnet" `
    -SecurityGroupName "myNetworkSecurityGroup" `
    -PublicIpAddressName "myPublicIpAddress" `
    -Credential $cred `
    -OpenPorts 443

# Use the Custom Script Extension to install IIS
Set-AzVMExtension -ResourceGroupName $resourceGroup `
    -ExtensionName "IIS" `
    -VMName "myVM" `
    -Location $location `
    -Publisher "Microsoft.Compute" `
    -ExtensionType "CustomScriptExtension" `
    -TypeHandlerVersion 1.8 `
    -SettingString '{"commandToExecute":"powershell Add-WindowsFeature Web-Server -IncludeManagementTools"}'

Создание виртуальной машины может занять несколько минут. На последнем шаге с помощью расширения пользовательских сценариев Azure устанавливается веб-сервер IIS. Для этого используется командлет Set-AzVmExtension.

Добавление сертификата на виртуальную машину из Key Vault

Чтобы добавить сертификат из Key Vault на виртуальную машину, получите идентификатор сертификата с помощью командлета Get-AzKeyVaultSecret. Добавьте сертификат на виртуальную машину с помощью командлета Add-AzVMSecret:

$certURL=(Get-AzKeyVaultSecret -VaultName $keyvaultName -Name "mycert").id

$vm=Get-AzVM -ResourceGroupName $resourceGroup -Name "myVM"
$vaultId=(Get-AzKeyVault -ResourceGroupName $resourceGroup -VaultName $keyVaultName).ResourceId
$vm = Add-AzVMSecret -VM $vm -SourceVaultId $vaultId -CertificateStore "My" -CertificateUrl $certURL | Update-AzVM

Настройка IIS для использования сертификата

Обновите конфигурацию IIS с помощью расширения пользовательских сценариев и командлета Set-AzVMExtension. Это обновление применяет внедренный из Key Vault в IIS сертификат и настраивает веб-привязку:

$publicSettings = '{
    "fileUris":["https://raw.githubusercontent.com/Azure-Samples/compute-automation-configurations/master/secure-iis.ps1"],
    "commandToExecute":"powershell -ExecutionPolicy Unrestricted -File secure-iis.ps1"
}'

Set-AzVMExtension -ResourceGroupName $resourceGroup `
    -ExtensionName "IIS" `
    -VMName "myVM" `
    -Location $location `
    -Publisher "Microsoft.Compute" `
    -ExtensionType "CustomScriptExtension" `
    -TypeHandlerVersion 1.8 `
    -SettingString $publicSettings

Тестирование защищенного веб-приложения

Получите общедоступный IP-адрес своей виртуальной машины с помощью командлета Get-AzPublicIPAddress. Следующий пример позволяет получить IP-адрес для созданного ранее myPublicIP.

Get-AzPublicIPAddress -ResourceGroupName $resourceGroup -Name "myPublicIPAddress" | select "IpAddress"

Теперь можно открыть веб-браузер и ввести в адресной строке https://<myPublicIP>. Чтобы принять предупреждение системы безопасности, если используется самозаверяющий сертификат безопасности, выберите Сведения, а затем — Перейти на веб-страницу:

Снимок экрана: предупреждение системы безопасности веб-браузера.

На экране отобразится защищенный веб-сайт IIS, как в показано следующем примере:

Снимок экрана: браузер с безопасным сайтом IIS.

Следующие шаги

В этом руководстве описано, как защитить веб-сервер IIS с сертификатом TLS, хранящимся в Azure Key Vault. Вы научились выполнять следующие задачи:

  • Создайте хранилище Azure Key Vault.
  • Создайте или отправьте сертификат в Key Vault.
  • Создайте виртуальную машину и установите веб-сервер IIS.
  • Вставьте сертификат в виртуальную машину и настройте IIS с привязкой TLS.

Предварительно созданные примеры скриптов виртуальной машины см. в статье: