Подписывание пакетов конфигурации машины
Пользовательские политики конфигурации компьютера используют хэш SHA256 для проверки того, что пакет политики не изменился. При необходимости клиенты также могут использовать сертификат для подписания пакетов и настроить расширение компьютерной конфигурации на использование только подписанного содержимого.
Чтобы включить этот сценарий, необходимо выполнить два шага.
- Запустите командлет, чтобы подписать пакет содержимого.
- Добавьте тег на компьютеры, для которых требуется подписать код.
Проверка подписи с помощью сертификата для подписи кода
Чтобы использовать функцию проверки подписи, запустите командлет 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
, обеспечивает соблюдение требования за счет расширения компьютерной конфигурации.
Связанный контент
- Используйте модуль
GuestConfiguration
для создания определения Политики Azure для управления средой в большом масштабе. - Назначьте пользовательское определение политики с помощью портала Azure.
- Узнайте, как просматривать сведения о соответствии для назначений политики конфигурации машины.