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:
- Eseguire il cmdlet per firmare il pacchetto di contenuto.
- 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.
Contenuto correlato
- Usare il modulo
GuestConfiguration
per creare una definizione di Criteri di Azure per la gestione su larga scale dell'ambiente. - Assegnare la definizione dei criteri personalizzata usando il portale di Azure.
- Informazioni su come visualizzare i dettagli di conformità per le assegnazioni dei criteri di configurazione del computer.