Condividi tramite


Come firmare i pacchetti di configurazione del computer

I criteri personalizzati di configurazione del computer usano un hash SHA256 per verificare che il pacchetto di criteri non sia stato modificato. Facoltativamente, i clienti possono anche usare un certificato per firmare i pacchetti e forzare l'estensione di configurazione del computer per consentire solo il contenuto firmato.

Per abilitare questo scenario, è necessario completare due passaggi:

  1. Eseguire il cmdlet per firmare il pacchetto di contenuto.
  2. Aggiungere un tag ai computer che devono richiedere la firma del codice.

Convalida della firma con un certificato di firma del codice

Per usare la funzionalità di convalida della firma, eseguire il cmdlet Protect-GuestConfigurationPackage per firmare il pacchetto prima di pubblicarlo. Questo cmdlet richiede un certificato di firma del codice. Se non si dispone di un certificato di firma del codice, usare lo script seguente per creare un certificato autofirmato a scopo di test da seguire con l'esempio.

Convalida della firma di 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

Convalida della firma 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

Parametri del cmdlet Protect-GuestConfigurationPackage:

  • Percorso: percorso completo del pacchetto di configurazione del computer.
  • Certificato: certificato di firma del codice per firmare il pacchetto. Questo parametro è supportato solo quando si firma il contenuto per Windows.
  • PrivateGpgKeyPath: percorso completo del file di chiave .gpg privata. Questo parametro è supportato solo quando si firma il contenuto per Linux.
  • PublicGpgKeyPath: percorso completo del file di chiave .gpg pubblica. Questo parametro è supportato solo quando si firma il contenuto per Linux.

Requisiti del certificato

L'agente di configurazione del computer prevede che la chiave pubblica del certificato sia presente in "Autori attendibili" nei computer Windows e nel percorso /usr/local/share/ca-certificates/gc nei computer Linux. Per consentire al nodo di verificare il contenuto firmato, installare la chiave pubblica del certificato nel computer prima di applicare i criteri personalizzati.

È possibile installare la chiave pubblica del certificato usando gli strumenti normali all'interno della macchina virtuale o usando Criteri di Azure. Un modello di esempio che usa Criteri di Azure illustra come distribuire un computer con un certificato. I criteri di accesso di Key Vault devono consentire al provider di risorse di calcolo di accedere ai certificati durante le distribuzioni. Per i passaggi dettagliati, vedere Configurare Key Vault per le macchine virtuali in Azure Resource Manager.

Di seguito è riportato un esempio di esportazione della chiave pubblica da un certificato di firma, per importarla quindi nel computer.

$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

Requisiti dei tag

Una volta pubblicato il contenuto, accodare un tag con il nome GuestConfigPolicyCertificateValidation e il valore enabled a tutte le macchine virtuali in cui deve essere richiesta la firma del codice. Vedere gli esempi di tag per informazioni sulle modalità di distribuzione dei tag su larga scala usando Criteri di Azure. Dopo che questo tag è stato inserito, la definizione dei criteri generata usando il New-GuestConfigurationPolicy cmdlet abilita il requisito tramite l'estensione di configurazione del computer.