Поделиться через


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

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

Important

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

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

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

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

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

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

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

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

Note

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

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

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

Параметры командлета New-GuestConfigurationPolicy :

  • PolicyId: уникальный идентификатор GUID.

  • ContentUri: общедоступный URI HTTP(s) пакета содержимого машинной конфигурации.

  • DisplayName: отображаемое имя политики.

  • Описание: описание политики.

  • Параметр: параметры политики, предоставляемые в хэш-таблице.

  • PolicyVersion: версия политики.

  • Путь: путь назначения, в котором создаются определения политик. Не указывайте этот параметр в качестве пути к локальной копии пакета.

  • Платформа: целевая платформа (Windows/Linux) для политики конфигурации компьютера и пакета содержимого.

  • Режим: (учет регистра: ApplyAndMonitor, ApplyAndAutoCorrect) Auditвыберите, должна ли политика выполнять аудит или развертывание конфигурации. Значение по умолчанию — Audit.

  • Тег. Добавляет один или несколько фильтров тегов в определение политики.

  • Категория: задает поле метаданных категории в определении политики.

  • LocalContentPath: путь к локальной .zip копии файла пакета конфигурации компьютера. Этот параметр необходим, если вы используете управляемое удостоверение, назначаемое пользователем, для предоставления доступа к объекту BLOB в хранилище Azure.

  • ManagedIdentityResourceId: resourceId управляемое удостоверение, назначаемое пользователем, которое имеет доступ на чтение к BLOB-объекту службы хранилища Azure, содержаному .zip файлу пакета конфигурации компьютера. Этот параметр необходим, если вы используете управляемое удостоверение, назначенное пользователем, для предоставления доступа к объекту BLOB в хранилище Azure.

  • ИсключениеArcMachines: указывает, что определение политики должно исключить компьютеры Arc. Этот параметр необходим, если вы используете управляемое удостоверение, назначаемое пользователем, для предоставления доступа к BLOB-объекту службы хранилища Azure.

  • UseSystemAssignedIdentity: это возможность использовать назначенное системой удостоверение для скачивания пакета из контейнера учетной записи хранения вместо использования URL-адреса SaS.

    Этот параметр нельзя использовать с ManagedIdentityResourceId. Варианты являются взаимоисключающими.

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

Important

В отличие от виртуальных машин Azure, компьютеры, подключенные к Arc, в настоящее время не поддерживают управляемые удостоверения с назначением пользователем. В результате необходим флаг для -ExcludeArcMachines исключения этих компьютеров из определения политики. Чтобы виртуальная машина Azure могла скачать назначенный пакет и применить политику, агент гостевой конфигурации должен быть версии 1.29.82.0 или выше для Windows и версии 1.26.76.0 или выше для Linux.

Для машин, подключенных к Arc, можно также использовать системные назначенные управляемые идентичности для скачивания пакетов.

Дополнительные сведения о параметре 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

Создайте определение политики, которое применяет пользовательский пакет конфигурации с помощью User-Assigned Managed Identity:

$PolicyConfig3      = @{
  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'
  LocalContentPath          = "C:\Local\Path\To\Package"      # Required parameter for managed identity
  ManagedIdentityResourceId = "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{identityName}" # Required parameter for managed identity
}

New-GuestConfigurationPolicy @PolicyConfig3 -ExcludeArcMachines

Для этого сценария необходимо отключить параметр "Разрешить анонимный доступ к BLOB-объектам" и назначить роль Читатель данных BLOB-объектов хранения для учётной записи хранения этому удостоверению.

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

$PolicyConfig4      = @{
  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'
  LocalContentPath          = "C:\Local\Path\To\Package"      # Required parameter for managed identity
}
New-GuestConfigurationPolicy @PolicyConfig4 -UseSystemAssignedIdentity

Для этого сценария необходимо отключить параметр «Разрешить анонимный доступ к BLOB-объектам» и назначить роль чтения данных BLOB-объектов хранилища к учетной записи хранения для системного удостоверения.

Note

Идентификатор ресурса управляемого удостоверения можно получить с помощью командлета Get-AzUserAssignedIdentity PowerShell.

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

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

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

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

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

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

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

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

  • String
  • Boolean
  • Double
  • Float

Командлеты 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.

Policy lifecycle

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

Note

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

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

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

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

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

Next steps