Создание определений пользовательских политик конфигурации машины

Прежде чем начать, рекомендуется ознакомиться со страницей обзора конфигурации компьютера и сведениями о параметрах исправления конфигурации компьютера.

Внимание

Для виртуальных машин Azure требуется расширение конфигурации машины. Чтобы развернуть расширение в большом масштабе на всех компьютерах, назначьте следующую инициативу политики: Deploy prerequisites to enable machine configuration policies on virtual machines

Чтобы использовать пакеты конфигурации компьютера, которые применяют конфигурации, требуется расширение гостевой конфигурации виртуальной машины Azure версии 1.26.24 или более поздней версии или агент Arc 1.10.0 или более поздней версии.

Определения политики пользовательской конфигурации компьютера, использующие AuditIfNotExists или DeployIfNotExists находятся в состоянии поддержки общедоступной версии.

Выполните следующие действия, чтобы создать собственные политики для проверки соответствия или управления состоянием компьютеров с поддержкой Azure или Arc.

Установка PowerShell 7 и необходимых модулей PowerShell

Сначала настройте среду разработки конфигурации компьютера, чтобы установить необходимую версию PowerShell для операционной системы и модуля GuestConfiguration.

Создание и публикация артефакта пакета конфигурации машины

Если вы еще не сделали этого, создайте и опубликуйте пакет конфигурации настраиваемого компьютера, выполнив действия, описанные в разделе "Создание артефактов пакета конфигурации настраиваемого компьютера". Затем проверьте пакет в среде разработки, выполнив действия, описанные в руководстве по тестированию артефактов пакета конфигурации компьютера.

Примечание.

Пример кода в этой статье ссылается на $contentUri переменную. Если вы используете тот же сеанс PowerShell, что и предыдущие учебники для создания и тестирования артефактов пакета, эта переменная может уже иметь универсальный код ресурса (URI) для пакета.

Если у вас нет переменной $contentUri URI для пакета в сеансе PowerShell, необходимо задать ее. В этом примере используется строка подключения учетной записи хранения и New-AzStorageContext командлет для создания контекста хранения. Затем он получает большой двоичный объект хранилища для опубликованного пакета и использует свойства этого объекта для получения URI содержимого.

$connectionString = '<storage-account-connection-string>'
$context = New-AzStorageContext -ConnectionString $connectionString
$getParams = @{
    Context   = $context
    Container = '<container-name>'
    Blob      = '<published-package-file-name>'
}
$blob = Get-AzStorageBlob @getParams
$contentUri = $blob.ICloudBlob.Uri.AbsoluteUri

Требования к политике для конфигурации машины

Раздел метаданных определения политики должен содержать два свойства для службы конфигурации компьютера, чтобы автоматизировать подготовку и отчеты о назначениях гостевой конфигурации. Свойство категории должно быть задано Guest Configuration и раздел с именем guestConfiguration должен содержать сведения о назначении конфигурации компьютера. Командлет New-GuestConfigurationPolicy создает этот текст автоматически.

В следующем примере показан раздел метаданных , который автоматически создается New-GuestConfigurationPolicy.

"metadata": {
    "category": "Guest Configuration",
    "guestConfiguration": {
        "name": "test",
        "version": "1.0.0",
        "contentType": "Custom",
        "contentUri": "CUSTOM-URI-HERE",
        "contentHash": "CUSTOM-HASH-VALUE-HERE",
        "configurationParameter": {}
    }
}

Если для эффекта определения задано DeployIfNotExistsзначение, раздел должен содержать сведения о развертывании назначения конфигурации компьютера. Командлет New-GuestConfigurationPolicy создает этот текст автоматически.

Создание определения Политики Azure

После создания и отправки пакета настраиваемой политики конфигурации машины создайте определение политики конфигурации машины. Командлет New-GuestConfigurationPolicy принимает пакет настраиваемой политики и создает определение политики.

Для параметра PolicyId политики New-GuestConfigurationPolicy требуется уникальная строка. Требуется использовать глобально уникальный идентификатор (GUID). Для новых определений создайте новый GUID с помощью командлета New-GUID . При обновлении определения используйте ту же уникальную строку для PolicyId, чтобы обеспечить обновление правильного определения.

