PowerShell Desired State Configuration i pilnik: część 1. Konfiguracja DSC Pull Server do pracy z bazą danych SQL

PowerShell Desired State Configuration i pilnik: część 1. Konfiguracja DSC Pull Server do pracy z bazą danych SQL

PowerShell Desired State Configuration (DSC) znacznie upraszcza proces wdrażania i konfigurowania systemu operacyjnego, ról serwera i aplikacji, gdy mamy setki serwerów.

Jednak korzystając z DSC on-premises, tzn. nie w MS Azure, pojawia się kilka niuansów. Są one szczególnie odczuwalne, jeśli organizacja jest duża (ponad 300 stacji roboczych i serwerów) i nie wprowadziła jeszcze świata kontenerów:

  • Brakuje pełnych raportów o stanie systemów. Jeśli potrzebna konfiguracja nie została zastosowana na jakichś serwerach, to bez tych raportów nic o tym nie dowiemy się. Uzyskanie informacji z wbudowanego serwera raportów jest dość trudne, a dla dużej liczby hostów – jeszcze dłuższe.
  • Brak skalowalności i niezawodności. Niemożliwe jest zbudowanie farmy serwerów webowych DSC, które miałyby jedną, niezawodną bazę danych oraz wspólne repozytorium plików mof z konfiguracjami, modułami i kluczami rejestracyjnymi.

Dziś opowiem, jak można rozwiązać pierwszy problem i uzyskać dane do budowy raportów. Wszystko byłoby prostsze, gdyby można było użyć SQL jako bazy danych. MS obiecuje wbudowane wsparcie tylko w Windows Server 2019 lub w wersji Windows Server 1803. Pozyskanie danych z użyciem dostawcy OleDB także nie będzie możliwe, ponieważ serwer DSC wykorzystuje nazwany parametr, który nie jest w pełni wspierany przez OleDbCommand.

Znalazłem taki sposób: ci, którzy używają Windows Server 2012 i 2016, mogą być skonfigurowana używać bazy danych SQL jako zaplecza dla serwera DSC. W tym celu stworzymy 'proxy' w postaci pliku .mdb ze skojarzonymi tabelami, które będą przekierowywały dane uzyskane z raportów klientów do bazy danych SQL serwera.

Uwaga: dla Windows Server 2016 należy używać AccessDatabaseEngine2016x86, ponieważ Microsoft.Jet.OLEDB.4.0 nie jest już wspierany.

Nie będę szczegółowo omawiać procesu wdrażania serwera DSC, jest on bardzo dobrze opisany tutaj. Zaznaczę tylko kilka punktów. Jeśli wdrażamy serwer DSC na tym samym serwerze webowym co WSUS lub Kaspersky Security Center, to w skrypcie tworzenia konfiguracji należy zmienić następujące parametry:

  1. UseSecurityBestPractices     = $false

    W przeciwnym razie TLS 1.0 zostanie wyłączony, nie będziesz mógł połączyć się z bazą danych SQL. Kaspersky Security Center również nie będzie działać (problem powinien być rozwiązany w Kaspersky Security Center v11).

  2. Enable32BitAppOnWin64   = $true

    Jeśli nie dokonasz tej zmiany, nie będzie możliwe uruchomienie AppPool serwera DSC na IIS z WSUS.

  3. Podczas instalacji serwera DSC razem z WSUS wyłącz statyczne i dynamiczne buforowanie dla witryny DSC.

Przejdźmy do konfiguracji serwera DSC do używania bazy danych SQL.

Tworzenie bazy danych SQL

  1. Utwórzmy pustą bazę danych SQL o nazwie DSC.

    PowerShell Desired State Configuration i pilnik: część 1. Konfiguracja DSC Pull Server do pracy z bazą danych SQL

    PowerShell Desired State Configuration i pilnik: część 1. Konfiguracja DSC Pull Server do pracy z bazą danych SQL

  2. Utwórzmy konto do połączenia z tą bazą danych. Najpierw sprawdź, czy na serwerze SQL włączona jest autoryzacja zarówno kont Windows, jak i SQL.

    PowerShell Desired State Configuration i pilnik: część 1. Konfiguracja DSC Pull Server do pracy z bazą danych SQL

    PowerShell Desired State Configuration i pilnik: część 1. Konfiguracja DSC Pull Server do pracy z bazą danych SQL

  3. Przechodzimy do sekcji User Mapping. Wybieramy bazę danych, w tym przypadku – DSC. Przyznajemy uprawnienia właściciela bazy danych.

    PowerShell Desired State Configuration i pilnik: część 1. Konfiguracja DSC Pull Server do pracy z bazą danych SQL

  4. Gotowe.

    PowerShell Desired State Configuration i pilnik: część 1. Konfiguracja DSC Pull Server do pracy z bazą danych SQL

