Monitoramento do servidor do Enterprise Password Vault (CyberArk)
Olá, neste artigo irei explicar como podemos monitorar os recursos computacionais do servidor do Vault da CyberArk.
Ao utilizar a solução PAM (PRIVILEGED ACCESS MANAGER) da CyberArk, temos um servidor onde são instalados os serviços que constituem o nosso Vault. Este servidor passa por um processo de Hardening, onde uma série de configurações restritivas é realizada por questões de segurança. Com isto, o nosso servidor passa a utilizar apenas algumas portas de entrada para a comunicação com os demais componentes que constituem a solução. Tais portas podem ser vistas na documentação oficial em: Standard Vault Ports and Protocols | CyberArk Docs Além disso não é recomendado pelo fabricante a instalação de qualquer agente de monitoramento neste servidor.
Solução padrão para o monitoramento dos recursos no servidor do Vault
A solução padrão orientada pelo fabricante pode ser consultada na documentação oficial em: Configure Remote Monitoring | CyberArk Docs O SNMP é um protocolo de rede que tem a função de gerenciar dispositivos em uma rede e a solução referida faz a utilização de SNMP Traps. Oque significa que o nosso servidor fica encarregado de gerar os alertas (Traps) quando uma condição pré-determinada for satisfeita, como por exemplo, a utilização de CPU no servidor for maior que 90%.
O problema desta solução é que ela não nos permite acompanhar as oscilações continuamente e demonstra-las em através de gráficos por exemplo, já que só teremos a informação quando a condição do alerta for satisfeita.
Utilizando o Remote Control
Felizmente, a CyberArk nos disponibiliza uma funcionalidade que permite realizar o controle remoto de algumas funcionalidades do Vault, bem como consultar algumas informações do servidor em que ele está instalado. A documentação oficial pode ser encontrada em: Administração remota para o Vault/DR Vault | CyberArk Docs Após ter realizado as configurações necessárias descritas na documentação, podemos realizar o seguinte teste:
Caso deseje deseje utilizar um PassFile insira o comando CreatePassFile, em seguida poderá realizar uma consulta para saber a utilização de CPU no servidor do Vault.
1
2
3
---
PS C:\Remote control Client-RIs-v12.6> .\PARClient.exe <Vault_Server_IP> /USEPASSFILE pass /c getcpu
---
Caso não tenha configurado um arquivo de credencial é possível utilizar a senha em texto claro desta forma:
1
2
3
---
PS C:\Remote control Client-RIs-v12.6> .\PARClient.exe <Vault_Server_IP/Cyberark123 pass /c getcpu
---
Note que Cyberark123 é a senha que eu configurei para o agent. Obs. Verifique se está correto o endereço para o executável do PARClient.
Caso tudo ocorra como planejado, devemos obter o seguinte Resultado:
Simplicando o Remote Control
Para simplificar a nossa utilização do Remote Control, faremos a utilização de um modulo PowerShell desenvolvido pela comunidade. O módulo em questão é o VaultControl O projeto pode ser visto em: GitHub - pspete/VaultControl: Invoke CyberArk PARClient.exe Utility with PowerShell A instalação do módulo bem como sua utilização pode ser vista no link acima.
O comando que iremos utilizar será ligeiramente diferente, e o resultado pode ser visto na imagem:
Note que agora temos diversas informações agregadas utilizando apenas um comando. Como podemos utilizar o Grafana para ler tais informações e criar um gráfico?
ConvertTo-Json
A minha ideia consiste em escrever um script que execute o comando citado a cima a cada x segundos, e salve o resultado deste comando em um arquivo JSON que possa ser lido pelo grafana. O Script PowerShell que eu escrevi é o seguinte:
1
2
3
4
5
6
7
8
9
10
11
---
$timer = new-timespan -Minutes 5
$clock = [diagnostics.stopwatch]::StartNew()
while ($clock.elapsed -lt $timer){
$command=Get-PARServer -Server 192.168.1.130 -PassFile "C:\pass" | ConvertTo-Json | Out-File -Encoding Ascii "C:\MyAPI\result.json"
cls
$command
start-sleep -seconds 5
}
write-host "Timer end"
---
Melhorias podem ser feitas no script para transforma-lo em um Job PoweShell para que rode em Background entre outras melhorias, por enquanto serve apenas como uma prova de conceito. O script define um timer de 5 minutos, enquanto o timer não chegar em 5 minutos, executaremos um loop, dentro deste loop temos o comando que irá utilizar o módulo VaultControl para fazer a consulta indicada, e em seguida irá converter a saída do comando para JSON. Este JSON é salvo em um arquivo com o Encoding Ascii para evitar problemas de compatibilidade com a ferramenta de monitoramento futuramente. Após executar o comando, utilizaremos um intervalo de 5 segundos antes de reiniciar o loop, e este é o intervalo entre cada consulta.
Lendo o JSON com o Grafana
O Grafana é uma aplicação Web de código aberto e multi-plataforma, muito utilizado para gerar visualização de dados em forma de gráficos e tabelas. Para visualizar nossos dados gravados no JSON eu utilizei um plugin do Grafana que é o Infinity. O Infinity pode ser visto no seguinte link: Infinity plugin for Grafana | Grafana Labs
Tornando o JSON acessível através de uma URL
Para tornar o nosso JSON acessível através de uma URL, eu criei uma aplicação no IIS (Internet Information Services) incluindo o diretório em que estava localizado o meu JSON, então pude acessá-lo na minha rede local.
Add Panel and Dashboard
Após ter instalado o Grafana e o Plugin Infinity, e ter tornado o nosso JSON acessível através de uma URL, podemos finalmente criar nosso Painéis e Gráficos, eu não possuo nenhuma experiência com o Grafana, então o progresso que consegui com o meu painel foi depois de algumas horas “fuçando” a ferramenta. Vou deixar um exemplo de como configurei o meu panel de consumo de CPU:
e do Dashboard completo:
Para o melhor entendimento do solução, esta imagem representa a arquitetura atual:
Futuros Updates
Acontece em alguns momentos de o Grafana ler o arquivo no momento em que este está sendo gravado. Por este motivo não consegue exibir os dados corretos, felizmente, 5 segundos depois na atualização seguinte, os dados voltam a ser exibidos corretamente. Levando este fato em consideração, será o meu próximo foco de atenção.