Sdílet prostřednictvím


Jak podepsat balíčky konfigurace počítače

Vlastní zásady konfigurace počítače používají hodnotu hash SHA256 k ověření, že se balíček zásad nezměnil. Volitelně můžou zákazníci také použít certifikát k podepisování balíčků a vynutit rozšíření konfigurace počítače tak, aby umožňovalo jenom podepsaný obsah.

Pokud chcete tento scénář povolit, musíte provést dva kroky:

  1. Spuštěním rutiny podepište balíček obsahu.
  2. Připojte značku k počítačům, které by měly vyžadovat podepsání kódu.

Ověření podpisu pomocí podpisového certifikátu kódu

Pokud chcete použít funkci Ověření podpisu, spusťte rutinu Protect-GuestConfigurationPackage a podepište balíček před jeho publikováním. Tato rutina vyžaduje certifikát Podepisování kódu. Pokud nemáte certifikát "Podepisování kódu", pomocí následujícího skriptu vytvořte certifikát podepsaný svým držitelem pro účely testování, abyste mohli postupovat podle příkladu.

Ověření podpisu systému 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

Ověřování podpisu v Linuxu

# 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

Parametry rutiny Protect-GuestConfigurationPackage :

  • Cesta: Úplná cesta k balíčku konfigurace počítače.
  • Certifikát: Podpisový certifikát kódu pro podepsání balíčku. Tento parametr se podporuje pouze při podepisování obsahu pro Windows.
  • PrivateGpgKeyPath: Úplná cesta k souboru privátního klíče .gpg . Tento parametr se podporuje jenom při podepisování obsahu pro Linux.
  • PublicGpgKeyPath: Úplná cesta k souboru veřejného klíče .gpg . Tento parametr se podporuje jenom při podepisování obsahu pro Linux.

Požadavky na certifikáty

Agent konfigurace počítače očekává, že veřejný klíč certifikátu bude na počítačích s Windows a v cestě /usr/local/share/ca-certificates/gc na počítačích s Linuxem k dispozici veřejný klíč certifikátu. Aby uzel ověřil podepsaný obsah, nainstalujte na počítač veřejný klíč certifikátu před použitím vlastní zásady.

Veřejný klíč certifikátu můžete nainstalovat pomocí normálních nástrojů uvnitř virtuálního počítače nebo pomocí Služby Azure Policy. Ukázková šablona pomocí Azure Policy ukazuje, jak můžete nasadit počítač s certifikátem. Zásady přístupu ke službě Key Vault musí poskytovateli výpočetních prostředků povolit přístup k certifikátům během nasazení. Podrobný postup najdete v tématu Nastavení služby Key Vault pro virtuální počítače v Azure Resource Manageru.

Následuje příklad exportu veřejného klíče z podpisového certifikátu pro import do počítače.

$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

Požadavky na značky

Po publikování obsahu připojte značku s názvem GuestConfigPolicyCertificateValidation a hodnotou enabled ke všem virtuálním počítačům, kde by se mělo vyžadovat podepisování kódu. Ukázky značek vám pomůžou dodat značky ve velkém měřítku pomocí Azure Policy. Jakmile je tato značka na místě, definice zásady vygenerovaná pomocí New-GuestConfigurationPolicy rutiny umožňuje požadavek prostřednictvím rozšíření konfigurace počítače.