Tutorial: Proteger um servidor Web em uma máquina virtual Linux no Azure com certificados SSL armazenados no Key VaultTutorial: Secure a web server on a Linux virtual machine in Azure with SSL certificates stored in Key Vault

Para proteger servidores Web, pode ser utilizado um certificado SSL (Secure Sockets Layer) para encriptar o tráfego da Web.To secure web servers, a Secure Sockets Layer (SSL) certificate can be used to encrypt web traffic. Estes certificados SSL podem ser armazenados no Azure Key Vault e permitir implementações seguras de certificados para máquinas virtuais (VMs) com Linux no Azure.These SSL certificates can be stored in Azure Key Vault, and allow secure deployments of certificates to Linux virtual machines (VMs) in Azure. Neste tutorial, ficará a saber como:In this tutorial you learn how to:

  • Criar um Azure Key VaultCreate an Azure Key Vault
  • Gerar ou carregar um certificado para o Key VaultGenerate or upload a certificate to the Key Vault
  • Criar uma VM e instalar o servidor Web NGINXCreate a VM and install the NGINX web server
  • Inserir o certificado na VM e configurar o NGINX com um enlace SSLInject the certificate into the VM and configure NGINX with an SSL binding

Utilizar o Azure Cloud ShellUse Azure Cloud Shell

O Azure hospeda Azure Cloud Shell, um ambiente de shell interativo que você pode usar por meio de seu navegador.Azure hosts Azure Cloud Shell, an interactive shell environment that you can use through your browser. Cloud Shell permite que você use bash o PowerShell ou o para trabalhar com os serviços do Azure.Cloud Shell lets you use either bash or PowerShell to work with Azure services. Você pode usar os comandos pré-instalados Cloud Shell para executar o código neste artigo sem precisar instalar nada em seu ambiente local.You can use the Cloud Shell pre-installed commands to run the code in this article without having to install anything on your local environment.

Para iniciar o Azure Cloud Shell:To launch Azure Cloud Shell:

OpçãoOption Exemplo/linkExample/Link
Selecione Experimentar no canto superior direito de um bloco de código.Select Try It in the upper-right corner of a code block. A seleção de try não copia automaticamente o código para Cloud Shell.Selecting Try It doesn't automatically copy the code to Cloud Shell. Exemplo de teste para Azure Cloud Shell
Vá para https://shell.azure.com ou selecione o botão Iniciar Cloud Shell para abrir Cloud Shell em seu navegador.Go to https://shell.azure.com or select the Launch Cloud Shell button to open Cloud Shell in your browser. Iniciar Cloud Shell em uma nova janelaLaunch Cloud Shell in a new window
Selecione o botão Cloud Shell na barra de menus superior direita na portal do Azure.Select the Cloud Shell button on the top-right menu bar in the Azure portal. Botão Cloud Shell no portal do Azure

Para executar o código neste artigo em Azure Cloud Shell:To run the code in this article in Azure Cloud Shell:

  1. Abra o Cloud Shell.Open Cloud Shell.
  2. Selecione o botão copiar em um bloco de código para copiar o código.Select the Copy button on a code block to copy the code.
  3. Cole o código na sessão de Cloud shell com Ctrl+Shift+v no Windows e Linux, ou cmd+Shift+v no MacOS.Paste the code into the Cloud Shell session with Ctrl+Shift+V on Windows and Linux, or Cmd+Shift+V on macOS.
  4. Pressione Enter para executar o código.Press Enter to run the code.

Se optar por instalar e utilizar a CLI localmente, este tutorial requer que execute uma versão da CLI do Azure que seja a 2.0.30 ou posterior.If you choose to install and use the CLI locally, this tutorial requires that you are running the Azure CLI version 2.0.30 or later. Executar az --version para localizar a versão.Run az --version to find the version. Se precisar de instalar ou atualizar, veja Instalar a CLI do Azure.If you need to install or upgrade, see Install Azure CLI.

Descrição geralOverview

O Azure Key Vault salvaguarda as chaves criptográficas e os segredos, como os certificados ou as palavras-passe.Azure Key Vault safeguards cryptographic keys and secrets, such as certificates or passwords. 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.Key Vault helps streamline the certificate management process and enables you to maintain control of keys that access those certificates. Pode criar um certificado autoassinado no Key Vault ou carregar um certificado fidedigno que já possui.You can create a self-signed certificate inside Key Vault, or upload an existing, trusted certificate that you already own.

