Guide pratique pour signer des packages de configuration de machine
Les stratégies personnalisées de configuration d’ordinateur utilisent le hachage SHA256 pour vérifier que le package de stratégie n’a pas changé. En option, les clients peuvent également utiliser un certificat pour signer des packages et forcer l’extension de configuration de machine à autoriser uniquement le contenu signé.
Pour activer ce scénario, vous devez effectuer deux étapes :
- Exécutez l’applet de commande pour signer le package de contenu.
- Ajoutez une balise aux machines qui doivent exiger la signature du code.
Validation de signature à l’aide d’un certificat de signature de code
Pour utiliser la fonctionnalité de validation de signature, exécutez la cmdlet Protect-GuestConfigurationPackage
pour signer le package avant sa publication. Cette cmdlet nécessite un certificat de « signature du code ». Si vous n’avez pas de certificat de « code de signature », utilisez le script suivant pour créer un certificat auto-signé à des fins de test pour suivre l’exemple.
Validation des signatures 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
Validation des signatures 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
Paramètres de la cmdlet Protect-GuestConfigurationPackage
:
- Path : chemin d’accès complet au package de configuration d’ordinateur.
- Certificat : Certificat de signature de code pour signer le package. Ce paramètre est uniquement pris en charge lors de la signature de contenu pour Windows.
- PrivateGpgKeyPath : chemin d’accès complet au fichier de clé privée
.gpg
. Ce paramètre est uniquement pris en charge lors de la signature de contenu pour Linux. - PublicGpgKeyPath : chemin d’accès complet au fichier de clé publique
.gpg
. Ce paramètre est uniquement pris en charge lors de la signature de contenu pour Linux.
Configuration requise des certificats
L'agent de configuration de la machine s'attend à ce que la clé publique du certificat soit présente dans « Serveurs de publication fiables » sur les machines Windows et dans le chemin d'accès sur les machines Linux /usr/local/share/ca-certificates/gc
. Pour que le nœud vérifie le contenu signé, installez la clé publique du certificat sur la machine avant d’appliquer la stratégie personnalisée.
Vous pouvez installer la clé publique du certificat à l’aide d’outils normaux dans la machine virtuelle ou à l’aide d’Azure Policy. Un exemple de modèle utilisant Azure Policy montre comment déployer une machine avec un certificat. La stratégie d’accès Key Vault doit autoriser le fournisseur de ressources de calcul à accéder aux certificats lors des déploiements. Pour les étapes détaillées, consultez Configurer Key Vault pour des machines virtuelles dans Azure Resource Manager.
Voici un exemple d’exportation de la clé publique à partir d’un certificat de signature, à importer vers la machine.
$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
Exigences de balise
Une fois votre contenu publié, ajoutez une balise nommée GuestConfigPolicyCertificateValidation
et avec une valeur enabled
à toutes les machines virtuelles où la signature du code doit être requise. Pour plus d'informations sur la façon dont les balises peuvent être délivrées à grande échelle à l'aide d'Azure Policy, consultez les Exemples de balises. Une fois cette balise en place, la définition de stratégie générée via l’applet de commande New-GuestConfigurationPolicy
met en œuvre l’exigence via l’extension de configuration de machine.
Contenu connexe
- Utilisez le module
GuestConfiguration
afin de créer une définition Azure Policy pour une gestion à grande échelle de votre environnement. - Attribuez votre définition de stratégie personnalisée à l’aide du portail Azure.
- Découvrez comment visualiser les informations relatives à la conformité pour les attributions de stratégie de la configuration de la machine.