Przy tworzeniu skryptów dla systemu monitorowania SolarWinds należy pamiętać o kilku punktach. Jednym z najważniejszych jest bezpieczeństwo.
Komunikacja między skryptem PowerShell a SolarWinds SDK API odbywa się poprzez szyfrowanie SSL oraz port 17778, zatem nie musimy wykonywać dodatkowych kroków dla przesyłu danych.
Jednak jest dodatkowy aspekt, o którym trzeba pamiętać. Inicjowanie połączenia do SolarWinds SDK API musi zawierać nazwę użytkownika oraz hasło, których używamy do logowania się do interfejsu webowego SolarWinds.
Z oczywistych powodów, nie powinno się wpisywać danych logowania bezpośrednio w tekście skryptu. Poniżej przedstawię jak możemy użyć gotowych mechanizmów szyfrowania uprawnień w Microsoft PowerShell oraz jak ich użyć do połączenia SWIS dla SolarWinds SDK API.
Najpierw należy podać dane do logowania poprzez skrypt PowerShell, który je zaszyfruje i zapisze w pliku o rozszerzeniu XML.
$login = „admin”
$path = „C:\Scripts\credentials.xml”
GET-CREDENTIAL –Credential $login | EXPORT-CLIXML -path $path
Po uruchomieniu powyższego skryptu poprzez Windows PowerShell ISE, system poprosi nas o potwierdzenie nazwy użytkownika oraz wpisanie hasła dostępu do systemu monitorowania SolarWinds.
Następnie możemy dodać zapisane uprawnienia do dowolnego skryptu.
Poniżej zaprezentowany jest prosty skrypt, który inicjuje kwerendę SolarWinds SWQL dla danych inwentaryzacyjnych dla urządzenia o nazwie Router2.
Import-Module SwisPowerShell
#$NodeName = $args[0]
$NodeName = "Router2"
$credentials = IMPORT-CLIXML C:\Scripts\credentials.xml
$hostname = "192.168.1.37"
$swis = Connect-Swis -Credential $credentials -Hostname $hostname
$query = @"
SELECT NodeID, IPAddress, Caption, Description, Vendor, Location, Contact, Uri
FROM Orion.Nodes
WHERE Caption LIKE '%$NodeName%'
"@
$nodedata = Get-SwisData -SwisConnection $swis -Query $query
Write-Host "Node Name: $($nodedata.Caption)"
#Write-Host "Contact: $($nodedata.Contact)"
Write-Host "Description: $($nodedata.Description)"
Write-Host "IP Address: $($nodedata.IPAddress)"
#Write-Host "Location: $($nodedata.Location)"
Write-Host "Node ID: $($nodedata.NodeID)"
Write-Host "Vendor: $($nodedata.Vendor)"
Write-Host "Uri: $($nodedata.Uri)"
PS C:\Scripts> C:\Scripts\simple_node_details_v2.ps1
Node Name: Router2
Description: Cisco CSR 1000V
IP Address: 192.168.1.62
Node ID: 1040
Vendor: Cisco
Uri: swis://WIN-SW-INDAGO./Orion/Orion.Nodes/NodeID=1040
PS C:\Scripts>
Dzięki powyższej metodzie, skrypt posiada w pełni zaszyfrowane uprawnienia, które można wykorzystać do dowolnej liczby zapytań.
Dla porównania, poniżej przedstawiłem inicjowanie połączenia SWIS poprzez niezabezpieczone hasło. Ze względów bezpieczeństwa, powinno się unikać tej metody.
$swis = Connect-Swis -Hostname $hostname -Username 'admin' -Password 'haslo_do_systemu'