Udostępnij za pośrednictwem


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:

  1. Uruchom polecenie cmdlet , aby podpisać pakiet zawartości.
  2. 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.