Командлет New-GuestConfigurationPolicy принимает следующие параметры:

  • PolicyId: GUID.
  • ContentUri. Общедоступный код URI HTTP(S) пакета содержимого конфигурации машины.
  • DisplayName: отображаемое имя политики.
  • Описание: описание политики.
  • Параметр: параметры политики, предоставляемые в хэш-таблице.
  • PolicyVersion: версия политики.
  • Путь: путь назначения, в котором создаются определения политик.
  • Platform. Целевая платформа (Windows или Linux) для политики конфигурации машины и пакета содержимого.
  • Режим: (учет регистра: ApplyAndMonitor, ApplyAndAutoCorrect) Auditвыберите, должна ли политика выполнять аудит или развертывание конфигурации. Значение по умолчанию — Audit.
  • Tag —добавляет один или несколько фильтров тегов к определению политики.
  • Category — задает поле метаданных категории в определении политики.

Дополнительные сведения о параметре Mode см. на странице "Настройка параметров исправления для конфигурации компьютера".

Создайте определение политики, которое предусматривает выполнение аудита с помощью пакета настраиваемой конфигурации по указанному пути.

$PolicyConfig      = @{
  PolicyId      = '_My GUID_'
  ContentUri    = $contentUri
  DisplayName   = 'My audit policy'
  Description   = 'My audit policy'
  Path          = './policies/auditIfNotExists.json'
  Platform      = 'Windows'
  PolicyVersion = 1.0.0
}

New-GuestConfigurationPolicy @PolicyConfig

Создайте определение политики, которое предусматривает развертывание конфигурации с помощью пакета настраиваемой конфигурации по указанному пути.

$PolicyConfig2      = @{
  PolicyId      = '_My GUID_'
  ContentUri    = $contentUri
  DisplayName   = 'My deployment policy'
  Description   = 'My deployment policy'
  Path          = './policies/deployIfNotExists.json'
  Platform      = 'Windows'
  PolicyVersion = 1.0.0
  Mode          = 'ApplyAndAutoCorrect'
}

New-GuestConfigurationPolicy @PolicyConfig2

В выходных данных командлета возвращается объект, содержащий отображаемое имя определения и путь к файлам политики. Файлы JSON определения, создающие определения политики аудита, имеют имя и файлы, которые создают определения политик для применения конфигураций с именем auditIfNotExists.jsondeployIfNotExists.json.

Фильтрация политик конфигурации машины с помощью тегов

Определения политики, созданные командлетами в модуле GuestConfiguration , могут дополнительно включать фильтр для тегов. Параметр ТегаNew-GuestConfigurationPolicy поддерживает массив хэш-таблиц, содержащих отдельные записи тегов. Теги добавляются в раздел определения политики и не могут быть изменены назначением политики.

Пример фрагмента определения политики, который фильтрует теги ниже.

"if": {
  "allOf" : [
    {
      "allOf": [
        {
          "field": "tags.Owner",
          "equals": "BusinessUnit"
        },
        {
          "field": "tags.Role",
          "equals": "Web"
        }
      ]
    },
    {
      // Original machine configuration content
    }
  ]
}

Использование параметров в определениях пользовательских политик конфигурации машины

Конфигурация компьютера поддерживает переопределение свойств конфигурации DSC во время выполнения. Эта возможность позволяет использовать в MOF-файле пакета не только статические значения. Значения переопределения предоставляются через Политика Azure и не изменяют способ создания или компиляции конфигураций DSC.

Конфигурация компьютера поддерживает следующие типы значений для параметров:

  • Строка
  • Логический
  • Двойной
  • Тип с плавающей запятой

Командлеты New-GuestConfigurationPolicy и Get-GuestConfigurationPackageComplianceStatus включают параметр с именем Parameter. Этот параметр принимает определение хэш-таблицы, включая все сведения о каждом параметре и создает необходимые разделы каждого файла, используемого для определения Политика Azure.

В следующем примере создается определение политики для аудита службы, для которого пользователь выбирает значение из списка во время назначения политики.

