Primeiramente, você precisará de um dispositivo intermidiário para enviar as requisições ao ambiente da Azure. Em meu caso, utilizei um Debian 10.
Para que seja possível comunicação com a Azure é necessário realizarmos a instalação de seu CLI, para isso, siga o passo a passo oficial do fornecedor:
Por questões de segurança, não recomendamos que a autenticação do Cli com a Azure seja feita com autenticação básica. Sendo assim, iremos utilizar como método de autenticação uma aplicação criada na Azure. Siga os passos abaixo para criar uma:
Atualizando ou criando uma nova secret através do DevOps Secret Manager
Temos a seguinte configuração abaixo, onde “mysecret2” é o nome de meu segredo e AZURE_VAULT, AZURE_APP_ID, AZURE_APP_SECRET, AZURE_TENANT são dados necessários para autenticação na Azure via cli que devem ser utilizados no template.
Criando a automação
Teremos duas automações, uma que irá atualizar o valor da secret na Azure sempre que minha secret for alterada e outra que irá apagar a secret na Azure quando a mesma for inativada no senhasegura.
Como trigger de atualização temos:
A mesma lógica deve ser seguida para inativação, porém inserindo o item abaixo:
Templates para ações
Template para atualização/rotação ou criação:
# Settings
set-connect-timeout 10
set-read-timeout 20
# Define english as default language
expect "*$"
exec "export LC_ALL=C"
# Login Azure Vault with the service account
expect "*$"
exec "az login --service-principal --username [#AZURE_APP_ID#] --password [#AZURE_APP_SECRET#] --tenant [#AZURE_TENANT#]"
# Create a file with the secret data
expect "*$"
exec "echo [#SECRET_DATA#] > .secret.json"
# Create or rotate the secret
expect "*$"
exec "az keyvault secret set --name [#SECRET_IDENTIFIER#] --vault-name [#AZURE_VAULT#] --file .secret.json --encoding base64"
# Delete secret file
expect "*$"
exec "rm .secret.json"
# Logout
expect "*$"
exec "az logout --username [#AZURE_APP_ID#]"
expect "*$"
exec "exit"
Template para exclusão:
# Settings
set-connect-timeout 10
set-read-timeout 20
# Define english as default language
expect "*$"
exec "export LC_ALL=C"
# Login Azure Vault with the service account
expect "*$"
exec "az login --service-principal --username [#AZURE_APP_ID#] --password [#AZURE_APP_SECRET#] --tenant [#AZURE_TENANT#]"
# Delete the secret
expect "*$"
exec "az keyvault secret delete --name [#SECRET_IDENTIFIER#] --vault-name [#AZURE_VAULT#]"
# Logout
expect "*$"
exec "az logout --username [#AZURE_APP_ID#]"
expect "*$"
exec "exit"
IMPORTANTE: Os valores de tags equivalem ao valores preenchidos no cadastro da secret, onde secret name representa a secret e o identificador meu Azure Vault.
Exemplos
Resultado ao rotacionar uma secret:
Exclusão de uma secret: