Dela via


Så här signerar du konfigurationspaket för datorer

Anpassade principer för datorkonfiguration använder en SHA256-hash för att verifiera att princippaketet inte har ändrats. Alternativt kan kunder också använda ett certifikat för att signera paket och tvinga datorkonfigurationstillägget att endast tillåta signerat innehåll.

För att aktivera det här scenariot finns det två steg som du måste utföra:

  1. Kör cmdleten för att signera innehållspaketet.
  2. Lägg till en tagg till datorerna som ska kräva att kod signeras.

Signaturverifiering med hjälp av ett kodsigneringscertifikat

Om du vill använda funktionen Signaturverifiering kör du cmdleten Protect-GuestConfigurationPackage för att signera paketet innan det publiceras. Den här cmdleten kräver ett "kodsigneringscertifikat". Om du inte har ett "kodsigneringscertifikat" använder du följande skript för att skapa ett självsignerat certifikat i testsyfte för att följa med i exemplet.

Validering av Windows-signatur

# 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

Validering av Linux-signatur

# 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

Cmdletens Protect-GuestConfigurationPackage parametrar:

  • Sökväg: Fullständig sökväg till datorkonfigurationspaketet.
  • Certifikat: Kodsigneringscertifikat för att signera paketet. Den här parametern stöds endast vid signering av innehåll för Windows.
  • PrivateGpgKeyPath: Fullständig sökväg till den privata nyckelfilen .gpg . Den här parametern stöds endast vid signering av innehåll för Linux.
  • PublicGpgKeyPath: Fullständig sökväg till den offentliga nyckelfilen .gpg . Den här parametern stöds endast vid signering av innehåll för Linux.

Certifikatkrav

Datorkonfigurationsagenten förväntar sig att certifikatets offentliga nyckel finns i "Betrodda utgivare" på Windows-datorer och i sökvägen /usr/local/share/ca-certificates/gc på Linux-datorer. För att noden ska verifiera signerat innehåll installerar du den offentliga certifikatnyckeln på datorn innan du tillämpar den anpassade principen.

Du kan installera certifikatets offentliga nyckel med hjälp av vanliga verktyg på den virtuella datorn eller med hjälp av Azure Policy. En exempelmall med Azure Policy visar hur du kan distribuera en dator med ett certifikat. Åtkomstprincipen för Key Vault måste tillåta beräkningsresursprovidern att komma åt certifikat under distributioner. Detaljerade steg finns i Konfigurera Key Vault för virtuella datorer i Azure Resource Manager.

Följande är ett exempel för att exportera den offentliga nyckeln från ett signeringscertifikat för att importera till datorn.

$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

Taggkrav

När innehållet har publicerats lägger du till en tagg med namn GuestConfigPolicyCertificateValidation och värde enabled på alla virtuella datorer där kodsignering ska krävas. Se Taggexempel för hur taggar kan levereras i stor skala med hjälp av Azure Policy. När den här taggen är på plats aktiverar principdefinitionen New-GuestConfigurationPolicy som genereras med hjälp av cmdleten kravet via datorkonfigurationstillägget.