Export/Import de dados entre 2 Vault utilizando o Medusa

Este é o terceiro post da série sobre o vault. Você pode ver os posts anteriores clicando nos links a seguir:

Obrigado Filipe Maia, André Luis Soares e Kleberson Sartori pelo apoio no dia a dia e compartilhamento do conhecimento com o Vault.

Sobre o Medusa

O Medusa é uma ferramenta projetada para auxiliar na exportação e importação dos dados do Vault. Ela tem a capacidade de exportar e importar todas as credenciais salvas para um único arquivo JSON ou YAML.

Para instalar o binário medusa, acesse a página de releases https://github.com/jonasvinther/medusa/releases e baixe o arquivo zip referente ao sistema operacional que está utilizando.

Descompacte o arquivo de download do medusa e acesse o diretório descompactado.

Mais informações sobre a execução podem ser obtidas com os comandos:

./medusa -h
./medusa export -h
./medusa import -h

Mais instruções e exemplos sobre a execução do medusa estão na página inicial da ferramenta: https://github.com/jonasvinther/medusa/blob/main/README.md

Export

Abra 2 abas do terminal.

Na primeira aba do terminal, acesse o cluster Kubernetes que tem o Vault de origem instalado.

Em seguida, crie um port-forward para vault com o seguinte comando:

 kubectl port-forward svc/vault 8200:8200 -n vault

Na segunda aba do terminal, acesse o diretório em que está o binário medusa e exporte os dados usando o seguinte comando:

./medusa export boss --address="<http://127.0.0.1:8200>" --token="CHANGE_HERE" --insecure --format=json > "$HOME/vault_export_$(date +%Y%m%d).json"

Acesse o arquivo gerado e valide/altere os dados de acordo com a necessidade.

Import

Abra 2 abas do terminal.

Na primeira aba do terminal, acesse o cluster Kubernetes que tem o Vault de destino instalado.

Em seguida, crie um port-forward para vault com o seguinte comando:

kubectl port-forward svc/vault 8200:8200 -n vault

Na segunda aba do terminal, acesse o diretório em que está o binário medusa e importe os dados usando o seguinte comando:

./medusa import CHANGE_PATH_SECRET "CHANGE_FILE_NAME.json" --address="<http://127.0.0.1:8200>" --token="CHANGE_HERE" --insecure

Acesse a interface web do vault na URL: http://localhost:8200 e valide a criação dos dados.

Criando o path de secret e ACL, caso não exista no vault antes da importação

Caso o Vault de destino que você irá importar as secrets seja uma instalação do zero, provavelmente o path de secret não existirá. Ele pode ser criado com as instruções abaixo.

Abra 1 aba do terminal e acesse o cluster Kubernetes que tem o Vault de destino instalado.

Em seguida, crie um port-forward para vault com o seguinte comando:

kubectl port-forward svc/vault 8200:8200 -n vault

No navegador web, acesse a URL http://localhost:8200 e faça o login com o token root.

Clique em Secrets Engines. Em seguida, clique em Enable new engine.

Na seção Generic, clique em KV.

No campo Path, digite o nome do path de secret. No campo Maximum number of versions, informe 50. Se deixar o valor 0 ou não informar nada, o vault manterá apenas as 10 primeiras alterações de cada secret cadastrada e automaticamente removerá as demais.

Agora crie uma ACL Policy no vault. Essa ACL deverá ter o nome que você já tem no vault de origem e será usada para definir a permissão de acesso a cada path de secret cadastrada no Vault de destino e que será usada pelas aplicações.

Faça login no vault com os seguintes comandos:

export VAULT_ADDR=http://127.0.0.1:8200

vault login

Crie a ACL Policy com os seguintes comandos:

cat <<EOF > vault_acl_policy.hcl
path "*" {
    capabilities = ["read"]
}
EOF

vault policy write CHANGE_PATH_SECRET vault_acl_policy.hcl

Agora você pode voltar a seção Import para continuar com a importação dos dados.

Gerenciando usuários e policies no vault

Os links abaixo ensinam como cadastrar usuários e policies no vault, bem como exportar policies existentes de um vault.

Primeiro habilite o método de autenticação userpass com o seguinte comando.

vault auth enable userpass

Crie um novo usuário com o seguinte comando:

vault write auth/userpass/users/CHANGE_USER password=CHANGE_PASSWORD policies=CHANGE_USER

Crie a ACL Policy com o nome de cada usuário com os seguintes comandos:

cat <<EOF > vault_users_acl_policy.hcl
path "CHANGE_PATH_SECRET/metadata/+" {
  capabilities = ["list"]
}
path "CHANGE_PATH_SECRET/data/*" {
  capabilities = ["list", "create", "update", "patch", "read"]
}
EOF

vault policy write CHANGE_USER_NAME vault_users_acl_policy.hcl

Se precisar trocar a senha de um usuário existente, use o comando:

vault write auth/userpass/users/CHANGE_USER password=CHANGE_NEW_PASSWORD

Para testar o login com o novo usuário pode ser o login com o seguinte comando.

vault login -method=userpass username=CHANGE_USER password=CHANGE_PASSWORD

Na interface web lembre-se de trocar a opção de autenticação de token para username.

Referências

Categories: , , , ,

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *