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 AuditIfNotExists
DeployIfNotExists
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. Não especifique esse parâmetro como o caminho para uma cópia local do pacote.
- 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.
- Categoria: Define o campo de metadados da categoria na definição de política.
- LocalContentPath: O caminho para a cópia local do
.zip
arquivo do pacote de Configuração da Máquina. Esse parâmetro é necessário se você estiver usando uma Identidade Gerenciada Atribuída pelo Usuário para fornecer acesso a um blob do Azure Storge. - ManagedIdentityResourceId: A
resourceId
Identidade Gerenciada Atribuída ao Usuário que tem acesso de leitura ao blob de Armazenamento do Azure que contém o arquivo do pacote de Configuração da.zip
Máquina. Esse parâmetro é necessário se você estiver usando uma Identidade Gerenciada Atribuída pelo Usuário para fornecer acesso a um blob do Azure Storge. - ExcludeArcMachines: Especifica que a definição Policy deve excluir máquinas Arc. Esse parâmetro é necessário se você estiver usando uma Identidade Gerenciada Atribuída pelo Usuário para fornecer acesso a um blob do Azure Storge.
Importante
Ao contrário das VMs do Azure, as máquinas conectadas ao Arc atualmente não oferecem suporte a Identidades Gerenciadas Atribuídas pelo Usuário. Como resultado, o -ExcludeArcMachines
sinalizador é necessário para garantir a exclusão dessas máquinas da definição de política. Para que a VM do Azure baixe o pacote atribuído e aplique a política, o Agente de Configuração Convidado deve ser versão 1.29.82.0
ou superior para Windows e versão 1.26.76.0
ou superior para Linux.
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 imponha 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
Crie uma definição de política que imponha um pacote de configuração personalizado usando uma Identidade Gerenciada Atribuída pelo Usuário:
$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
Nota
Você pode recuperar o resorceId de uma identidade gerenciada usando o Get-AzUserAssignedIdentity
cmdlet do PowerShell.
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 auditIfNotExists.json
e os arquivos que criam definições de política para aplicar configurações têm o nome deployIfNotExists.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 New-GuestConfigurationPolicy
suporta uma matriz de tabelas de hash contendo entradas de 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-GuestConfigurationPackage
o , 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
New-GuestConfigurationPolicy
cmdlet, você deve especificar um URI para o 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 porNew-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
- Atribua a sua definição de política personalizada com o portal do Azure.
- Saiba como exibir detalhes de conformidade para atribuições de política de configuração de máquina.