Szyfrowanie haseł dla skryptów Powershell w SolarWinds

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.

Pamiętaj, że użytkownik musi posiadać uprawnienia administratora do interfejsu webowego SolarWinds (“Allow Administrator Rights”) w celu nawiązania połączenia SWIS z SolarWinds SDK API.

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)"

Uprawnienia XML będą wspierane tylko na maszynie Windows Server, w której zostały wygenerowane.

Efekt końcowy skryptu:

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'