PowerShell Desired State Configuration и напильник: часть 1. Настройка DSC Pull Server для работы с базой данных SQL

PowerShell Desired State Configuration и напильник: часть 1. Настройка DSC Pull Server для работы с базой данных SQL

PowerShell Desired State Configuration (DSC) сильно упрощает работу по развертыванию и конфигурированию операционной системы, ролей сервера и приложений, когда у вас сотни серверов.

Но при использовании DSC on-premises, т.е. не в MS Azure, возникает пара нюансов. Они особенно ощутимы, если организация большая (от 300 рабочих станций и серверов) и в ней еще не открыли мир контейнеров:

  • Нет полноценных отчетов о состоянии систем. Если нужная конфигурация не применилась на каких-то серверах, то без этих отчетов мы об этом не узнаем. От встроенного сервера отчетов информацию получить довольно сложно, а для большого количества хостов – еще и долго.
  • Отсутствует масштабируемость и отказоустойчивость. Невозможно построить ферму опрашивающих веб-серверов DSC, которые бы имели единую отказоустойчивую базу данных и общее хранилище mof-файлов конфигураций, модулей и ключей регистрации.

Сегодня я расскажу, как можно решить первую проблему и получить данные для построения отчетности. Все было бы проще, если в качестве базы данных можно было бы использовать SQL. MS обещает встроенную поддержку только в Windows Server 2019 или в build Windows server 1803. Забирать данные с использованием OleDB provider тоже не получится, так как DSC-сервер использует именованный параметр, который не полностью поддерживается OleDbCommand.

Нашел вот такой способ: тем, кто использует Windows Server 2012 и 2016, можно настроить использование БД SQL в качестве backend’a для опрашивающего DSC-сервера. Для этого создадим «прокси» в виде .mdb файла со связанными таблицами, который будет перенаправлять данные, полученные от отчетов клиентов, в БД SQL-сервера.

Примечание: для Windows Server 2016 необходимо использовать AccessDatabaseEngine2016x86, так как Microsoft.Jet.OLEDB.4.0 больше не поддерживается.

Я не буду подробно останавливаться на процессе развертывания опрашивающего DSC-сервера, он очень хорошо описан тут. Отмечу только пару моментов. Если мы разворачиваем опрашивающий DSC на одном веб-сервере со WSUS или Kaspersky Security Center, то в скрипте создания конфигурации необходимо поменять следующие параметры:

  1. UseSecurityBestPractices     = $false

    Иначе TLS 1.0 будет отключен, вы не сможете подключиться к БД SQL. Kaspersky Security Center тоже не будет работать (проблема должна быть решена в Kaspersky Security Center v11).

  2. Enable32BitAppOnWin64   = $true

    Если не внести это изменение, не получится запустить AppPool DSC-сервера на IIS со WSUS.

  3. При установке DSC-сервера совместно с WSUS отключите статическое и динамическое кэширование для сайта DSC.

Перейдем к настройке сервера DSC для использования БД SQL.

Создание БД SQL

  1. Создадим пустую базу данных SQL с именем DSC.

    PowerShell Desired State Configuration и напильник: часть 1. Настройка DSC Pull Server для работы с базой данных SQL

    PowerShell Desired State Configuration и напильник: часть 1. Настройка DSC Pull Server для работы с базой данных SQL

  2. Создадим учетную запись для подключения к этой базе данных. Предварительно проверьте, что на SQL-сервере разрешена аутентификация учетных записей как Windows, так и SQL.

    PowerShell Desired State Configuration и напильник: часть 1. Настройка DSC Pull Server для работы с базой данных SQL

    PowerShell Desired State Configuration и напильник: часть 1. Настройка DSC Pull Server для работы с базой данных SQL

  3. Переходим в раздел User Mapping. Выбираем базу данных, в данном случае – DSC. Даем права владельца базы данных.

    PowerShell Desired State Configuration и напильник: часть 1. Настройка DSC Pull Server для работы с базой данных SQL

  4. Готово.

    PowerShell Desired State Configuration и напильник: часть 1. Настройка DSC Pull Server для работы с базой данных SQL

Создание схемы для базы данных DSC

