Partilhar via


Como criar definições de política de configuração de máquina personalizadas

Antes de começar, é uma boa ideia ler a página de visão geral da configuração da máquina e os detalhes sobre as opções de correção da configuração da máquina.

Importante

A extensão de configuração da máquina é necessária para máquinas virtuais do Azure. Para implantar a extensão em escala em todas as máquinas, atribua a seguinte iniciativa de política: Deploy prerequisites to enable machine configuration policies on virtual machines

Para usar pacotes de configuração de máquina que aplicam configurações, é necessária a extensão de configuração de convidado da VM do Azure versão 1.26.24 ou posterior, ou o agente Arc 1.10.0 ou posterior.

Definições de política de configuração de máquina personalizadas usando um ou AuditIfNotExistsDeployIfNotExists estão no status de suporte Geralmente Disponível (GA).

Use as etapas a seguir para criar suas próprias políticas que auditam a conformidade ou gerenciam o estado das máquinas habilitadas para Azure ou Arc.

Instalar o PowerShell 7 e os módulos necessários do PowerShell

Primeiro, configure um ambiente de criação de configuração de máquina para instalar a versão necessária do PowerShell para seu sistema operacional e o módulo GuestConfiguration .

Criar e publicar um artefato de pacote de configuração de máquina

Se ainda não o fez, crie e publique um pacote de configuração de máquina personalizado seguindo as etapas em Como criar artefatos de pacote de configuração de máquina personalizados. Em seguida, valide o pacote em seu ambiente de desenvolvimento seguindo as etapas em Como testar artefatos do pacote de configuração da máquina.

Nota

O código de exemplo neste artigo faz referência à $contentUri variável. Se você estiver usando a mesma sessão do PowerShell que os tutoriais anteriores para criar e testar seus artefatos de pacote, essa variável pode já ter o URI para seu pacote.

Se você não tiver a $contentUri variável definida como o URI do pacote em sua sessão do PowerShell, precisará defini-la. Este exemplo usa a cadeia de conexão de uma conta de armazenamento e o New-AzStorageContext cmdlet para criar um contexto de armazenamento. Em seguida, ele obtém o blob de armazenamento para o pacote publicado e usa as propriedades desse objeto para obter o URI de conteúdo.

$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

Requisitos de política para configuração de máquina

A seção de metadados de definição de política deve incluir duas propriedades para o serviço de configuração da máquina para automatizar o provisionamento e a geração de relatórios de atribuições de configuração de convidado. A propriedade category deve ser definida como Guest Configuration e uma seção chamada guestConfiguration deve conter informações sobre a atribuição de configuração da máquina. O New-GuestConfigurationPolicy cmdlet cria esse texto automaticamente.

O exemplo a seguir demonstra a seção de metadados criada automaticamente pelo 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": {}
    }
}

Se o efeito de definição for definido como DeployIfNotExists, a seção then deverá conter detalhes de implantação sobre uma atribuição de configuração de máquina. O New-GuestConfigurationPolicy cmdlet cria esse texto automaticamente.

Criar uma definição de Política do Azure

Depois que um pacote de política personalizada de configuração de máquina tiver sido criado e carregado, crie a definição de política de configuração de máquina. O New-GuestConfigurationPolicy cmdlet usa um pacote de política personalizado e cria uma definição de política.

O parâmetro PolicyId de requer uma cadeia de New-GuestConfigurationPolicy caracteres exclusiva. É necessário um identificador global exclusivo (GUID). Para novas definições, gere um novo GUID usando o New-GUID cmdlet. Ao fazer atualizações na definição, use a mesma cadeia de caracteres exclusiva para PolicyId para garantir que a definição correta seja atualizada.

Parâmetros do New-GuestConfigurationPolicy cmdlet:

  • PolicyId: Um GUID.
  • ContentUri: URI HTTP(s) público(s) do pacote de conteúdo de configuração da máquina.
  • DisplayName: Nome de exibição da política.
  • Descrição: Descrição da política.
  • Parâmetro: parâmetros de política fornecidos em uma tabela de hash.
  • PolicyVersion: Versão da política.
  • Caminho: caminho de destino onde as definições de política são criadas.
  • Plataforma: Plataforma de destino (Windows/Linux) para política de configuração de máquina e pacote de conteúdo.
  • Modo: (diferencia maiúsculas de minúsculas: ApplyAndMonitor, ApplyAndAutoCorrect, Audit) escolha se a política deve auditar ou implantar a configuração. A predefinição é Audit.
  • Tag adiciona um ou mais filtros de tag à definição de política
  • A categoria define o campo de metadados da categoria na definição da política