Tworzenie schematu dla bazy danych DSC

Schemat dla bazy danych DSC można utworzyć na dwa sposoby:

  • samodzielnie, za pomocą skryptu TSQL
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    CREATE TABLE [dbo].[Devices](
    [TargetName] [nvarchar](255) NOT NULL,
    [ConfigurationID] [nvarchar](255) NOT NULL,
    [ServerCheckSum] [nvarchar](255) NOT NULL,
    [TargetCheckSum] [nvarchar](255) NOT NULL,
    [NodeCompliant] [bit] NOT NULL,
    [LastComplianceTime] [datetime] NULL,
    [LastHeartbeatTime] [datetime] NULL,
    [Dirty] [bit] NOT NULL,
    [StatusCode] [int] NULL
    ) ON [PRIMARY]
    GO
     
    CREATE TABLE [dbo].[RegistrationData](
    [AgentId] [nvarchar](255) NOT NULL,
    [LCMVersion] [nvarchar](255) NULL,
    [NodeName] [nvarchar](255) NULL,
    [IPAddress] [nvarchar](255) NULL,
    [ConfigurationNames] [nvarchar](max) NULL
    ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
    GO
     
    CREATE TABLE [dbo].[StatusReport](
    [JobId] [nvarchar](50) NOT NULL,
    [Id] [nvarchar](50) NOT NULL,
    [OperationType] [nvarchar](255) NULL,
    [RefreshMode] [nvarchar](255) NULL,
    [Status] [nvarchar](255) NULL,
    [LCMVersion] [nvarchar](50) NULL,
    [ReportFormatVersion] [nvarchar](255) NULL,
    [ConfigurationVersion] [nvarchar](255) NULL,
    [NodeName] [nvarchar](255) NULL,
    [IPAddress] [nvarchar](255) NULL,
    [StartTime] [datetime] NULL,
    [EndTime] [datetime] NULL,
    [Errors] [nvarchar](max) NULL,
    [StatusData] [nvarchar](max) NULL,
    [RebootRequested] [nvarchar](255) NULL
    ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
    GO
  • importuj dane z pustego devices.mdb jako składnik modułu PSDesiredStateConfiguration za pomocą Kreatora importu danych SQL.

    Devices.mdb, z którym będziemy pracować, znajduje się w C:\Windows\SysWOW64\WindowsPowerShell\v1.0\Modules\PSDesiredStateConfiguration\PullServer.

  1. Aby zaimportować dane, uruchamiamy SQL Server Import and Export Wizard.

    PowerShell Desired State Configuration i pilnik: część 1. Konfiguracja DSC Pull Server do pracy z bazą danych SQL

  2. Wybieramy, skąd będziemy pobierać dane – w naszym przypadku jest to baza danych Microsoft Access. Klikamy Dalej.

    PowerShell Desired State Configuration i pilnik: część 1. Konfiguracja DSC Pull Server do pracy z bazą danych SQL

  3. Wybieramy plik, z którego importujemy schemat.

    PowerShell Desired State Configuration i pilnik: część 1. Konfiguracja DSC Pull Server do pracy z bazą danych SQL

  4. Wskazujemy, dokąd importujemy – w naszym przypadku to baza danych SQL.

    PowerShell Desired State Configuration i pilnik: część 1. Konfiguracja DSC Pull Server do pracy z bazą danych SQL

  5. Wybieramy serwer SQL (Nazwa serwera) i bazę danych, do której będziemy importować dane (Baza danych).

    PowerShell Desired State Configuration i pilnik: część 1. Konfiguracja DSC Pull Server do pracy z bazą danych SQL

  6. Wybieramy opcję Kopiuj dane z jednej lub więcej tabel lub widoków.

    PowerShell Desired State Configuration i pilnik: część 1. Konfiguracja DSC Pull Server do pracy z bazą danych SQL

  7. Wybieramy tabele, z których będziemy importować schemat bazy danych.

    PowerShell Desired State Configuration i pilnik: część 1. Konfiguracja DSC Pull Server do pracy z bazą danych SQL

  8. Zaznaczamy opcję Uruchom natychmiast i klikamy Zakończ.

    PowerShell Desired State Configuration i pilnik: część 1. Konfiguracja DSC Pull Server do pracy z bazą danych SQL

  9. Gotowe.

    PowerShell Desired State Configuration i pilnik: część 1. Konfiguracja DSC Pull Server do pracy z bazą danych SQL

  10. W rezultacie w bazie danych DSC powinny pojawić się tabele.

    PowerShell Desired State Configuration i pilnik: część 1. Konfiguracja DSC Pull Server do pracy z bazą danych SQL

Konfiguracja pliku .mdb jako pliku „proxy”

Tworzenie połączenia ODBC z serwerem SQL. Zakłada się, że MS Access nie jest zainstalowany na serwerze DSC, dlatego konfiguracja databases.mdb odbywa się na pośrednim hoście z zainstalowanym MS Access.

Utworzymy systemowe połączenie ODBC z serwerem SQL (architektura połączenia musi odpowiadać architekturze MS Access – 64 lub 32). Można je stworzyć za pomocą:
— polecenia Powershell:

Add-OdbcDsn –Name DSC –DriverName 'SQL Server' –Platform '' –DsnType System –SetPropertyValue @('Description=Serwer Pull DSC',"Server=",'Trusted_Connection=yes','Database=DSC') –PassThru

— lub ręcznie, za pomocą kreatora połączeń:

  1. Otwieramy Narzędzia administracyjne. Wybieramy źródła danych ODBC w zależności od wersji zainstalowanego MS Access. Przechodzimy do zakładki System DSN i tworzymy połączenie systemowe (Dodaj).

    PowerShell Desired State Configuration i pilnik: część 1. Konfiguracja DSC Pull Server do pracy z bazą danych SQL

  2. Określamy, że będziemy łączyć się z serwerem SQL. Klikamy Zakończ.

    PowerShell Desired State Configuration i pilnik: część 1. Konfiguracja DSC Pull Server do pracy z bazą danych SQL

  3. Podajemy nazwę i serwer do połączenia. Następnie połączenie z takimi samymi parametrami należy stworzyć na serwerze DSC.

    PowerShell Desired State Configuration i pilnik: część 1. Konfiguracja DSC Pull Server do pracy z bazą danych SQL

  4. Określamy, że do połączenia z serwerem SQL używamy wcześniej utworzonego przez nas loginu o nazwie DSC.

    PowerShell Desired State Configuration i pilnik: część 1. Konfiguracja DSC Pull Server do pracy z bazą danych SQL

  5. Podajemy bazę danych w ustawieniach połączenia DSC.

    PowerShell Desired State Configuration i pilnik: część 1. Konfiguracja DSC Pull Server do pracy z bazą danych SQL

  6. Klikamy Zakończ.

    PowerShell Desired State Configuration i pilnik: część 1. Konfiguracja DSC Pull Server do pracy z bazą danych SQL

  7. Przed zakończeniem konfiguracji sprawdzamy, czy połączenie działa (Test Data Source).

    PowerShell Desired State Configuration i pilnik: część 1. Konfiguracja DSC Pull Server do pracy z bazą danych SQL

  8. Gotowe.

    PowerShell Desired State Configuration i pilnik: część 1. Konfiguracja DSC Pull Server do pracy z bazą danych SQL

Tworzenie bazy danych devices.mdb w MS Access. Uruchamiamy MS Access i tworzymy pustą bazę danych o nazwie devices.mdb.

PowerShell Desired State Configuration i pilnik: część 1. Konfiguracja DSC Pull Server do pracy z bazą danych SQL

  1. Przechodzimy do zakładki Zewnętrzne dane, klikamy na Baza danych ODBC. W nowo otwartym oknie wybieramy Utwórz tabelę powiązaną, aby połączyć się z źródłem danych.

    PowerShell Desired State Configuration i pilnik: część 1. Konfiguracja DSC Pull Server do pracy z bazą danych SQL

  2. W nowym oknie wybieramy zakładkę Machine Data Source i klikamy OK. W nowym oknie wprowadzamy dane logowania do połączenia z serwerem SQL.

    PowerShell Desired State Configuration i pilnik: część 1. Konfiguracja DSC Pull Server do pracy z bazą danych SQL

  3. Wybieramy tabele, które należy powiązać. Zaznaczamy opcję Zapamiętaj hasło i klikamy OK. Hasło należy zapamiętać za każdym razem dla wszystkich trzech tabel.

    PowerShell Desired State Configuration i pilnik: część 1. Konfiguracja DSC Pull Server do pracy z bazą danych SQL

  4. W indeksach należy wybrać następujące:
    — TargetName dla tabeli dbo_Devices;

    PowerShell Desired State Configuration i pilnik: część 1. Konfiguracja DSC Pull Server do pracy z bazą danych SQL

    — NodeName lub IPAddress dla dbo_RegistrationData;

    PowerShell Desired State Configuration i pilnik: część 1. Konfiguracja DSC Pull Server do pracy z bazą danych SQL

    — NodeName lub IPAddress dla dbo_StatusReport.

    PowerShell Desired State Configuration i pilnik: część 1. Konfiguracja DSC Pull Server do pracy z bazą danych SQL

  5. Zmieniamy nazwy tabel w MS Access, a mianowicie: usuwamy prefiks dbo_, aby DSC mogło je wykorzystać.

    PowerShell Desired State Configuration i pilnik: część 1. Konfiguracja DSC Pull Server do pracy z bazą danych SQL

  6. Gotowe.

    PowerShell Desired State Configuration i pilnik: część 1. Konfiguracja DSC Pull Server do pracy z bazą danych SQL

  7. Zapisujemy plik i zamykamy MS Access. Następnie kopiujemy uzyskany devices.mdb na serwer DSC (domyślnie w C:Program FilesWindowsPowershellDSCService) i zastępujemy nim istniejący (o ile istnieje).

Konfiguracja serwera DSC do używania SQL

  1. Wracamy do serwera DSC. Aby połączyć się z serwerem SQL za pomocą naszego pliku proxy, stworzymy nowe połączenie ODBC na serwerze DSC. Nazwa, architektura i ustawienia połączenia muszą być takie same, jak podczas tworzenia pliku MDB. Można skopiować już skonfigurowany pusty plik devices.mdb stąd.
  2. Aby korzystać z pliku devices.mdb, należy wprowadzić zmiany w pliku web.config serwera DSC (domyślnie – C:inetpubPSDSCPullServerweb.config):

— dla Windows Server 2012

— dla Windows Server 2016

Na tym kończy się konfiguracja serwera DSC.

Sprawdzanie działania serwera DSC

  1. Sprawdzimy, czy serwer DSC jest dostępny przez przeglądarkę internetową.

    PowerShell Desired State Configuration i pilnik: część 1. Konfiguracja DSC Pull Server do pracy z bazą danych SQL

  2. Teraz sprawdzimy, czy serwer DSC poprawnie działa. W tym celu w module xPSDesiredStateConfiguration znajduje się skrypt pullserversetuptests.ps1. Przed uruchomieniem tego skryptu należy zainstalować moduł Powershell o nazwie Pester. Instalujemy go za pomocą Install-Module -Name Pester.
  3. Otwieramy C:Program FilesWindowsPowerShellModulesxPSDesiredStateConfigurationDSCPullServerSetupPullServerDeploymentVerificationTest (w przykładzie wersja 8.0.0.0.0).

    PowerShell Desired State Configuration i pilnik: część 1. Konfiguracja DSC Pull Server do pracy z bazą danych SQL

  4. Otwieramy PullServerSetupTests.ps1 i sprawdzamy ścieżkę do web.config serwera DSC. Na czerwono zaznaczyłem ścieżkę do web.config, którą skrypt będzie sprawdzał. W razie potrzeby zmieniamy tę ścieżkę.

    PowerShell Desired State Configuration i pilnik: część 1. Konfiguracja DSC Pull Server do pracy z bazą danych SQL

  5. Uruchamiamy pullserversetuptests.ps1
    Invoke-Pester .PullServerSetupTests.ps1
    Wszystko działa.

    PowerShell Desired State Configuration i pilnik: część 1. Konfiguracja DSC Pull Server do pracy z bazą danych SQL

  6. W SQL Management Studio widzimy, że zarządzane hosty wysyłają raporty do serwera raportów DSC, a dane trafiają do bazy danych DSC na serwerze SQL.

    PowerShell Desired State Configuration i pilnik: część 1. Konfiguracja DSC Pull Server do pracy z bazą danych SQL

Na tym kończymy. W kolejnych artykułach planuję opisać, jak na podstawie uzyskanych danych tworzyć raporty oraz poruszę kwestie związane z odpornością na awarie i skalowalnością.

Źródło: habr.com

Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster