Partilhar via


Como assinar pacotes de configuração da máquina

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

Para habilitar esse cenário, há duas etapas que você precisa concluir:

  1. Execute o cmdlet para assinar o pacote de conteúdo.
  2. Anexe uma tag às máquinas que devem exigir que o código seja assinado.

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

Para usar o recurso Validação de Assinatura, execute o Protect-GuestConfigurationPackage cmdlet para assinar o pacote antes de ser publicado. Este cmdlet requer um certificado de 'Assinatura de código'. Se você não tiver um certificado de 'Assinatura de código', use o script a seguir para criar um certificado autoassinado para fins de teste a seguir junto com 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 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 Protect-GuestConfigurationPackage cmdlet:

  • Caminho: Caminho completo para o pacote de configuração da máquina.
  • Certificado: Certificado de assinatura de código para assinar o pacote. Este parâmetro só é suportado ao assinar conteúdo para Windows.
  • PrivateGpgKeyPath: Caminho completo para o arquivo de chave .gpg privada. Este parâmetro só é suportado ao assinar conteúdo para Linux.
  • PublicGpgKeyPath: Caminho completo para o arquivo de chave .gpg pública. Este parâmetro só é suportado ao assinar conteúdo para Linux.

Requisitos dos certificados

O agente de configuração da máquina espera que a chave pública do certificado esteja presente em "Editores confiáveis" em máquinas Windows e no caminho /usr/local/share/ca-certificates/gc em máquinas Linux. Para que o nó verifique o conteúdo assinado, instale a chave pública do certificado na máquina antes de aplicar a política personalizada.

Você pode instalar a chave pública do certificado usando ferramentas normais dentro da VM ou usando a Política do Azure. Um modelo de exemplo usando a Política do Azure mostra como você pode implantar uma máquina com um certificado. A política de acesso ao Cofre da Chave deve permitir que o provedor de recursos de computação acesse certificados durante as implantações. Para obter etapas detalhadas, consulte Configurar o Cofre da Chave para máquinas virtuais no Azure Resource Manager.

A seguir está um exemplo para exportar a chave pública de um certificado de assinatura, para importar para a máquina.

$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 nome GuestConfigPolicyCertificateValidation e valor enabled a todas as máquinas virtuais onde a assinatura de código deve ser necessária. Consulte os Exemplos de etiquetas para saber como as etiquetas podem ser entregues em escala utilizando a Política do Azure. Quando essa tag estiver em vigor, a definição de política gerada usando o New-GuestConfigurationPolicy cmdlet habilitará o requisito por meio da extensão de configuração da máquina.