Создать схему для базы данных DSC можно двумя способами:

  • самостоятельно, через скрипт на 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
  • импортировать данные из пустого devices.mdb в составе PS-модуля PSDesiredStateConfiguration через Мастера импорта данных SQL.

    Devices.mdb, с которым мы будем работать, находится в C:WindowsSysWOW64WindowsPowerShellv1.0ModulesPSDesiredStateConfigurationPullServer.

  1. Для импорта данных запускаем SQL Server Import and Export Wizard.

    PowerShell Desired State Configuration и напильник: часть 1. Настройка DSC Pull Server для работы с базой данных SQL

  2. Выбираем, откуда мы будем забирать данные – в нашем случае это база данных Microsoft Access. Нажимаем Next.

    PowerShell Desired State Configuration и напильник: часть 1. Настройка DSC Pull Server для работы с базой данных SQL

  3. Выбираем файл, откуда импортируем схему.

    PowerShell Desired State Configuration и напильник: часть 1. Настройка DSC Pull Server для работы с базой данных SQL

  4. Указываем, куда импортировать, – у нас это БД SQL.

    PowerShell Desired State Configuration и напильник: часть 1. Настройка DSC Pull Server для работы с базой данных SQL

  5. Выбираем SQL-сервер (Server Name) и базу данных, в которую будем импортировать данные (DataBase).

    PowerShell Desired State Configuration и напильник: часть 1. Настройка DSC Pull Server для работы с базой данных SQL

  6. Выбираем опцию Copy data from one or more tables or views (копирование данных из таблиц или представлений).

    PowerShell Desired State Configuration и напильник: часть 1. Настройка DSC Pull Server для работы с базой данных SQL

  7. Выбираем таблицы, из которых будем импортировать схему БД.

    PowerShell Desired State Configuration и напильник: часть 1. Настройка DSC Pull Server для работы с базой данных SQL

  8. Ставим галочку Run Immediately и жмем Finish.

    PowerShell Desired State Configuration и напильник: часть 1. Настройка DSC Pull Server для работы с базой данных SQL

  9. Готово.

    PowerShell Desired State Configuration и напильник: часть 1. Настройка DSC Pull Server для работы с базой данных SQL

  10. В результате в БД DSC должны появиться таблицы.

    PowerShell Desired State Configuration и напильник: часть 1. Настройка DSC Pull Server для работы с базой данных SQL

Настройка .mdb «прокси» файла

Создание ODBC-подключения к SQL-серверу. Предполагается, что MS Access не установлен на сервере с DSC, поэтому настройка databases.mdb выполняется на промежуточном хосте с установленным MS Access.

Создадим системное ODBC-подключение к SQL-серверу (разрядность подключения должна совпадать с разрядностью MS Access – 64 или 32). Его можно создать с помощью:
— командлета Powershell:

Add-OdbcDsn –Name DSC –DriverName 'SQL Server' –Platform '<64-bit or 32-bit>' –DsnType System –SetPropertyValue @('Description=DSC Pull Server',"Server=<Name of your SQL Server>",'Trusted_Connection=yes','Database=DSC') –PassThru

— или вручную, с помощью мастера подключений:

  1. Открываем Administrative tools. Выбираем источники данных ODBC в зависимости от версии установленного MS Access. Переходим во вкладку System DSN и создаем системное подключение (Add).

    PowerShell Desired State Configuration и напильник: часть 1. Настройка DSC Pull Server для работы с базой данных SQL

  2. Указываем, что будем подключаться к SQL-серверу. Жмем Finish.

    PowerShell Desired State Configuration и напильник: часть 1. Настройка DSC Pull Server для работы с базой данных SQL

  3. Указываем имя и сервер для подключения. Потом подключение с такими же параметрами нужно будет создать на сервере DSC.

    PowerShell Desired State Configuration и напильник: часть 1. Настройка DSC Pull Server для работы с базой данных SQL

  4. Указываем, что для подключения к SQL-серверу используется предварительно созданный нами логин с именем DSC.

    PowerShell Desired State Configuration и напильник: часть 1. Настройка DSC Pull Server для работы с базой данных SQL

  5. Указываем БД в настройках подключения DSC.

    PowerShell Desired State Configuration и напильник: часть 1. Настройка DSC Pull Server для работы с базой данных SQL

  6. Жмем Finish.

    PowerShell Desired State Configuration и напильник: часть 1. Настройка DSC Pull Server для работы с базой данных SQL

  7. Перед завершением настройки проверяем, что подключение работает (Test Data Source).

    PowerShell Desired State Configuration и напильник: часть 1. Настройка DSC Pull Server для работы с базой данных SQL

  8. Готово.

    PowerShell Desired State Configuration и напильник: часть 1. Настройка DSC Pull Server для работы с базой данных SQL

Создание базы данных devices.mdb в MS Access. Запускаем MS Access и создаем пустую базу данных под названием devices.mdb.

