Tutorial: Proteger um servidor Web numa máquina virtual do Windows no Azure com certificados TLS armazenados no Key Vault

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

Nota

Atualmente, este documento só funciona para Imagens generalizadas. Se tentar este tutorial com um disco Especializado, receberá um erro.

Para proteger servidores Web, pode ser utilizado um certificado TLS (Transport Layer Security) para encriptar o tráfego da Web. Os certificados TLS podem ser armazenados no Azure Key Vault e permitir implementações seguras de certificados em máquinas virtuais (VMs) do Windows no Azure. Neste tutorial, ficará a saber como:

  • Criar um Key Vault do Azure.
  • Gerar ou carregar um certificado para o Key Vault.
  • Crie uma VM e instale o servidor Web do IIS.
  • Injete o certificado na VM e configure o IIS com um enlace TLS.

Iniciar o Azure Cloud Shell

O Azure Cloud Shell é um shell interativo gratuito que pode utilizar para executar os passos neste artigo. Tem as ferramentas comuns do Azure pré-instaladas e configuradas para utilização com a sua conta.

Para abrir a Cloud Shell, basta selecionar Abrir Cloudshell no canto superior direito de um bloco de código. Também pode iniciar o Cloud Shell num separador do browser separado ao aceder a https://shell.azure.com/powershell. Selecione Copiar para copiar os blocos de código, cole-os na Cloud Shell e prima Enter para executá-los.

Descrição Geral

O Azure Key Vault salvaguarda as chaves criptográficas e os segredos, como os certificados ou as palavras-passe. O Key Vault ajuda a simplificar o processo de gestão de chaves e permite-lhe manter o controlo das chaves que acedem a esses certificados. Pode criar um certificado autoassinado dentro de Key Vault ou pode carregar um certificado fidedigno existente que já possua.

Em vez de utilizar uma imagem de VM personalizada que inclui certificados integrados, injete certificados numa VM em execução. Este processo garante que são instalados os certificados mais atualizados num servidor Web durante a implementação. Se renovar ou substituir um certificado, também não tem de criar uma nova imagem de VM personalizada. Os certificados mais recentes são automaticamente injetados à medida que cria mais VMs. Durante todo o processo, os certificados nunca saem da plataforma do Azure nem são expostos num script, histórico de linha de comandos ou modelo.

Criar um Azure Key Vault

Antes de poder criar um Key Vault e certificados, crie um grupo de recursos com New-AzResourceGroup. O exemplo seguinte cria um grupo de recursos com o nome myResourceGroupSecureWeb na localização E.U.A. Leste:

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

Em seguida, crie uma Key Vault com New-AzKeyVault. Cada Key Vault requer um nome exclusivo e deve ser em minúsculas. Substitua pelo mykeyvault seu próprio nome de Key Vault exclusivo no exemplo seguinte:

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

Gerar um certificado e armazená-lo no Key Vault

Para utilização em produção, deve importar um certificado válido assinado por um fornecedor fidedigno com Import-AzKeyVaultCertificate. Neste tutorial, o exemplo seguinte mostra como pode gerar um certificado autoassinado com Add-AzKeyVaultCertificate que utiliza a política de certificado predefinida 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

Definir um nome de utilizador e palavra-passe de administrador para a VM com Get-Credential:

$cred = Get-Credential

Agora, pode criar a VM com New-AzVM. O exemplo seguinte cria uma VM com o nome myVM na localização EastUS. Se ainda não existirem, são criados os recursos de rede de suporte. Para permitir um tráfego Web seguro, 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"}'

Demora alguns minutos até que a VM seja criada. O último passo utiliza a Extensão de Script Personalizado do Azure para instalar o servidor Web do IIS com Set-AzVmExtension.

Adicionar um certificado do Key Vault à VM

Para adicionar o certificado de Key Vault a uma VM, obtenha o ID do 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 utilizar o certificado

Utilize novamente a Extensão de Script Personalizado com Set-AzVMExtension para atualizar a configuração do IIS. Esta atualização aplica o certificado injetado do Key Vault para o IIS e configura o enlace 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 a aplicação Web segura

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

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

Agora, pode abrir um browser e introduzir https://<myPublicIP> na barra de endereço. Para aceitar o aviso de segurança se tiver utilizado um certificado autoassinado, selecione Detalhes e, em seguida Aceda à página Web:

Captura de ecrã do aviso de segurança do browser.

O site IIS protegido é apresentado como no exemplo seguinte:

Captura de ecrã do browser a mostrar o site do IIS seguro.

Passos seguintes

Neste tutorial, garantiu um servidor Web IIS com um certificado TLS armazenado no Azure Key Vault. Aprendeu a:

  • Criar um Key Vault do Azure.
  • Gerar ou carregar um certificado para o Key Vault.
  • Crie uma VM e instale o servidor Web do IIS.
  • Injete o certificado na VM e configure o IIS com um enlace TLS.

Para obter exemplos de scripts de máquinas virtuais pré-criados, veja: