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