Partager via


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 :

  1. Exécutez l’applet de commande pour signer le package de contenu.
  2. 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.