Signieren von Paketartefakten für Computerkonfigurationen
Benutzerdefinierte Richtlinien für Computerkonfigurationen verwenden einen SHA256-Hash, um zu validieren, ob sich das Richtlinienpaket nicht geändert hat. Optional können Kunden auch ein Zertifikat nutzen, um Pakete zu signieren und für die Computerkonfigurationserweiterung zu erzwingen, dass nur signierte Inhalte zulässig sind.
Für dieses Szenario müssen Sie zwei Schritte ausführen:
- Führen Sie das Cmdlet aus, um das Inhaltspaket zu signieren.
- Fügen Sie ein Tag an die Computer an, auf denen Code signiert werden muss.
Signaturüberprüfung mithilfe eines Codesignaturzertifikats
Führen Sie zum Verwenden des Features für die Signaturüberprüfung das Cmdlet Protect-GuestConfigurationPackage
aus, um das Paket vor der Veröffentlichung zu signieren. Für dieses Cmdlet ist ein Zertifikat für das „Codesignieren“ erforderlich. Wenn Sie kein Zertifikat für „Codesignieren“ besitzen, verwenden Sie das folgende Skript, um ein selbstsigniertes Zertifikat zu Testzwecken zu erstellen, damit Sie dem Beispiel folgen können.
Windows-Signaturüberprüfung
# 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
Linux-Signaturüberprüfung
# 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
Parameter des Cmdlets Protect-GuestConfigurationPackage
:
- Pfad: Vollständiger Pfad zum Maschinenkonfigurationspaket.
- Zertifikat: Codesignaturzertifikat zum Signieren des Pakets. Dieser Parameter wird nur beim Signieren von Inhalt für Windows unterstützt.
- PrivateGpgKeyPath: Vollständiger Pfad zur
.gpg
-Datei des privaten Schlüssels. Dieser Parameter wird nur beim Signieren von Inhalt für Linux unterstützt. - PublicGpgKeyPath: Vollständiger Pfad zur
.gpg
-Datei des öffentlichen Schlüssels. Dieser Parameter wird nur beim Signieren von Inhalt für Linux unterstützt.
Zertifikatanforderungen
Der Computerkonfigurations-Agent erwartet, dass der öffentliche Schlüssel des Zertifikats auf Windows-Computern unter „Vertrauenswürdige Herausgeber“ und auf Linux-Computern im Pfad /usr/local/share/ca-certificates/gc
vorhanden ist. Damit auf dem Knoten signierter Inhalt überprüft werden kann, müssen Sie den öffentlichen Schlüssel des Zertifikats auf dem Computer installieren, bevor Sie die benutzerdefinierte Richtlinie anwenden.
Sie können den öffentlichen Schlüssel des Zertifikats mithilfe normaler Tools innerhalb des virtuellen Computers oder mithilfe von Azure Policy installieren. Eine Beispielvorlage mit Azure Policy zeigt, wie Sie einen Computer mit einem Zertifikat bereitstellen können. In der Key Vault-Zugriffsrichtlinie muss es für den Computeressourcenanbieter zulässig sein, bei Bereitstellungen auf Zertifikate zuzugreifen. Informationen zu den ausführlichen Schritten finden Sie unter Einrichten des Schlüsseltresors für virtuelle Computer in Azure Resource Manager.
Hier ist ein Beispiel für den Export des öffentlichen Schlüssels aus einem Signaturzertifikat angegeben, um ihn dann auf dem Computer importieren zu können.
$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
Tag-Anforderungen
Fügen Sie nach dem Veröffentlichen Ihres Inhalts ein Tag mit dem Namen GuestConfigPolicyCertificateValidation
und dem Wert enabled
an alle virtuellen Computer an, für die das Codesignieren erforderlich ist. Informationen darüber, wie Tags mithilfe von Azure Policy im großen Stil bereitgestellt werden können, finden Sie in den Tagbeispielen. Wenn dieses Tag vorhanden ist, ermöglicht die Richtliniendefinition, die mit dem Cmdlet New-GuestConfigurationPolicy
generiert wurde, die Anforderung über die Computerkonfigurationserweiterung.
Zugehöriger Inhalt
- Verwenden Sie das Modul
GuestConfiguration
zum Erstellen einer Azure Policy-Definition für die Verwaltung Ihrer Umgebung im großen Stil. - Weisen Sie Ihre Richtliniendefinition mithilfe des Azure-Portals zu.
- Erfahren Sie, wie Sie die Richtlinienzuweisungen Konformitätsdetails für die Maschinenkonfiguration anzeigen.