Jak podpisać pakiety konfiguracji maszyny
Zasady niestandardowe konfiguracji maszyny używają skrótu SHA256, aby sprawdzić, czy pakiet zasad nie został zmieniony. Opcjonalnie klienci mogą również używać certyfikatu do podpisywania pakietów i wymuszania rozszerzenia konfiguracji maszyny, aby zezwalać tylko na podpisaną zawartość.
Aby włączyć ten scenariusz, należy wykonać dwa kroki:
- Uruchom polecenie cmdlet , aby podpisać pakiet zawartości.
- Dołącz tag do maszyn, które powinny wymagać podpisania kodu.
Walidacja podpisu przy użyciu certyfikatu podpisywania kodu
Aby użyć funkcji Walidacja podpisu, uruchom Protect-GuestConfigurationPackage
polecenie cmdlet , aby podpisać pakiet przed jego opublikowaniem. To polecenie cmdlet wymaga certyfikatu "Podpisywanie kodu". Jeśli nie masz certyfikatu "Podpisywanie kodu", użyj następującego skryptu, aby utworzyć certyfikat z podpisem własnym do celów testowych, aby postępować zgodnie z przykładem.
Walidacja podpisu systemu 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
Walidacja podpisu systemu 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
Protect-GuestConfigurationPackage
Parametry polecenia cmdlet:
- Ścieżka: pełna ścieżka do pakietu konfiguracji maszyny.
- Certyfikat: certyfikat podpisywania kodu w celu podpisania pakietu. Ten parametr jest obsługiwany tylko podczas podpisywania zawartości dla systemu Windows.
- PrivateGpgKeyPath: pełna ścieżka do pliku klucza
.gpg
prywatnego. Ten parametr jest obsługiwany tylko podczas podpisywania zawartości dla systemu Linux. - PublicGpgKeyPath: pełna ścieżka do pliku klucza
.gpg
publicznego. Ten parametr jest obsługiwany tylko podczas podpisywania zawartości dla systemu Linux.
Wymagania dotyczące certyfikatu
Agent konfiguracji maszyny oczekuje, że klucz publiczny certyfikatu będzie obecny w "Zaufanych wydawcach" na maszynach z systemem Windows i w ścieżce /usr/local/share/ca-certificates/gc
na maszynach z systemem Linux. Aby węzeł zweryfikował podpisaną zawartość, zainstaluj klucz publiczny certyfikatu na maszynie przed zastosowaniem zasad niestandardowych.
Klucz publiczny certyfikatu można zainstalować przy użyciu normalnych narzędzi wewnątrz maszyny wirtualnej lub przy użyciu usługi Azure Policy. Przykładowy szablon korzystający z usługi Azure Policy pokazuje, jak można wdrożyć maszynę przy użyciu certyfikatu. Zasady dostępu usługi Key Vault muszą zezwalać dostawcy zasobów obliczeniowych na dostęp do certyfikatów podczas wdrożeń. Aby uzyskać szczegółowe instrukcje, zobacz Konfigurowanie usługi Key Vault dla maszyn wirtualnych w usłudze Azure Resource Manager.
Poniżej przedstawiono przykład eksportowania klucza publicznego z certyfikatu podpisywania w celu zaimportowania go do maszyny.
$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
Wymagania dotyczące tagów
Po opublikowaniu zawartości dołącz tag o nazwie GuestConfigPolicyCertificateValidation
i wartości enabled
do wszystkich maszyn wirtualnych, na których powinno być wymagane podpisywanie kodu. Zobacz Przykłady tagów, aby dowiedzieć się, jak tagi można dostarczać na dużą skalę przy użyciu usługi Azure Policy. Po utworzeniu tego tagu definicja zasad wygenerowana przy użyciu polecenia cmdlet umożliwia wymaganie za pośrednictwem New-GuestConfigurationPolicy
rozszerzenia konfiguracji maszyny.
Powiązana zawartość
- Użyj modułu
GuestConfiguration
, aby utworzyć definicję usługi Azure Policy do zarządzania środowiskiem na dużą skalę. - Przypisz niestandardową definicję zasad przy użyciu witryny Azure Portal.
- Dowiedz się, jak wyświetlić szczegóły zgodności przypisań zasad konfiguracji maszyny.