# This DSC resource definition...
Service 'UserSelectedNameExample' {
    Name   = 'ParameterValue'
    Ensure = 'Present'
    State  = 'Running'
}

# ...can be converted to a hash table:
$PolicyParameterInfo     = @(
  @{
    # Policy parameter name (mandatory)
    Name                 = 'ServiceName'
    # Policy parameter display name (mandatory)
    DisplayName          = 'windows service name.'
    # Policy parameter description (optional)
    Description          = 'Name of the windows service to be audited.'
    # DSC configuration resource type (mandatory)
    ResourceType         = 'Service'
    # DSC configuration resource id (mandatory)
    ResourceId           = 'UserSelectedNameExample'
    # DSC configuration resource property name (mandatory)
    ResourcePropertyName = 'Name'
    # Policy parameter default value (optional)
    DefaultValue         = 'winrm'
    # Policy parameter allowed values (optional)
    AllowedValues        = @('BDESVC','TermService','wuauserv','winrm')
  })

# ...and then passed into the `New-GuestConfigurationPolicy` cmdlet
$PolicyParam = @{
  PolicyId      = 'My GUID'
  ContentUri    = $contentUri
  DisplayName   = 'Audit Windows Service.'
  Description   = "Audit if a Windows Service isn't enabled on Windows machine."
  Path          = '.\policies\auditIfNotExists.json'
  Parameter     = $PolicyParameterInfo
  PolicyVersion = 1.0.0
}

New-GuestConfigurationPolicy @PolicyParam

Публикация определения Политики Azure

Наконец, можно опубликовать определения политики с помощью командлета New-AzPolicyDefinition . Приведенные ниже команды публикуют политику конфигурации компьютера в центре политик.

Чтобы выполнить New-AzPolicyDefinition команду, необходимо получить доступ к созданию определений политик в Azure. Требования к авторизации описаны на странице Общие сведения о Политике Azure. Рекомендуется Resource Policy Contributorиспользовать встроенную роль.

New-AzPolicyDefinition -Name 'mypolicydefinition' -Policy '.\policies\auditIfNotExists.json'

Или, если политика является развертыванием, если политика не существует (DINE) используйте следующую команду:

New-AzPolicyDefinition -Name 'mypolicydefinition' -Policy '.\policies\deployIfNotExists.json'

Последний шаг после создания определения политики в Azure — назначение определения. Узнайте, как назначать определение с помощью портала, Azure CLI и Azure PowerShell.

Жизненный цикл политики

Если вы хотите выпустить обновление определения политики, внесите изменения в пакет гостевой конфигурации и сведения об определении Политики Azure.

Примечание.

Свойство version назначения конфигурации машины влияет только на пакеты, размещенные корпорацией Майкрософт. Для управления версиями пользовательского содержимого рекомендуется указывать версию в имени файла.

Во-первых, при запуске New-GuestConfigurationPackageукажите имя пакета, которое делает его уникальным из предыдущих версий. Номер версии можно включить в имя файла, например PackageName_1.0.0. Число в этом примере используется только для того, чтобы сделать пакет уникальным, и не означает, что этот пакет должен считаться более новым или более старым, чем другие пакеты.

Во-вторых, обновите параметры, используемые с командлетом New-GuestConfigurationPolicy, после каждого из приведенных ниже объяснений.

  • Версия. При запуске командлета New-GuestConfigurationPolicy необходимо указать номер версии, превышающий опубликованный в данный момент номер версии.
  • contentUri: при выполнении командлета New-GuestConfigurationPolicy необходимо указать URI расположения пакета. Включение версии пакета в имя файла гарантирует, что значение этого свойства изменяется в каждом выпуске.
  • contentHash: New-GuestConfigurationPolicy командлет автоматически обновляет это свойство. Это значение хэша пакета, созданного командлетом New-GuestConfigurationPackage. Это свойство должно соответствовать публикуемому файлу .zip. Если обновляется только свойство contentUri , расширение отклоняет пакет содержимого.

Самый простой способ выпуска обновленного пакета — повторить процесс, описанный в этой статье, и указать обновленный номер версии. Этот позволит гарантировать, что все свойства были обновлены правильно.

Следующие шаги