Delen via


Configuratiepakketten voor machines ondertekenen

Aangepaste beleidsregels voor machineconfiguratie maken gebruik van SHA256-hash om te controleren of het beleidspakket niet is gewijzigd. Klanten kunnen eventueel ook een certificaat gebruiken om pakketten te ondertekenen en de configuratie-extensie van de machine af te dwingen om alleen ondertekende inhoud toe te staan.

Als u dit scenario wilt inschakelen, moet u twee stappen uitvoeren. Voer de cmdlet uit om het inhoudspakket te ondertekenen en voeg een tag toe aan de computers waarvoor code moet worden ondertekend.

Handtekeningvalidatie met behulp van een certificaat voor ondertekening van code

Als u de functie Handtekeningvalidatie wilt gebruiken, voert u de Protect-GuestConfigurationPackage cmdlet uit om het pakket te ondertekenen voordat het wordt gepubliceerd. Voor deze cmdlet is een certificaat voor ondertekening van programmacode vereist. Als u geen certificaat voor ondertekening van programmacode hebt, gebruikt u het volgende script om een zelfondertekend certificaat te maken voor testdoeleinden om samen met het voorbeeld te volgen.

Validatie van Windows-handtekening

# 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'
}
$mycert = New-SelfSignedCertificate @codeSigningParams

# Export the certificates
$mypwd = ConvertTo-SecureString -String "Password1234" -Force -AsPlainText
$mycert | Export-PfxCertificate -FilePath C:\demo\GCPrivateKey.pfx -Password $mypwd
$mycert | Export-Certificate -FilePath "C:\demo\GCPublicKey.cer" -Force

# Import the certificate
$importParams = @{
    FilePath          = 'C:\demo\GCPrivateKey.pfx'
    Password          = $mypwd
    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        = 'C:\demo\AuditWindowsService.zip'
    Certificate = $certToSignThePackage
    Verbose     = $true
}
Protect-GuestConfigurationPackage @protectParams

Validatie van Linux-handtekening

# generate gpg key
gpg --gen-key

# export public key
gpg --output public.gpg --export <email-id-used-to-generate-gpg-key>

# export private key
gpg --output private.gpg --export-secret-key <email-id-used-to-generate-gpg-key>

# Sign linux policy package
Import-Module GuestConfiguration
$protectParams = @{
    Path              = './not_installed_application_linux.zip'
    PrivateGpgKeyPath = './private.gpg'
    PublicGpgKeyPath  = './public.gpg'
    Verbose           = $true
}
Protect-GuestConfigurationPackage

Parameters van de Protect-GuestConfigurationPackage cmdlet:

  • Pad: volledig pad van het configuratiepakket voor de machine.
  • Certificaat: codeondertekeningscertificaat om het pakket te ondertekenen. Deze parameter wordt alleen ondersteund bij het ondertekenen van inhoud voor Windows.

Certificaatvereisten

De machineconfiguratieagent verwacht dat de openbare sleutel van het certificaat aanwezig is in Vertrouwde uitgevers op Windows-computers en in het pad /usr/local/share/ca-certificates/gc op Linux-computers. Als u wilt dat het knooppunt ondertekende inhoud controleert, installeert u de openbare certificaatsleutel op de computer voordat u het aangepaste beleid toepast. Dit proces kan worden uitgevoerd met behulp van elke techniek binnen de VIRTUELE machine of met behulp van Azure Policy. Een voorbeeldsjabloon is beschikbaar voor het implementeren van een machine met een certificaat. Het Key Vault-toegangsbeleid moet de Compute-resourceprovider toegang geven tot certificaten tijdens implementaties. Zie Key Vault instellen voor virtuele machines in Azure Resource Manager voor gedetailleerde stappen.

Hieronder volgt een voorbeeld voor het exporteren van de openbare sleutel uit een handtekeningcertificaat, om deze te importeren naar de computer.

$Cert = Get-ChildItem -Path cert:\LocalMachine\My |
    Where-Object { $_.Subject-eq "CN=mycert3" } |
    Select-Object -First 1
$Cert | Export-Certificate -FilePath "$env:temp\DscPublicKey.cer" -Force

Tagvereisten

Nadat uw inhoud is gepubliceerd, voegt u een tag met naam GuestConfigPolicyCertificateValidation en waarde enabled toe aan alle virtuele machines waar ondertekening van code vereist moet zijn. Zie de tagvoorbeelden voor hoe tags op schaal kunnen worden geleverd met behulp van Azure Policy. Zodra deze tag is ingesteld, maakt de beleidsdefinitie die is gegenereerd met behulp van de New-GuestConfigurationPolicy cmdlet de vereiste via de computerconfiguratie-extensie mogelijk.