Tutorial: proteger um servidor Web em uma máquina virtual do Windows no Azure com certificados TLS armazenados no Key Vault

Aplica-se a: ✔️ VMs do Windows ✔️ Conjuntos de dimensionamento flexíveis

Observação

Atualmente, este documento funciona apenas para imagens generalizadas. Se você tentar este tutorial usando um disco especializado, receberá um erro.

É possível usar um certificado TLS (Transport Layer Security) para criptografar o tráfego da Web a fim de proteger os servidores Web. Os certificados TLS podem ser armazenados no Azure Key Vault e permitem implantações seguras de certificados em VMs (máquinas virtuais) do Windows no Azure. Neste tutorial, você aprenderá a:

  • Crie um Cofre de chaves do Azure.
  • Gerar ou carregar um certificado para o Key Vault.
  • Criar uma VM e instalar o servidor Web do IIS.
  • Inserir o certificado na VM e configurar o IIS com uma associação de TLS.

Iniciar o Azure Cloud Shell

O Azure Cloud Shell é um shell interativo grátis que pode ser usado para executar as etapas neste artigo. Ele tem ferramentas do Azure instaladas e configuradas para usar com sua conta.

Para abrir o Cloud Shell, basta selecionar Abrir Cloud Shell no canto superior direito de um bloco de código. Você também pode iniciar o Cloud Shell em uma guia separada do navegador indo até https://shell.azure.com/powershell. Selecione Copiar para copiar os blocos de código, cole-os no Cloud Shell e depois pressione Enter para executá-los.

Visão geral

O Azure Key Vault protege chaves e segredos criptográficos, como certificados ou senhas. O Key Vault simplifica o processo de gerenciamento de certificados e permite que você mantenha o controle das chaves que acessam esses certificados. É possível criar um certificado autoassinado no Key Vault ou carregar um certificado confiável existente que você já tenha.

Em vez de usar uma imagem de VM personalizada que inclui certificados incorporados, injete certificados em uma VM em execução. Esse processo garante que os certificados mais recentes sejam instalados em um servidor Web durante a implantação. Se você renova ou substitui um certificado, também não precisa criar uma nova imagem de VM personalizada. Os certificados mais recentes são inseridos automaticamente, conforme você cria outras VMs. Durante todo o processo, os certificados nunca deixam a plataforma do Azure ou são expostos em um script, no histórico da linha de comando ou no modelo.

Criar um Cofre de chaves do Azure

Antes de criar um Key Vault e certificados, crie um grupo de recursos com New-AzResourceGroup. O exemplo a seguir cria um grupo de recursos chamado myResourceGroupSecureWeb no local Leste dos EUA:

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

Em seguida, crie um Key Vault com New-AzKeyVault. Cada Key Vault requer um nome exclusivo e deve estar escrito com todas as letras minúsculas. Substitua mykeyvault pelo seu próprio nome exclusivo do Key Vault no exemplo a seguir:

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

Gerar um certificado e armazená-lo no Key Vault

Para uso em produção, você deve importar um certificado válido assinado por um fornecedor confiável com Import-AzKeyVaultCertificate. Para este tutorial, o exemplo a seguir mostra como você pode gerar um certificado autoassinado com Add-AzKeyVaultCertificate, que usa a política de certificado padrão de New-AzKeyVaultCertificatePolicy.

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

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

Criar uma máquina virtual

Defina o nome de usuário e a senha de um administrador para a VM com Get-Credential:

$cred = Get-Credential

Agora você pode criar a VM com New-AzVM. O exemplo a seguir cria uma VM chamada myVM na localização EastUs. Se ainda não existirem, os recursos de rede de suporte serão criados. Para permitir o tráfego seguro da Web, o cmdlet também abre a porta 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"}'

A criação da VM demora alguns minutos. A última etapa usa a Extensão de Script Personalizado do Azure para instalar o servidor Web do IIS com Set-AzVmExtension.

Adicionar um certificado à VM a partir do Key Vault

Para adicionar o certificado a partir do Key Vault para uma VM, obtenha a ID de seu certificado com Get-AzKeyVaultSecret. Adicione o certificado à VM com 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

Configurar o IIS para usar o certificado

Use a Extensão de Script Personalizado novamente com Set-AzVMExtension para atualizar a configuração do IIS. Esta atualização aplica o certificado inserido do Key Vault para o IIS e configura a associação da Web:

$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

Testar o aplicativo Web protegido

Obtenha o endereço IP público da VM com Get-AzPublicIPAddress. O exemplo a seguir obtém o endereço IP para myPublicIP criado anteriormente:

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

Agora, abra um navegador da Web e digite https://<myPublicIP> na barra de endereços. Para aceitar o aviso de segurança se você usou um certificado autoassinado, selecione Detalhes e Prosseguir para a página da Web:

Captura de tela do aviso de segurança do navegador da Web.

Seu site de IIS protegido é exibido, como no exemplo a seguir:

Captura de tela do navegador mostrando o site seguro do IIS.

Próximas etapas

Nesse tutorial, você protegeu um servidor Web do IIS com um certificado TLS armazenado no Azure Key Vault. Você aprendeu a:

  • Crie um Cofre de chaves do Azure.
  • Gerar ou carregar um certificado para o Key Vault.
  • Criar uma VM e instalar o servidor Web do IIS.
  • Inserir o certificado na VM e configurar o IIS com uma associação de TLS.

Para obter exemplos de script de máquina virtual predefinidos, confira: