Como assinar pacotes de configuração de computador
As políticas personalizadas da configuração de computador usam um hash SHA256 para validar que o pacote de políticas não foi alterado. Como opção, os clientes também podem usar um certificado para assinar pacotes e forçar a extensão de configuração de computador a permitir somente o conteúdo assinado.
Para habilitar esse cenário, duas etapas precisam ser concluídas:
- Execute o cmdlet para assinar o pacote de conteúdo.
- Acrescente uma marca aos computadores que devem exigir que o código seja assinado.
Validação de assinatura usando um certificado de autenticação de código
Para usar o recurso de Validação de Assinatura, execute o cmdlet Protect-GuestConfigurationPackage
para assinar o pacote antes que ele seja publicado. Esse cmdlet requer um certificado de “Assinatura de Código”. Se não tiver um certificado de "Assinatura de Código", use o script a seguir para criar um certificado autoassinado para fins de teste e acompanhar o exemplo.
Validação de assinatura do 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
Validação de assinatura do 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
Parâmetros do cmdlet Protect-GuestConfigurationPackage
:
- Caminho: caminho completo para o pacote de configuração de máquina.
- Certificado: certificado de autenticação de código para assinar o pacote. Esse parâmetro só tem suporte ao assinar um conteúdo para o Windows.
- PrivateGpgKeyPath: caminho completo para o arquivo
.gpg
de chave privada. Esse parâmetro só tem suporte ao assinar um conteúdo para o Linux. - PublicGpgKeyPath: caminho completo para o arquivo
.gpg
de chave pública. Esse parâmetro só tem suporte ao assinar um conteúdo para o Linux.
Requisitos de certificado
O agente de configuração de máquina espera que a chave pública do certificado esteja presente no "Editor Confiável" nos computadores Windows e no caminho /usr/local/share/ca-certificates/gc
nos computadores Linux. Para que o nó verifique o conteúdo assinado, instale a chave pública do certificado no computador antes de aplicar a política personalizada.
Instale a chave pública do certificado usando ferramentas normais dentro da VM ou usando o Azure Policy. Um modelo de exemplo usando o Azure Policy mostra como você poderá implantar um computador com um certificado. A política de acesso de Key Vault deve permitir o acesso do provedor de recursos de computação a certificados durante as implantações. Para obter etapas detalhadas, confira Configurar o Key Vault para máquinas virtuais no Azure Resource Manager.
A seguir, é apresentado um exemplo para exportar a chave pública de um certificado de assinatura e importar para o computador.
$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
Requisitos de tag
Depois que o conteúdo for publicado, acrescente uma tag com o nome GuestConfigPolicyCertificateValidation
e o valor enabled
a todas as máquinas virtuais em que a assinatura de código deve ser necessária. Consulte as Amostras de tag sobre como tags podem ser entregues em escala usando o Azure Policy. Depois que essa tag estiver sendo usada, a definição de política gerada usando o cmdlet New-GuestConfigurationPolicy
habilita o requisito por meio da extensão da configuração de computador.
Conteúdo relacionado
- Use o módulo
GuestConfiguration
para criar uma definição do Azure Policy para o gerenciamento em escala do seu ambiente. - Atribua sua definição de política personalizada usando o portal do Azure.
- Saiba como ver os detalhes de conformidade para atribuições da política de configuração de computador.