Compartir a través de


Firma de los paquetes de configuración de la máquina

Las directivas personalizadas de Configuración de máquina usan el hash SHA256 para validar que el paquete de directivas no haya cambiado. Opcionalmente, los clientes también pueden usar un certificado para firmar paquetes y forzar a la extensión de configuración de máquinas a permitir solo el contenido firmado.

Para habilitar este escenario, hay dos pasos que debe completar. Ejecute el cmdlet para firmar el paquete de contenido y anexe una etiqueta a las máquinas que deben solicitar la firma del código.

Validación de firmas mediante un certificado de firma de código

Para usar la característica de validación de firmas, ejecute el cmdlet Protect-GuestConfigurationPackage para firmar el paquete antes de publicarlo. Este cmdlet requiere un certificado de "firma de código". Si no tiene un certificado de "Firma de código", use el siguiente script para crear un certificado autofirmado con fines de prueba para seguir el ejemplo.

Validación de firma de 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'
}
$mycert = New-SelfSignedCertificate @codeSigningParams

# Export the certificates
$mypwd = ConvertTo-SecureString -String "Password1234" -Force -AsPlainText
$mycert | Export-PfxCertificate -FilePath C:\demo\GCPrivateKey.pfx -Password $mypwd
$mycert | Export-Certificate -FilePath "C:\demo\GCPublicKey.cer" -Force

# Import the certificate
$importParams = @{
    FilePath          = 'C:\demo\GCPrivateKey.pfx'
    Password          = $mypwd
    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        = 'C:\demo\AuditWindowsService.zip'
    Certificate = $certToSignThePackage
    Verbose     = $true
}
Protect-GuestConfigurationPackage @protectParams

Validación de firma de Linux

# generate gpg key
gpg --gen-key

# export public key
gpg --output public.gpg --export <email-id-used-to-generate-gpg-key>

# export private key
gpg --output private.gpg --export-secret-key <email-id-used-to-generate-gpg-key>

# Sign linux policy package
Import-Module GuestConfiguration
$protectParams = @{
    Path              = './not_installed_application_linux.zip'
    PrivateGpgKeyPath = './private.gpg'
    PublicGpgKeyPath  = './public.gpg'
    Verbose           = $true
}
Protect-GuestConfigurationPackage

Parámetros del cmdlet Protect-GuestConfigurationPackage:

  • Ruta de acceso: ruta de acceso completa del paquete de configuración de máquina.
  • Certificate: certificado de firma de código para firmar el paquete. Este parámetro solo se admite cuando se firma contenido para Windows.

Requisitos de certificados

El agente de configuración de máquina espera que la clave pública del certificado esté presente en "Publicador de confianza" de las máquinas Windows y en la ruta de acceso /usr/local/share/ca-certificates/gc de las máquinas Linux. Para que el nodo compruebe el contenido firmado, instale la clave pública del certificado en la máquina antes de aplicar la directiva personalizada. Este proceso se puede realizar con cualquier técnica dentro de la máquina virtual o mediante Azure Policy. Hay disponible una plantilla de ejemplo para implementar un equipo con un certificado. La directiva de acceso de Key Vault debe permitir que el proveedor de recursos del proceso obtenga acceso a los certificados durante las implementaciones. Para obtener los pasos detallados, consulte Configuración de Key Vault para máquinas virtuales en Azure Resource Manager.

El siguiente es un ejemplo para exportar la clave pública de un certificado de firma, para importarla a la máquina.

$Cert = Get-ChildItem -Path cert:\LocalMachine\My |
    Where-Object { $_.Subject-eq "CN=mycert3" } |
    Select-Object -First 1
$Cert | Export-Certificate -FilePath "$env:temp\DscPublicKey.cer" -Force

Requisitos de etiqueta

Una vez publicado el contenido, anexe una etiqueta con el nombre GuestConfigPolicyCertificateValidation y el valor enabled a todas las máquinas virtuales en las que se debe solicitar la firma de código. Consulte los ejemplos de etiqueta sobre cómo se pueden entregar etiquetas a escala mediante Azure Policy. Una vez que esta etiqueta esté en uso, la definición de la directiva que se genera mediante el cmdlet New-GuestConfigurationPolicy habilita el requisito a través de la extensión de configuración de máquinas.