Para obter mais informações sobre o parâmetro Mode, consulte a página Como configurar opções de correção para configuração de máquina.

Crie uma definição de política que audite usando um pacote de configuração personalizado, em um caminho especificado:

$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

Crie uma definição de política que implante uma configuração usando um pacote de configuração personalizado, em um caminho especificado:

$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

A saída do cmdlet retorna um objeto que contém a definição, o nome para exibição e o caminho dos arquivos de política. Os arquivos JSON de definição que criam definições de política de auditoria têm o nome e os arquivos que criam definições de política para aplicar configurações têm o nome auditIfNotExists.jsondeployIfNotExists.json.

Filtrando políticas de configuração da máquina usando tags

As definições de política criadas por cmdlets no módulo GuestConfiguration podem, opcionalmente, incluir um filtro para tags. O parâmetro Tag de suporta uma matriz de tabelas de hash contendo entradas de New-GuestConfigurationPolicy tag individuais. As tags são adicionadas à seção if da definição de política e não podem ser modificadas por uma atribuição de política.

Segue-se um excerto de exemplo de uma definição de política que filtra etiquetas.

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

Usando parâmetros em definições de política de configuração de máquina personalizadas

A configuração da máquina suporta a substituição de propriedades de uma configuração DSC em tempo de execução. Esse recurso significa que os valores no arquivo MOF no pacote não precisam ser considerados estáticos. Os valores de substituição são fornecidos através da Política do Azure e não alteram a forma como as Configurações DSC são criadas ou compiladas.

A configuração da máquina suporta os seguintes tipos de valor para parâmetros:

  • String
  • Boolean
  • Duplo
  • Float

Os cmdlets New-GuestConfigurationPolicy e Get-GuestConfigurationPackageComplianceStatus incluem um parâmetro chamado Parameter. Esse parâmetro usa uma definição de tabela de hash, incluindo todos os detalhes sobre cada parâmetro, e cria as seções necessárias de cada arquivo usado para a definição de Política do Azure.

O exemplo a seguir cria uma definição de política para auditar um serviço, onde o usuário seleciona de uma lista no momento da atribuição da política.

# 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

Publicar a definição de Política do Azure

Finalmente, você pode publicar as definições de política usando o New-AzPolicyDefinition cmdlet. Os comandos abaixo publicam a política de configuração da máquina na central de políticas.

Para executar o New-AzPolicyDefinition comando, você precisa de acesso para criar definições de política no Azure. Os requisitos de autorização específicos estão documentados na página Visão Geral da Política do Azure. A função interna recomendada é Resource Policy Contributor.

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

Ou, se a política for uma política de implantação se não existir (DINE), use este comando:

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

Com a definição de política criada no Azure, a última etapa é atribuir a definição. Veja como atribuir a definição com o Portal, a CLI do Azure e o Azure PowerShell.

Ciclo de vida da política

Se você quiser lançar uma atualização para a definição de política, faça a alteração para o pacote de configuração de convidado e os detalhes de definição da Política do Azure.

Nota

A version propriedade da atribuição de configuração da máquina afeta apenas os pacotes hospedados pela Microsoft. A prática recomendada para controle de versão de conteúdo personalizado é incluir a versão no nome do arquivo.

Primeiro, ao executar New-GuestConfigurationPackageo , especifique um nome para o pacote que o torne exclusivo das versões anteriores. Você pode incluir um número de versão no nome, como PackageName_1.0.0. O número neste exemplo é usado apenas para tornar o pacote exclusivo, não para especificar que o pacote deve ser considerado mais recente ou mais antigo do que outros pacotes.

Em segundo lugar, atualize os parâmetros usados com o New-GuestConfigurationPolicy cmdlet seguindo cada uma das explicações a seguir.

  • Versão: ao executar o New-GuestConfigurationPolicy cmdlet, você deve especificar um número de versão maior do que o publicado no momento.
  • contentUri: Ao executar o cmdlet, você deve especificar um URI para o New-GuestConfigurationPolicy local do pacote. A inclusão de uma versão do pacote no nome do arquivo garante que o valor dessa propriedade seja alterado em cada versão.
  • contentHash: O New-GuestConfigurationPolicy cmdlet atualiza essa propriedade automaticamente. Trata-se de um valor hash do pacote criado por New-GuestConfigurationPackage. A propriedade deve estar correta para o .zip arquivo que você publica. Se apenas a propriedade contentUri for atualizada, a extensão rejeitará o pacote de conteúdo.

A maneira mais fácil de lançar um pacote atualizado é repetir o processo descrito neste artigo e especificar um número de versão atualizado. Esse processo garante que todas as propriedades foram atualizadas corretamente.

Próximos passos