如何簽署電腦設定套件
計算機設定自定義原則會使用SHA256哈希來驗證原則套件尚未變更。 客戶也可選擇性地使用憑證來簽署套件,並強制機器設定延伸模組只允許已簽署的內容。
若要啟用此案例,您需要完成兩個步驟:
- 執行 Cmdlet 以簽署內容套件。
- 將標籤附加至需要簽署程式代碼的機器。
使用程式碼簽署憑證進行簽章驗證
若要使用簽章驗證功能,請執行 Protect-GuestConfigurationPackage
Cmdlet,以在套件發佈之前進行簽署。 此 Cmdlet 需要「程式碼簽署」憑證。 如果您沒有「程式碼簽署」憑證,請使用下列指令碼建立自我簽署憑證以供測試之用,並遵循此範例。
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
Cmdlet 的參數:
- 路徑:計算機組態套件的完整路徑。
- 憑證:用來簽署套件的程式碼簽署憑證。 只有在簽署 Windows 的內容時,才支援此參數。
- PrivateGpgKeyPath:私鑰
.gpg
檔案的完整路徑。 只有在簽署Linux內容時,才支援此參數。 - PublicGpgKeyPath:公鑰
.gpg
檔案的完整路徑。 只有在簽署Linux內容時,才支援此參數。
憑證需求
機器設定代理程式預期憑證公開金鑰會出現在 Windows 電腦上以及 Linux 電腦路徑 /usr/local/share/ca-certificates/gc
的「受信任的發行者」中。 若要讓節點驗證已簽署的內容,請先在電腦上安裝憑證公開金鑰,再套用自訂原則。
您可以使用 VM 內的一般工具或使用 Azure 原則 來安裝憑證公鑰。 使用 Azure 原則的範例範本範板示範如何使用憑證部署電腦。 Key Vault 存取原則必須允許計算資源提供者在部署期間存取憑證。 如需詳細步驟,請參閱在 Azure Resource Manager 中設定虛擬機器的 Key Vault。
下列是從簽署憑證匯出公開金鑰,以匯入到電腦的範例。
$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
Cmdlet 產生的原則定義就會透過機器設定延伸模組來啟用需求。
相關內容
- 使用
GuestConfiguration
模組來為您的環境建立大規模管理的 Azure 原則定義。 - 使用 Azure 入口網站指派您的自訂原則定義。
- 了解如何檢視機器設定的合規性詳細資料原則指派。