Configurare il monitoraggio via CIM su ESXi tramite powershell

0 Flares Twitter 0 Facebook 0 LinkedIn 0 Email -- 0 Flares ×

Come in molti datacenter, utilizziamo software di monitoraggio per controllare i numerosi parametri della nostra infrastruttura. Grazie a CIM, è possibile usare direttamente queste APIs per monitorare l’hardware e lo stato di salute dei server ESXi, piuttosto che usare script e agent.

Nagios possiede alcuni ottimi plugin per usare CIM e monitorare ESXi, ma il problema è configurare correttamente le credenziali necessarie per accedere alle API CIM. Ho scoperto che William Lam ha già affrontato questo problema, e i suoi risultati sono stati raccolti in questo ottimo post.

Tuttavia, trovandomi più a mio agio con PowerShell piuttosto che Perl o Python, ho usato le sue scoperte per ricreare lo stesso script.

L’obiettivo, in entrambi i metodi, è di creare un utente che abbia i privilegi minimi indispensaili per leggere i dati CIM, in modo da garantire un ambiente protetto. Infatti, per default ESXi possiede solo questi ruoli locali:

PS C:> Get-VIRole

Name                      IsSystem
----                      --------
NoAccess                  True    
Anonymous                 True    
View                      True    
ReadOnly                  True    
Admin                     True

Se volete creare un utente per Nagios, dovrà possedere questo specifico privilegio:

Quindi, dovremo creare un nuovo ruolo che possieda solo questo privilegio, in modo da limitare al minimo l’interazione dell’utente nagios col sistema. Nello script di William, il privilegio viene invocato tramite il suo id, mentre in powershell dovrete usare il suo nome. Potete vedere il nome esatto nella schermata precedente, o verificarlo attraverso powershell (Get-VIPrivilege senza ulteriori argomenti vi da la lista completa):

PS C:> Get-VIPrivilege -Id Host.Cim.CimInteraction

Name                                Id                                 
----                                --                                 
CIM interaction                     Host.Cim.CimInteraction

Inoltre, come Williaw ha scoperto, l’utente dovrà far parte del gruppo root. Quindi, per cercare di limitarlo, lo script gli toglierà ogni accesso shell.

Questo è lo script completo PowerShell script. Con un semplice ciclo For potrete caricare una lista di server ESXi e configurarli tutti insieme.

## As usual, load needed PowerCLI cmdlets
asnp VMware.VimAutomation.Core -ErrorAction SilentlyContinue

# Define the ESXi server
$server = "server.domain.local"

#Connect to ESXi server
Connect-VIServer -Server $server -user root -password password

#Create a new role CIM, with the only needed privilege assigned to it
New-VIRole -Name CIM -Privilege "CIM interaction"

#Create the nagios account, assign it to root group, and deny it shell access
New-VMHostAccount -Id nagios -Description "nagios" -Password "password" -AssignGroups root -GrantShellAccess:$false

#Assign the role CIM to the newly created nagios account
New-VIPermission -Entity $server -Principal nagios -Role CIM

#Disconnect from ESXi server
Disconnect-VIServer -Server $server -Confirm:$false