Em vez de utilizar uma imagem de VM personalizada, que inclua certificados integrados, pode inserir certificados numa VM em execução.Rather than using a custom VM image that includes certificates baked-in, you inject certificates into a running VM. Este processo garante que são instalados os certificados mais atualizados num servidor Web durante a implementação.This process ensures that the most up-to-date certificates are installed on a web server during deployment. Se renovar ou substituir um certificado, também não tem de criar uma nova imagem de VM personalizada.If you renew or replace a certificate, you don't also have to create a new custom VM image. Os certificados mais recentes são inseridos automaticamente à medida que cria VMs adicionais.The latest certificates are automatically injected as you create additional 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.During the whole process, the certificates never leave the Azure platform or are exposed in a script, command-line history, or template.

Criar um Azure Key VaultCreate an Azure Key Vault

Para poder criar um Key Vault e certificados, crie primeiro um grupo de recursos com az group create.Before you can create a Key Vault and certificates, create a resource group with az group create. O exemplo seguinte cria um grupo de recursos com o nome myResourceGroupSecureWeb na localização eastus:The following example creates a resource group named myResourceGroupSecureWeb in the eastus location:

az group create --name myResourceGroupSecureWeb --location eastus

Em seguida, crie um Key Vault com az keyvault create e ative-o para utilização quando implementar uma VM.Next, create a Key Vault with az keyvault create and enable it for use when you deploy a VM. Cada Key Vault requer um nome exclusivo com todas as letras minúsculas.Each Key Vault requires a unique name, and should be all lowercase. Substitua<mykeyvault > no exemplo a seguir por seu próprio nome de Key Vault exclusivo:Replace <mykeyvault> in the following example with your own unique Key Vault name:

keyvault_name=<mykeyvault>
az keyvault create \
    --resource-group myResourceGroupSecureWeb \
    --name $keyvault_name \
    --enabled-for-deployment

Gerar um certificado e armazená-lo no Key VaultGenerate a certificate and store in Key Vault

Para efeitos de produção, deve importar um certificado válido assinado por um fornecedor fidedigno com az keyvault certificate import.For production use, you should import a valid certificate signed by trusted provider with az keyvault certificate import. Para este tutorial, o exemplo seguinte mostra como pode gerar um certificado autoassinado com az keyvault certificate create que utiliza a política de certificado predefinida:For this tutorial, the following example shows how you can generate a self-signed certificate with az keyvault certificate create that uses the default certificate policy:

az keyvault certificate create \
    --vault-name $keyvault_name \
    --name mycert \
    --policy "$(az keyvault certificate get-default-policy)"

Preparar um certificado para utilização numa VMPrepare a certificate for use with a VM

Para utilizar o certificado durante o processo de criação da VM, obtenha o ID do certificado com az keyvault secret list-versions.To use the certificate during the VM create process, obtain the ID of your certificate with az keyvault secret list-versions. Converta o certificado com az vm secret format.Convert the certificate with az vm secret format. O exemplo seguinte atribui o resultado destes comandos a variáveis para uma utilização mais fácil nos passos que se seguem:The following example assigns the output of these commands to variables for ease of use in the next steps:

secret=$(az keyvault secret list-versions \
          --vault-name $keyvault_name \
          --name mycert \
          --query "[?attributes.enabled].id" --output tsv)
vm_secret=$(az vm secret format --secrets "$secret" -g myResourceGroupSecureWeb --keyvault $keyvault_name)

Criar uma configuração cloud-init para proteger o NGINXCreate a cloud-init config to secure NGINX

Cloud-init é uma abordagem amplamente utilizada para personalizar uma VM com Linux quando arranca pela primeira vez.Cloud-init is a widely used approach to customize a Linux VM as it boots for the first time. Pode utilizar o cloud-init para instalar pacotes e escrever ficheiros ou para configurar utilizadores e segurança.You can use cloud-init to install packages and write files, or to configure users and security. Como o cloud-init é executado durante o processo de arranque inicial, não existem passos adicionais ou agentes necessários a aplicar à configuração.As cloud-init runs during the initial boot process, there are no additional steps or required agents to apply your configuration.

