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

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

Примечание

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

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

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

Запуск Azure Cloud Shell

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

Чтобы открыть Cloud Shell, просто выберите Открыть 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. Каждому Key Vault требуется уникальное имя и должно быть указано в нижнем регистре. Замените 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.
  • Создайте виртуальную машину и установите веб-сервер IIS.
  • Вставьте сертификат в виртуальную машину и настройте IIS с помощью привязки TLS.

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