Compartilhar via


Como assinar pacotes de configuração de computador

As políticas personalizadas da configuração de computador usam o 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. Execute o cmdlet para assinar o pacote de conteúdo e acrescente uma tag para os 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'
}
$mycert = New-SelfSignedCertificate @codeSigningParams

# Export the certificates
$mypwd = ConvertTo-SecureString -String "Password1234" -Force -AsPlainText
$mycert | Export-PfxCertificate -FilePath C:\demo\GCPrivateKey.pfx -Password $mypwd
$mycert | Export-Certificate -FilePath "C:\demo\GCPublicKey.cer" -Force

# Import the certificate
$importParams = @{
    FilePath          = 'C:\demo\GCPrivateKey.pfx'
    Password          = $mypwd
    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        = 'C:\demo\AuditWindowsService.zip'
    Certificate = $certToSignThePackage
    Verbose     = $true
}
Protect-GuestConfigurationPackage @protectParams

Validação de assinatura do Linux

# generate gpg key
gpg --gen-key

# export public key
gpg --output public.gpg --export <email-id-used-to-generate-gpg-key>

# export private key
gpg --output private.gpg --export-secret-key <email-id-used-to-generate-gpg-key>

# Sign linux policy package
Import-Module GuestConfiguration
$protectParams = @{
    Path              = './not_installed_application_linux.zip'
    PrivateGpgKeyPath = './private.gpg'
    PublicGpgKeyPath  = './public.gpg'
    Verbose           = $true
}
Protect-GuestConfigurationPackage

Parâmetros do cmdlet Protect-GuestConfigurationPackage:

  • Caminho: caminho completo do pacote de configuração de computador.
  • 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.

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. Esse processo pode ser feito usando qualquer técnica dentro da VM ou usando o Azure Policy. Um modelo de exemplo está disponível para 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=mycert3" } |
    Select-Object -First 1
$Cert | Export-Certificate -FilePath "$env:temp\DscPublicKey.cer" -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.