Usare i certificati per accedere in modo sicuro ad Azure Key Vault con Batch

Avviso

I certificati dell'account Batch, come descritto in dettaglio in questo articolo, sono deprecati. Per accedere in modo sicuro ad Azure Key Vault, è sufficiente usare le identità gestite del pool con le autorizzazioni di accesso appropriate configurate per l'identità gestita assegnata dall'utente per accedere all'insieme di credenziali delle chiavi. Se è necessario effettuare il provisioning dei certificati nei nodi Batch, usare l'estensione della macchina virtuale azure Key Vault disponibile insieme all'identità gestita del pool per installare e gestire i certificati nel pool di Batch. Per altre informazioni sulla distribuzione di certificati da Azure Key Vault con identità gestita nei pool di Batch, vedere Abilitare la rotazione automatica dei certificati in un pool di Batch.

CloudServiceConfiguration I pool non offrono la possibilità di specificare l'identità gestita o l'estensione della macchina virtuale di Azure Key Vault e questi pool sono deprecati. È consigliabile eseguire la migrazione a VirtualMachineConfiguration pool che forniscono le alternative indicate in precedenza.

Questo articolo illustra come configurare i nodi Batch con certificati per accedere in modo sicuro alle credenziali archiviate in Azure Key Vault.

Per eseguire l'autenticazione a Azure Key Vault da un nodo di Batch sono necessari:

  • Credenziali di Microsoft Entra
  • Un certificato
  • Un account Batch
  • Un pool di Batch con almeno un nodo

Ottenere un certificato

Se non si ha già un certificato, usare il cmdlet New-SelfSignedCertificate di PowerShell per creare un nuovo certificato autofirmato.

Creare un'entità servizio

L'accesso a Key Vault può essere concesso a un utente o a un'entità servizio. Per accedere a Key Vault a livello di codice, usare un'entità servizio con il certificato creato nel passaggio precedente. L'entità servizio deve trovarsi nello stesso tenant di Microsoft Entra dell'insieme di credenziali delle chiavi.

$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

Gli URL per l'applicazione non sono importanti, poiché vengono usati solo per l'accesso a Key Vault.

Concedere i diritti per Key Vault

Per recuperare i segreti da Key Vault, l'entità servizio creata in precedenza deve essere autorizzata. L'autorizzazione può essere concessa tramite il portale di Azure o con il comando di PowerShell seguente.

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

Assegnare un certificato a un account Batch

Creare un pool di Batch, quindi passare alla scheda del certificato nel pool e assegnare il certificato creato. Il certificato si troverà in tutti i nodi di Batch.

Assegnare quindi il certificato all'account Batch. L'assegnazione del certificato all'account consente a Batch di assegnarlo ai pool e quindi ai nodi. Il modo più semplice per farlo è accedere al proprio account Batch sul portale, selezionare Certificati e quindi Aggiungi. Caricare il .pfx file generato in precedenza e specificare la password. Al termine, il certificato viene aggiunto all'elenco ed è possibile verificare l'identificazione personale.

Ora quando si crea un pool di Batch, è possibile passare a Certificati all'interno del pool e assegnare il certificato creato a tale pool. Quando si esegue questa operazione, assicurarsi di selezionare LocalMachine come percorso di archiviazione. Il certificato verrà caricato in tutti i nodi di Batch del pool.

Installare Azure PowerShell

Per accedere a Key Vault usando script di PowerShell nei nodi è necessario installare la libreria di Azure PowerShell. Se nei nodi è installato Windows Management Framework (WMF) 5, è possibile usare il comando install-module per scaricarlo. Se si usano nodi che non hanno WMF 5, il modo più semplice per installarlo consiste nell'aggregare il file di Azure PowerShell .msi con i file batch e quindi chiamare il programma di installazione come prima parte dello script di avvio di Batch. Per informazioni dettagliate vedere l'esempio seguente:

$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
}

Accedere all'insieme di credenziali delle chiavi

A questo momento è possibile accedere a Key Vault negli script in esecuzione nei nodi Batch. Per accedere a Key Vault da uno script, è sufficiente che lo script esegua l'autenticazione con l'ID Microsoft Entra usando il certificato. Per farlo con PowerShell, usare i comandi di esempio seguenti. Specificare il GUID appropriato per Identificazione personale, ID app (l'ID dell'entità servizio) e ID tenant (il tenant in cui si trova l'entità servizio).

Add-AzureRmAccount -ServicePrincipal -CertificateThumbprint -ApplicationId

Dopo l'autenticazione, accedere normalmente a Key Vault.

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

Queste sono le credenziali da usare nello script.

Passaggi successivi