DEV Community

Ana Carolina Manzan
Ana Carolina Manzan

Posted on

Automatizando a inclusão de certificados ao Key Vault usando Azure DevOps Secure Files com Terraform

Image description

Ao trabalharmos com certificados de autoridade certificadora, quando por exemplo, configuramos o SSL no Azure Application Gateway ou no Azure API Management, podemos nos deparar com a necessidade de adicionar os certificados ao Azure Key Vault. Neste artigo, veremos um método de adicionar os certificados automaticamente ao Key Vault, sem a necessidade de intervenções manuais que podem causar interrupções no processo de automação. Para alcançarmos este objetivo, vamos utilizar o Secure Files do Azure DevOps e Terraform.

Configurações no Azure DevOps

Vamos trabalhar com um cenário onde já temos um um certificado no formato .pfx e uma senha para o certificado. Para começar, vamos fazer o upload do nosso certificado na seção Secure Files do Azure DevOps. Acesse https://dev.azure.com/<nome_da_organizacao>/<nome_do_projeto>/_library?itemType=SecureFiles

Image description

Como na imagem acima, clique no botão + Secure File para fazer o upload do seu certificado. Para o exemplo do artigo, criei um dummy certificate (veja como criar aqui ou aqui) com o nome certificate.pfx, fiz o upload para o Secure Files e renomeei o arquivo para certificate (Removi a extensão .pfx do arquivo para facilitar o uso do nome do certificado em variáveis).

Depois de realizar o upload, acesse o arquivo do certificado para dar permissão à pipeline na qual você deseja usá-lo. Siga os passos conforme a imagem:

Image description

Como faremos o deployment da infraestrutura através de uma pipeline yaml, vamos adicionar duas variáveis ao grupo de variáveis que vamos utilizar para este artigo: CERTIFICATE_NAME e CERTIFICATE_PASSWORD.

Image description

Código Terraform

Vamos agora trazer o código terraform para a criação do Key Vault.
No código abaixo, temos a criação do Key Vault contendo políticas de acesso que vão permitir que a nossa Service Principal crie (Create), importe (Import) e obtenha (Get) certificados.

Além disso, no bloco azurerm_key_vault_certificate temos a criação do certificado em si, obtendo o conteúdo do certificado através da função filebase64 e da variável certificate_path que contém o caminho para o arquivo do certificado.

Pipeline

Na pipeline, precisamos realizar o download do arquivo do certificado que está dentro do Secure Files. Para isso, usaremos a tarefa DownloadSecureFile@1. Esta é uma tarefa relativamente simples, que recupera um arquivo do Secure Files a partir do seu nome.

Neste bloco de código, podemos observar que a tarefa tem dois parâmetros importantes: name e secureFile (dentro do bloco inputs).
O parâmetro name vai nos servir como uma variável para obter as saídas da tarefa (como o caminho para onde o arquivo foi baixado, por exemplo).
Já o parâmetro secureFile vai receber o valor da variável CERTIFICATE_NAME que criamos anteriormente no nosso grupo de variáveis.

Já na tarefa que executa o comando terraform apply, como vemos acima, vamos passar o caminho do certificado para a variável certificate_path utilizando o mesmo valor do parâmetro name da tarefa DownloadSecureFile@1, e referenciando o valor de saída com o .secureFilePath. Neste exemplo, o resultado é $(certificate_secure_file.secureFilePath).

Excluindo o arquivo do certificado

Podemos realizar a exclusão do arquivo do certificado de dentro do agente de deployment usando a tarefa DeleteFiles@1. Esta tarefa faz a exclusão de arquivos e/ou pastas a partir do caminho apontado a ela no parâmetro Contents. Aqui também vamos utilizar a variável $(certificate_secure_file.secureFilePath) para garantir que depois de utilizado pelo terraform, o nosso certificado será excluído do agente.

Você pode encontrar o código completo do exemplo deste artigo aqui.

Este é artigo traduzido e adaptado do artigo original escrito por T. Constantini.

Top comments (0)