Compartilhar via


Como assinar pacotes de configuração de computador

As políticas personalizadas da configuração de computador usam um hash SHA256 para validar que o pacote de políticas não foi alterado. Como opção, os clientes também podem usar um certificado para assinar pacotes e forçar a extensão de configuração de computador a permitir somente o conteúdo assinado.

Para habilitar esse cenário, duas etapas precisam ser concluídas:

  1. Execute o cmdlet para assinar o pacote de conteúdo.
  2. Acrescente uma marca aos computadores que devem exigir que o código seja assinado.

Validação de assinatura usando um certificado de autenticação de código

Para usar o recurso de Validação de Assinatura, execute o cmdlet Protect-GuestConfigurationPackage para assinar o pacote antes que ele seja publicado. Esse cmdlet requer um certificado de “Assinatura de Código”. Se não tiver um certificado de "Assinatura de Código", use o script a seguir para criar um certificado autoassinado para fins de teste e acompanhar o exemplo.

Validação de assinatura do Windows

# How to create a self sign cert and use it to sign Machine Configuration
# custom policy package

# Create Code signing cert
$codeSigningParams = @{
    Type          = 'CodeSigningCert'
    DnsName       = 'GCEncryptionCertificate'
    HashAlgorithm = 'SHA256'
}
$certificate = New-SelfSignedCertificate @codeSigningParams

# Export the certificates
$privateKey = @{
    Cert     = $certificate
    Password = Read-Host "Enter password for private key" -AsSecureString
    FilePath = '<full-path-to-export-private-key-pfx-file>'
}
$publicKey = @{
    Cert     = $certificate
    FilePath = '<full-path-to-export-public-key-cer-file>'
    Force    = $true
}
Export-PfxCertificate @privateKey
Export-Certificate    @publicKey

# Import the certificate
$importParams = @{
    FilePath          = $privateKey.FilePath
    Password          = $privateKey.Password
    CertStoreLocation = 'Cert:\LocalMachine\My'
}
Import-PfxCertificate @importParams

# Sign the policy package
$certToSignThePackage = Get-ChildItem -Path Cert:\LocalMachine\My |
    Where-Object { $_.Subject -eq "CN=GCEncryptionCertificate" }
$protectParams = @{
    Path        = '<path-to-package-to-sign>'
    Certificate = $certToSignThePackage
    Verbose     = $true
}
Protect-GuestConfigurationPackage @protectParams

Validação de assinatura do Linux

# generate gpg key
gpg --gen-key

$emailAddress      = '<email-id-used-to-generate-gpg-key>'
$publicGpgKeyPath  = '<full-path-to-export-public-key-gpg-file>'
$privateGpgKeyPath = '<full-path-to-export-private-key-gpg-file>'

# export public key
gpg --output $publicGpgKeyPath --export $emailAddress

# export private key
gpg --output $privateGpgKeyPath --export-secret-key $emailAddress

# Sign linux policy package
Import-Module GuestConfiguration
$protectParams = @{
    Path              = '<path-to-package-to-sign>'
    PrivateGpgKeyPath = $privateGpgKeyPath
    PublicGpgKeyPath  = $publicGpgKeyPath
    Verbose           = $true
}
Protect-GuestConfigurationPackage

Parâmetros do cmdlet Protect-GuestConfigurationPackage:

  • Caminho: caminho completo para o pacote de configuração de máquina.
  • Certificado: certificado de autenticação de código para assinar o pacote. Esse parâmetro só tem suporte ao assinar um conteúdo para o Windows.
  • PrivateGpgKeyPath: caminho completo para o arquivo .gpg de chave privada. Esse parâmetro só tem suporte ao assinar um conteúdo para o Linux.
  • PublicGpgKeyPath: caminho completo para o arquivo .gpg de chave pública. Esse parâmetro só tem suporte ao assinar um conteúdo para o Linux.

Requisitos de certificado

O agente de configuração de máquina espera que a chave pública do certificado esteja presente no "Editor Confiável" nos computadores Windows e no caminho /usr/local/share/ca-certificates/gc nos computadores Linux. Para que o nó verifique o conteúdo assinado, instale a chave pública do certificado no computador antes de aplicar a política personalizada.

Instale a chave pública do certificado usando ferramentas normais dentro da VM ou usando o Azure Policy. Um modelo de exemplo usando o Azure Policy mostra como você poderá implantar um computador com um certificado. A política de acesso de Key Vault deve permitir o acesso do provedor de recursos de computação a certificados durante as implantações. Para obter etapas detalhadas, confira Configurar o Key Vault para máquinas virtuais no Azure Resource Manager.

A seguir, é apresentado um exemplo para exportar a chave pública de um certificado de assinatura e importar para o computador.

$Cert = Get-ChildItem -Path Cert:\LocalMachine\My |
    Where-Object { $_.Subject-eq 'CN=<CN-of-your-signing-certificate>' } |
    Select-Object -First 1

$Cert | Export-Certificate -FilePath '<path-to-export-public-key-cer-file>' -Force

Requisitos de tag

Depois que o conteúdo for publicado, acrescente uma tag com o nome GuestConfigPolicyCertificateValidation e o valor enabled a todas as máquinas virtuais em que a assinatura de código deve ser necessária. Consulte as Amostras de tag sobre como tags podem ser entregues em escala usando o Azure Policy. Depois que essa tag estiver sendo usada, a definição de política gerada usando o cmdlet New-GuestConfigurationPolicy habilita o requisito por meio da extensão da configuração de computador.