Rotacionando e excluindo uma secret no Azure Key Vault

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:

image

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:

1 Like