Uso de certificados para acceder de forma segura a Azure Key Vault con Batch

Advertencia

Los certificados de cuenta de Batch como se detalla en este artículo están en desuso. Para acceder de forma segura a Azure Key Vault, basta con usar las identidades administradas de grupo con los permisos de acceso adecuados configurados para que la identidad administrada asignada por el usuario acceda a la instancia de Key Vault. Si necesita aprovisionar certificados en nodos de Batch, use la extensión de máquina virtual de Azure Key Vault disponible junto con la identidad administrada del grupo para instalar y administrar certificados en el grupo de Batch. Para más información sobre la implementación de certificados desde Azure Key Vault con identidad administrada en grupos de Batch, consulte Habilitación de la rotación automática de certificados en un grupo de Batch.

Los grupos de CloudServiceConfiguration no proporcionan la capacidad de especificar la identidad administrada o la extensión de máquina virtual de Azure Key Vault, y estos grupos están en desuso. Debe migrar a grupos VirtualMachineConfiguration que proporcionen las alternativas mencionadas anteriormente.

En este artículo, aprenderá a configurar nodos de Batch con certificados para acceder de forma segura a las credenciales almacenadas en Azure Key Vault.

Para autenticarse en Azure Key Vault desde un nodo de Batch, necesita:

  • Credencial Microsoft Entra
  • Un certificado
  • Una cuenta de Batch
  • Un grupo de Batch con al menos un nodo

Obtener un certificado

Si aún no tiene un certificado, use el cmdlet New-SelfSignedCertificate de PowerShell para crear un nuevo certificado autofirmado.

Creación de una entidad de servicio

El acceso a Key Vault se concede a un usuario o a una entidad de servicio. Para acceder a Key Vault mediante programación, use una entidad de servicio con el certificado que creó en el paso anterior. La entidad de servicio debe estar en el mismo inquilino de Microsoft Entra que Key Vault.

$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

Las direcciones URL de la aplicación no son importantes, ya que solo se usan para el acceso a Key Vault.

Concesión de derechos a Key Vault

La entidad de servicio creada en el paso anterior necesita permiso para recuperar los secretos de Key Vault. Los permisos se pueden conceder mediante Azure Portal o con el siguiente comando de PowerShell.

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

Asignación de un certificado a una cuenta de Batch

Cree un grupo de Batch y, a continuación, vaya a la pestaña Certificado del grupo y asigne el certificado que creó. El certificado está ahora en todos los nodos de Batch.

A continuación, asigne el certificado a la cuenta de Batch. La asignación del certificado a la cuenta permite a Batch asignarlo a los grupos y, a continuación, a los nodos. La forma más fácil de hacerlo es ir a la cuenta de Batch en el portal, ir a Certificados y seleccionar Agregar. Cargue el archivo .pfx que ha generado anteriormente y proporcione la contraseña. Una vez completado, el certificado se agrega a la lista y puede comprobar la huella digital.

Ahora, cuando cree un grupo de Batch, puede ir a Certificados dentro del grupo y asignar el certificado que creó a ese grupo. Al hacerlo, asegúrese de seleccionar LocalMachine para la ubicación del almacén. El certificado se carga en todos los nodos de Batch del grupo.

Instalar Azure Powershell

Si planea acceder a Key Vault mediante scripts de PowerShell en los nodos, deberá tener instalada la biblioteca de Azure PowerShell. Si los nodos tienen instalado Windows Management Framework (WMF) 5, puede usar el comando install-module para descargarlo. Si usa nodos que no tienen WMF 5, la forma más fácil de instalarlo es agrupar el archivo .msi de Azure PowerShell con los archivos de Batch y, a continuación, llamar al instalador como la primera parte del script de inicio de Batch. Para más información, vea este ejemplo:

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

Acceda a Key Vault.

Ahora ya está todo listo para acceder a Key Vault en scripts que se ejecutan en los nodos de Batch. Para acceder a Key Vault desde un script, lo único que necesita es que el script se autentique en Microsoft Entra ID mediante el certificado. Para hacer esto en PowerShell, use los siguientes comandos de ejemplo. Especifique el GUID adecuado para Huella digital, Id. de aplicación (el identificador de la entidad de servicio) e Id. del inquilino (el inquilino en el que existe la entidad de servicio).

Add-AzureRmAccount -ServicePrincipal -CertificateThumbprint -ApplicationId

Una vez autenticado, acceda a KeyVault como lo haría normalmente.

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

Estas son las credenciales que se usan en el script.

Pasos siguientes