PowerShell Desired State Configuration и напильник: часть 1. Настройка DSC Pull Server для работы с базой данных SQL

  1. Переходим во вкладку Внешние данные, кликаем на База данных ODBC. В появившемся окне выбираем Создать связанную таблицу для связи с источником данных.

    PowerShell Desired State Configuration и напильник: часть 1. Настройка DSC Pull Server для работы с базой данных SQL

  2. В новом окне выбираем вкладку Machine Data Source и жмем ОК. В новом окне вводим учетные данные для подключения к SQL-серверу.

    PowerShell Desired State Configuration и напильник: часть 1. Настройка DSC Pull Server для работы с базой данных SQL

  3. Выбираем таблицы, которые необходимо прилинковать. Отмечаем галкой Сохранить пароль и жмем ОК. Пароль сохранять каждый раз для всех трех таблиц.

    PowerShell Desired State Configuration и напильник: часть 1. Настройка DSC Pull Server для работы с базой данных SQL

  4. В индексах нужно выбрать следующие:
    — TargetName для таблицы dbo_Devices;

    PowerShell Desired State Configuration и напильник: часть 1. Настройка DSC Pull Server для работы с базой данных SQL

    — NodeName или IPAddress для dbo_RegistrationData;

    PowerShell Desired State Configuration и напильник: часть 1. Настройка DSC Pull Server для работы с базой данных SQL

    — NodeName или IPAddress для dbo_StatusReport.

    PowerShell Desired State Configuration и напильник: часть 1. Настройка DSC Pull Server для работы с базой данных SQL

  5. Переименуем таблицы в MS Access, а именно: удалим префикс dbo_, чтобы DSC мог использовать их.

    PowerShell Desired State Configuration и напильник: часть 1. Настройка DSC Pull Server для работы с базой данных SQL

  6. Готово.

    PowerShell Desired State Configuration и напильник: часть 1. Настройка DSC Pull Server для работы с базой данных SQL

  7. Сохраняем файл и закрываем MS Access. Теперь копируем полученный devices.mdb на DSC-сервер (по умолчанию в C:Program FilesWindowsPowershellDSCService) и заменяем им существующий (если он есть).

Настройка DSC-сервера для использования SQL

  1. Возвращаемся к серверу DSC. Чтобы подключиться к SQL-серверу с нашим proxy-файлом, создадим новое ODBC подключение на DSC-сервере. Имя, и разрядность, и настройки подключения должны быть такие же, как и при создании MDB-файла. Можно скопировать уже настроенный пустой devices.mdb отсюда.
  2. Чтобы использовать devices.mdb, нужно внести изменения в web.config опрашивающего сервера DSC (по умолчанию – C:inetpubPSDSCPullServerweb.config):

— для Windows Server 2012

<add key="dbprovider" value="System.Data.OleDb">
<add key="dbconnectionstr" value="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:Program FilesWindowsPowerShellDscServiceDevices.mdb;">

— для Windows Server 2016

<add key="dbprovider" value="System.Data.OleDb">
<add key="dbconnectionstr" value="Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:Program FilesWindowsPowerShellDscServiceDevices.mdb;">

На этом настройка DSC-сервера закончена.

Проверка работоспособности DSC-сервера

  1. Проверим, что DSC-сервер доступен через web-браузер.

    PowerShell Desired State Configuration и напильник: часть 1. Настройка DSC Pull Server для работы с базой данных SQL

  2. Теперь проверим, правильно ли работает опрашивающий сервер DSC. Для этого в составе модуля xPSDesiredStateConfiguration есть скрипт pullserversetuptests.ps1. Перед запуском этого скрипта необходимо установить модуль Powershell с именем Pester. Устанавливаем его Install-Module -Name Pester.
  3. Открываем C:Program FilesWindowsPowerShellModulesxPSDesiredStateConfiguration<версия модуля>DSCPullServerSetupPullServerDeploymentVerificationTest (в примере версия 8.0.0.0.0).

    PowerShell Desired State Configuration и напильник: часть 1. Настройка DSC Pull Server для работы с базой данных SQL

  4. Открываем PullServerSetupTests.ps1 и проверяем путь к web.config DSC-сервера. Красным выделил путь к web.config, который будет проверять скрипт. Если нужно, меняем этот путь.

    PowerShell Desired State Configuration и напильник: часть 1. Настройка DSC Pull Server для работы с базой данных SQL

  5. Запускаем pullserversetuptests.ps1
    Invoke-Pester .PullServerSetupTests.ps1
    Все работает.

    PowerShell Desired State Configuration и напильник: часть 1. Настройка DSC Pull Server для работы с базой данных SQL

  6. В SQL Management Studio видим, что администрируемые хосты отправляют отчеты на сервер отчетов DSC и данные попадают в базу данных DSC на SQL-сервере.

    PowerShell Desired State Configuration и напильник: часть 1. Настройка DSC Pull Server для работы с базой данных SQL

На этом все. В следующих статьях планирую рассказать, как на полученных данных построить отчеты, и коснусь вопросов про отказоустойчивость и масштабируемость.

Источник: habr.com