Home Monitoring CyberArk
Post
Cancel

Monitoring CyberArk

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:

img-description

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:

img-description

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:

img-description

e do Dashboard completo: img-description

Para o melhor entendimento do solução, esta imagem representa a arquitetura atual:

img-description

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.

This post is licensed under CC BY 4.0 by the author.
Contents

-

-