Verwenden von Zertifikaten für den sicheren Zugriff auf Azure Key Vault mit Batch

Warnung

Batch-Kontozertifikate, wie in diesem Artikel beschrieben, sind veraltet. Verwenden Sie für den sicheren Zugriff auf Azure Key Vault einfach verwaltete Poolidentitäten mit den entsprechenden Zugriffsberechtigungen, die für die benutzerseitig zugewiesene verwaltete Identität konfiguriert sind, um auf Ihre Key Vault-Instanz zuzugreifen. Wenn Sie Zertifikate auf Batch-Knoten bereitstellen müssen, verwenden Sie die verfügbare Azure Key Vault-VM-Erweiterung in Verbindung mit einer verwalteten Poolidentität, um Zertifikate im Batch-Pool zu installieren und zu verwalten. Weitere Informationen zum Bereitstellen von Zertifikaten über Azure Key Vault mit verwalteter Identität in Batch-Pools finden Sie unter Aktivieren der automatischen Zertifikatrotation in einem Batch-Pool.

CloudServiceConfiguration-Pools bieten keine Möglichkeit, eine verwaltete Identität oder die Azure Key Vault-VM-Erweiterung anzugeben, und diese Pools sind veraltet. Sie sollten zu VirtualMachineConfiguration-Pools migrieren, die die oben genannten Alternativen bereitstellen.

In diesem Artikel erfahren Sie, wie Sie Batch-Knoten mit Zertifikaten einrichten, um sicher auf die in Azure Key Vault gespeicherten Anmeldeinformationen zuzugreifen.

Sie benötigen Folgendes, um Azure Key Vault über einen Batch-Knoten zu authentifizieren:

  • Die Microsoft Entra-Anmeldeinformationen
  • Ein Zertifikat
  • Ein Batch-Konto
  • Einen Batch-Pool mit mindestens einem Knoten

Beschaffung eines Zertifikats

Wenn Sie noch kein Zertifikat haben, verwenden Sie das PowerShell-CmdletNew-SelfSignedCertificate, um ein neues selbstsigniertes Zertifikat zu erstellen.

Erstellen eines Dienstprinzipals

Der Zugriff auf Key Vault wird entweder einem Benutzer oder einem Dienstprinzipal gewährt. Um programmgesteuert auf Key Vault zuzugreifen, verwenden Sie einen Dienstprinzipal mit dem Zertifikat, das Sie im vorherigen Schritt erstellt haben. Der Dienstprinzipal muss sich in demselben Microsoft Entra-Mandanten befinden wie 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

Die URLs für die Anwendung sind nicht wichtig, da wir sie nur für den Zugriff auf Key Vault verwenden.

Gewähren von Rechten für Key Vault

Der im vorherigen Schritt erstellte Dienstprinzipal erfordert die Berechtigung, die Geheimnisse aus Key Vault abzurufen. Die Berechtigung kann entweder über das Azure-Portal oder mit dem nachfolgenden PowerShell-Befehl erteilt werden.

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

Zuweisen eines Zertifikats zu einem Batch-Konto

Erstellen Sie einen Batch-Pool, wechseln Sie dann zur Registerkarte „Zertifikat“ im Pool, und weisen Sie das erstellte Zertifikat zu. Das Zertifikat befindet sich jetzt auf allen Batch-Knoten.

Als Nächstes müssen wir das Zertifikat dem Batch-Konto zuordnen. Die Zuweisung des Zertifikats zum Konto ermöglicht Azure Batch, es den Pools und dann den Knoten zuzuweisen. Am einfachsten geht das, indem Sie im Portal zu Ihrem Batch-Konto wechseln, zu Zertifikate navigieren und Hinzufügen auswählen. Laden Sie die .pfx-Datei hoch, die Sie zuvor generiert haben, und geben Sie das Kennwort an. Nachdem der Vorgang abgeschlossen ist, wird das Zertifikat der Liste hinzugefügt, und Sie können den Fingerabdruck überprüfen.

Wenn Sie nun einen Batch-Pool erstellen, können Sie innerhalb des Pools zu Zertifikate navigieren und das von Ihnen erstellte Zertifikat diesem Pool zuweisen. Stellen Sie in diesem Fall sicher, dass Sie LocalMachine für den Speicherort auswählen. Das Zertifikat wird auf alle Batch-Knoten im Pool geladen.

Installieren von Azure Powershell

Wenn Sie planen, mit PowerShell-Skripts auf Ihren Knoten auf Key Vault zuzugreifen, dann müssen Sie die Azure PowerShell-Bibliothek installieren. Wenn auf Ihren Knoten das Windows Management Framework 5 (WMF) installiert ist, können Sie es mit dem Befehl „install-module“ herunterladen. Wenn Sie Knoten verwenden, die nicht über WMF 5 verfügen, ist es am einfachsten, die .msi-Datei von Azure PowerShell mit Ihren Batch-Dateien zu bündeln und dann das Installationsprogramm als ersten Teil Ihres Batch-Startskripts aufzurufen. Weitere Informationen finden Sie in diesem Beispiel:

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

Zugreifen auf Key Vault

Jetzt sind Sie bereit, in Skripts, die auf Ihren Batch-Knoten ausgeführt werden, auf Key Vault zuzugreifen. Um von einem Skript aus auf Key Vault zuzugreifen, brauchen Sie nur Ihr Skript mithilfe des Zertifikats für Microsoft Entra ID zu authentifizieren. Verwenden Sie dazu in PowerShell die folgenden Beispielbefehle. Geben Sie die entsprechende GUID für Fingerabdruck, Anwendungs-ID (die ID Ihres Dienstprinzipals) und Mandanten-ID (der Mandant, in dem Ihr Dienstprinzipal vorhanden ist) an.

Add-AzureRmAccount -ServicePrincipal -CertificateThumbprint -ApplicationId

Nach der Authentifizierung können Sie wie gewohnt auf Key Vault zugreifen.

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

Dies sind die Anmeldeinformationen, die in Ihrem Skript verwendet werden sollen.

Nächste Schritte