Configuratiepakketten voor machines ondertekenen
Aangepast beleid voor machineconfiguratie maakt gebruik van een 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.
- 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'
}
$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
Validatie van Linux-handtekening
# 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
Parameters van de Protect-GuestConfigurationPackage
cmdlet:
- Pad: Volledig pad naar het configuratiepakket van de machine.
- Certificaat: codeondertekeningscertificaat om het pakket te ondertekenen. Deze parameter wordt alleen ondersteund bij het ondertekenen van inhoud voor Windows.
- PrivateGpgKeyPath: volledig pad naar het bestand met de persoonlijke sleutel
.gpg
. Deze parameter wordt alleen ondersteund bij het ondertekenen van inhoud voor Linux. - PublicGpgKeyPath: volledig pad naar het openbare-sleutelbestand
.gpg
. Deze parameter wordt alleen ondersteund bij het ondertekenen van inhoud voor Linux.
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.
U kunt de openbare sleutel van het certificaat installeren met behulp van normale hulpprogramma's in de VIRTUELE machine of met behulp van Azure Policy. Een voorbeeldsjabloon met behulp van Azure Policy laat zien hoe u een machine met een certificaat kunt implementeren. 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=<CN-of-your-signing-certificate>' } |
Select-Object -First 1
$Cert | Export-Certificate -FilePath '<path-to-export-public-key-cer-file>' -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.
Gerelateerde inhoud
- Gebruik de module
GuestConfiguration
om een Azure Policy-definitie te maken voor beheer op schaal van uw omgeving. - Wijs de aangepaste beleidsdefinitie toe met behulp Azure Portal.
- Meer informatie over het weergeven van nalevingsdetails voor toewijzingen van computerconfiguratiebeleid .