Como assinar pacotes de configuração da máquina
As políticas personalizadas de configuração da máquina usam um hash SHA256 para validar que o pacote de políticas não foi alterado. Opcionalmente, os clientes também podem usar um certificado para assinar pacotes e forçar a extensão de configuração da máquina a permitir apenas conteúdo assinado.
Para habilitar esse cenário, há duas etapas que você precisa concluir:
- Execute o cmdlet para assinar o pacote de conteúdo.
- Anexe uma tag às máquinas que devem exigir que o código seja assinado.
Validação de assinatura usando um certificado de assinatura de código
Para usar o recurso Validação de Assinatura, execute o Protect-GuestConfigurationPackage
cmdlet para assinar o pacote antes de ser publicado. Este cmdlet requer um certificado de 'Assinatura de código'. Se você não tiver um certificado de 'Assinatura de código', use o script a seguir para criar um certificado autoassinado para fins de teste a seguir junto com 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 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 Protect-GuestConfigurationPackage
cmdlet:
- Caminho: Caminho completo para o pacote de configuração da máquina.
- Certificado: Certificado de assinatura de código para assinar o pacote. Este parâmetro só é suportado ao assinar conteúdo para Windows.
- PrivateGpgKeyPath: Caminho completo para o arquivo de chave
.gpg
privada. Este parâmetro só é suportado ao assinar conteúdo para Linux. - PublicGpgKeyPath: Caminho completo para o arquivo de chave
.gpg
pública. Este parâmetro só é suportado ao assinar conteúdo para Linux.
Requisitos dos certificados
O agente de configuração da máquina espera que a chave pública do certificado esteja presente em "Editores confiáveis" em máquinas Windows e no caminho /usr/local/share/ca-certificates/gc
em máquinas Linux. Para que o nó verifique o conteúdo assinado, instale a chave pública do certificado na máquina antes de aplicar a política personalizada.
Você pode instalar a chave pública do certificado usando ferramentas normais dentro da VM ou usando a Política do Azure. Um modelo de exemplo usando a Política do Azure mostra como você pode implantar uma máquina com um certificado. A política de acesso ao Cofre da Chave deve permitir que o provedor de recursos de computação acesse certificados durante as implantações. Para obter etapas detalhadas, consulte Configurar o Cofre da Chave para máquinas virtuais no Azure Resource Manager.
A seguir está um exemplo para exportar a chave pública de um certificado de assinatura, para importar para a máquina.
$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 nome GuestConfigPolicyCertificateValidation
e valor enabled
a todas as máquinas virtuais onde a assinatura de código deve ser necessária. Consulte os Exemplos de etiquetas para saber como as etiquetas podem ser entregues em escala utilizando a Política do Azure. Quando essa tag estiver em vigor, a definição de política gerada usando o New-GuestConfigurationPolicy
cmdlet habilitará o requisito por meio da extensão de configuração da máquina.
Conteúdos relacionados
- Utilize o módulo
GuestConfiguration
para criar uma definição da Azure Policy para uma gestão à escala do seu ambiente. - Atribua a sua definição de política personalizada com o portal do Azure.
- Saiba como exibir detalhes de conformidade para atribuições de política de configuração de máquina.