Tutorial: Fixe um servidor web numa máquina virtual do Windows em Azure com certificados TLS/SSL armazenados no Cofre de Chaves

Nota

Atualmente este doc só funciona para imagens generalizadas. Se tentar este tutorial utilizando um disco especializado, receberá um erro.

Para proteger servidores web, um Segurança da Camada de Transporte (TLS), anteriormente conhecido como Secure Sockets Layer (SSL), o certificado pode ser usado para encriptar o tráfego web. Estes certificados TLS/SSL podem ser armazenados no Cofre da Chave Azure e permitem a implementação segura de certificados para máquinas virtuais Windows (VMs) em Azure. Neste tutorial, ficará a saber como:

  • Criar um Azure Key Vault
  • Gerar ou carregar um certificado para o Key Vault
  • Criar uma VM e instalar o servidor Web IIS
  • Injetar o certificado no VM e configurar o IIS com uma ligação 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 o Cloud Shell, basta selecionar Experimente no canto superior direito de um bloco de código. Também pode lançar cloud Shell num separador de navegador indo para https://shell.azure.com/powershell . Selecione Copiar para copiar os blocos de código, cole-o no Cloud Shell e prima Enter para executá-lo.

Descrição Geral

O Azure Key Vault salvaguarda as chaves criptográficas e os segredos, como certificados ou 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 no Key Vault ou carregar um certificado fidedigno que já possui.

Em vez de utilizar uma imagem de VM personalizada, que inclua certificados integrados, pode inserir 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 inseridos automaticamente à medida que cria VMs adicionais. 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 criar um Cofre-Chave e certificados, crie um grupo de recursos com o 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 um Cofre-Chave com New-AzKeyVault. Cada Key Vault requer um nome exclusivo com todas as letras minúsculas. Substitua mykeyvault no exemplo seguinte pelo seu próprio nome exclusivo do Key Vault:

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

Gerar um certificado e armazená-lo no Key Vault

Para uso de produção, deve importar um certificado válido assinado por fornecedor fidedigno com Import-AzKeyVaultCertificate. Para este tutorial, o exemplo a seguir mostra como pode gerar um certificado auto-assinado com Add-AzKeyVaultCertificate que utiliza a política de certificados predefinidos da 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 o VM com New-AzVM. O exemplo seguinte cria uma VM com o nome myVM na localização EastUS. Se não existirem já, são criados os recursos de rede de apoio. 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 Azure para instalar o servidor web IIS com Set-AzVmExtension.

Adicionar um certificado do Key Vault à VM

Para adicionar o certificado do Key Vault a um VM, obtenha a identificação do seu certificado com a Get-AzKeyVaultSecret. Adicione o certificado ao 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 -ResourceGroupName $resourceGroup -VM $vm

Configurar o IIS para utilizar o certificado

Utilize novamente a extensão de script personalizada com a extensão de 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 do seu 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:

Aceitar o aviso de segurança do browser

O site IIS protegido é apresentado como no exemplo seguinte:

Ver site IIS seguro em execução

Passos seguintes

Neste tutorial, você garantiu um servidor web IIS com um certificado TLS/SSL armazenado no Cofre da Chave Azure. Aprendeu a:

  • Criar um Azure Key Vault
  • Gerar ou carregar um certificado para o Key Vault
  • Criar uma VM e instalar o servidor Web IIS
  • Injetar o certificado no VM e configurar o IIS com uma ligação TLS

Siga esta ligação para ver os exemplos de scripts de máquina virtual pré-criados.