Quando criar uma VM, os certificados e as chaves são armazenados no diretório /var/lib/waagent/ protegido.When you create a VM, certificates and keys are stored in the protected /var/lib/waagent/ directory. Para automatizar a adição do certificado à VM e configurar o servidor Web, utilize o cloud-init.To automate adding the certificate to the VM and configuring the web server, use cloud-init. Neste exemplo, vai instalar e configurar o servidor Web NGINX.In this example, you install and configure the NGINX web server. Pode utilizar o mesmo processo para instalar e configurar o Apache.You can use the same process to install and configure Apache.

Crie um ficheiro com o nome cloud-init-web-server.txt e cole a seguinte configuração:Create a file named cloud-init-web-server.txt and paste the following configuration:

#cloud-config
package_upgrade: true
packages:
  - nginx
write_files:
  - owner: www-data:www-data
  - path: /etc/nginx/sites-available/default
    content: |
      server {
        listen 443 ssl;
        ssl_certificate /etc/nginx/ssl/mycert.cert;
        ssl_certificate_key /etc/nginx/ssl/mycert.prv;
      }
runcmd:
  - secretsname=$(find /var/lib/waagent/ -name "*.prv" | cut -c -57)
  - mkdir /etc/nginx/ssl
  - cp $secretsname.crt /etc/nginx/ssl/mycert.cert
  - cp $secretsname.prv /etc/nginx/ssl/mycert.prv
  - service nginx restart

Criar uma VM seguraCreate a secure VM

Agora, crie uma VM com az vm create.Now create a VM with az vm create. Os dados do certificado são inseridos a partir do Key Vault com o parâmetro --secrets.The certificate data is injected from Key Vault with the --secrets parameter. Transmite a configuração de cloud-init com o parâmetro --custom-data:You pass in the cloud-init config with the --custom-data parameter:

az vm create \
    --resource-group myResourceGroupSecureWeb \
    --name myVM \
    --image UbuntuLTS \
    --admin-username azureuser \
    --generate-ssh-keys \
    --custom-data cloud-init-web-server.txt \
    --secrets "$vm_secret"

Demora alguns minutos até a VM ser criada, os pacotes serem instalados e a aplicação ser iniciada.It takes a few minutes for the VM to be created, the packages to install, and the app to start. Quando a VM tiver sido criada, tome nota do publicIpAddress apresentado pela CLI do Azure.When the VM has been created, take note of the publicIpAddress displayed by the Azure CLI. Este endereço é utilizado para aceder ao seu site num browser.This address is used to access your site in a web browser.

Para permitir que o tráfego da Web seguro aceda à VM, abra a porta 443 a partir da Internet com az vm open-port:To allow secure web traffic to reach your VM, open port 443 from the Internet with az vm open-port:

az vm open-port \
    --resource-group myResourceGroupSecureWeb \
    --name myVM \
    --port 443

Testar a aplicação Web seguraTest the secure web app

Agora você pode abrir um navegador da Web e digitar https/:/<publicIpAddress > na barra de endereços.Now you can open a web browser and enter https://<publicIpAddress> in the address bar. Forneça o seu próprio endereço IP público a partir do processo de criação da VM.Provide your own public IP address from the VM create process. Aceite o aviso de segurança se utilizou um certificado autoassinado:Accept the security warning if you used a self-signed certificate:

Aceitar o aviso de segurança do browser

O site NGINX protegido é apresentado como no exemplo seguinte:Your secured NGINX site is then displayed as in the following example:

Ver site NGINX seguro em execução

Passos SeguintesNext steps

Neste tutorial, protegeu um servidor Web NGINX com um certificado SSL armazenado no Azure Key Vault.In this tutorial, you secured an NGINX web server with an SSL certificate stored in Azure Key Vault. Aprendeu a:You learned how to:

  • Criar um Azure Key VaultCreate an Azure Key Vault
  • Gerar ou carregar um certificado para o Key VaultGenerate or upload a certificate to the Key Vault
  • Criar uma VM e instalar o servidor Web NGINXCreate a VM and install the NGINX web server
  • Inserir o certificado na VM e configurar o NGINX com um enlace SSLInject the certificate into the VM and configure NGINX with an SSL binding

Siga esta ligação para ver os exemplos de scripts de máquina virtual pré-criados.Follow this link to see pre-built virtual machine script samples.