Поделиться через


Подписывание пакетов конфигурации машины

Пользовательские политики конфигурации компьютера используют хэш SHA256 для проверки того, что пакет политики не изменился. При необходимости клиенты также могут использовать сертификат для подписания пакетов и настроить расширение компьютерной конфигурации на использование только подписанного содержимого.

Чтобы включить этот сценарий, необходимо выполнить два шага.

  1. Запустите командлет, чтобы подписать пакет содержимого.
  2. Добавьте тег на компьютеры, для которых требуется подписать код.

Проверка подписи с помощью сертификата для подписи кода

Чтобы использовать функцию проверки подписи, запустите командлет Protect-GuestConfigurationPackage для подписания пакета перед его публикацией. Для этого командлета требуется сертификат подписывания кода. Если у вас нет сертификата подписывания кода, используйте следующий сценарий, чтобы создать самозаверяющий сертификат для тестирования, чтобы следовать примеру.

Проверка подписи 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

Проверка подписи 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 принимает следующие параметры:

  • Путь: полный путь к пакету конфигурации компьютера.
  • Сертификат: сертификат подписывания кода для подписывания пакета. Этот параметр поддерживается только при подписывании содержимого для Windows.
  • PrivateGpgKeyPath: полный путь к файлу закрытого ключа .gpg . Этот параметр поддерживается только при подписывании содержимого для Linux.
  • PublicGpgKeyPath: полный путь к файлу открытого ключа .gpg . Этот параметр поддерживается только при подписывании содержимого для Linux.

Требования к сертификатам

Агент конфигурации компьютера ожидает, что открытый ключ сертификата будет присутствовать в "Доверенных издателях" на компьютерах Windows и в пути /usr/local/share/ca-certificates/gc на компьютерах Linux. Чтобы узел проверял подписанное содержимое, установите открытый ключ сертификата на компьютер перед применением настраиваемой политики.

Открытый ключ сертификата можно установить с помощью обычных средств на виртуальной машине или с помощью Политика Azure. Пример шаблона с помощью Политика Azure показывает, как развернуть компьютер с помощью сертификата. Политика доступа Key Vault должна разрешать поставщику вычислительных ресурсов доступ к сертификатам во время развертывания. Подробные инструкции см. в разделе Настройка хранилища ключей для виртуальных машин в Azure Resource Manager.

Ниже приводится пример экспорта открытого ключа из сертификата для подписи для последующего импорта на компьютер.

$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

Требования к тегам

После публикации содержимого добавьте тег с именем GuestConfigPolicyCertificateValidation и значением enabled на все виртуальные машины, где требуется подписывание кода. См. примеры тегов, чтобы узнать, как организовать доставку тегов в большом масштабе с помощью службы "Политика Azure". Когда тег создан, определение политики, созданное с помощью командлета New-GuestConfigurationPolicy, обеспечивает соблюдение требования за счет расширения компьютерной конфигурации.