Usar certificados para acessar com segurança o Azure Key Vault com o Batch

Aviso

Os certificados de conta em lote, conforme detalhado neste artigo, foram preteridos. Para aceder de forma segura ao Azure Key Vault, utilize identidades geridas pelo Pool com as permissões de acesso adequadas configuradas para a identidade gerida atribuída pelo utilizador para aceder ao seu Key Vault. Se precisar de provisionar certificados em nós Batch, use a extensão VM do Azure Key Vault disponível em conjunto com o pool Managed Identity para instalar e gerir certificados no seu pool Batch. Para obter mais informações sobre como implantar certificados do Cofre de Chaves do Azure com Identidade Gerenciada em pools de lotes, consulte Habilitar a rotação automática de certificados em um pool de lotes.

Neste artigo, você aprenderá a configurar nós em lote com certificados para acessar com segurança as credenciais armazenadas no Cofre de Chaves do Azure.

Para autenticar no Cofre de Chaves do Azure a partir de um nó do Batch, é necessário:

  • Uma credencial Microsoft Entra
  • Um certificado
  • Uma conta em lote
  • Um pool de Batch com pelo menos um nó

Obter um certificado

Se você ainda não tiver um certificado, use o cmdlet New-SelfSignedCertificate do PowerShell para criar um novo certificado autoassinado.

Criar um principal de serviço

O acesso ao Cofre de Chaves é concedido a um utilizador ou a um principal de serviço. Para aceder ao Cofre de Chaves programaticamente, use um principal de serviço com o certificado criado na etapa anterior. A entidade de serviço deve estar no mesmo locatário do Microsoft Entra que o Cofre da Chave.

$now = [System.DateTime]::Parse("2020-02-10")
# Set this to the expiration date of the certificate
$expirationDate = [System.DateTime]::Parse("2021-02-10")
# Point the script at the cer file you created $cerCertificateFilePath = 'c:\temp\batchcertificate.cer'
$cer = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2
$cer.Import($cerCertificateFilePath)
# Load the certificate into memory
$credValue = [System.Convert]::ToBase64String($cer.GetRawCertData())
# Create a new AAD application that uses this certificate
$newADApplication = New-AzureRmADApplication -DisplayName "Batch Key Vault Access" -HomePage "https://batch.mydomain.com" -IdentifierUris "https://batch.mydomain.com" -certValue $credValue -StartDate $now -EndDate $expirationDate
# Create new AAD service principal that uses this application
$newAzureAdPrincipal = New-AzureRmADServicePrincipal -ApplicationId $newADApplication.ApplicationId

Os URLs da aplicação não são importantes, pois usamos-nos apenas para o acesso ao Key Vault.

Conceder direitos ao Cofre da Chave

A entidade de serviço criada na etapa anterior precisa de permissão para recuperar os segredos do Cofre da Chave. A permissão pode ser concedida por meio do portal do Azure ou com o comando PowerShell abaixo.

Set-AzureRmKeyVaultAccessPolicy -VaultName 'BatchVault' -ServicePrincipalName '"https://batch.mydomain.com' -PermissionsToSecrets 'Get'

Atribuir um certificado a uma conta do Azure Batch

Crie um pool de Batch e, em seguida, selecione a guia de certificados no pool e atribua o certificado por si criado. O certificado agora está em todos os nós Batch.

Em seguida, atribua o certificado à conta Batch. A atribuição do certificado à conta permite ao Batch atribuí-lo aos pools e depois aos nós. A maneira mais fácil de fazer isso é ir para sua conta de lote no portal, navegar até Certificados e selecionar Adicionar. Carregue o .pfx ficheiro que gerou anteriormente e forneça a palavra-passe. Uma vez concluído, o certificado é adicionado à lista e você pode verificar a impressão digital.

Agora, ao criar um pool de lotes, você pode navegar até Certificados dentro do pool e atribuir o certificado criado a esse pool. Ao fazer isso, certifique-se de selecionar LocalMachine para o local da loja. O certificado é carregado em todos os nós de lote no pool.

Instalar o Azure PowerShell

Se você planeja acessar o Cofre da Chave usando scripts do PowerShell em seus nós, precisará da biblioteca do Azure PowerShell instalada. Se os nós tiverem o Windows Management Framework (WMF) 5 instalado, você poderá usar o comando install-module para baixá-lo. Caso esteja a utilizar nós que não tenham o WMF 5, a maneira mais fácil de instalá-lo é agrupar o ficheiro do Azure PowerShell .msi com os seus ficheiros batch e, em seguida, chamar o instalador como primeiro passo no script de arranque em batch. Veja este exemplo para obter detalhes:

$psModuleCheck=Get-Module -ListAvailable -Name Azure -Refresh
if($psModuleCheck.count -eq 0) {
    $psInstallerPath = Join-Path $downloadPath "azure-powershell.3.4.0.msi" Start-Process msiexec.exe -ArgumentList /i, $psInstallerPath, /quiet -wait
}

Aceder ao Key Vault

Agora você está pronto para acessar o Cofre da Chave em scripts executados nos nós do Batch. Para aceder ao Azure Key Vault a partir de um script, só precisas que o script seja autenticado com o Microsoft Entra ID usando o certificado. Para fazer isso no PowerShell, use os seguintes comandos de exemplo. Especifique o GUID apropriado para Hash, ID da aplicação (a ID da entidade de serviço) e ID do locatário (o locatário onde a entidade de serviço existe).

Add-AzureRmAccount -ServicePrincipal -CertificateThumbprint -ApplicationId

Uma vez autenticado, acesse o KeyVault como faria normalmente.

$adminPassword=Get-AzureKeyVaultSecret -VaultName BatchVault -Name batchAdminPass

Estas são as credenciais a serem usadas em seu script.

Próximos passos