Поделиться через


Использование сертификатов для безопасного доступа к Azure Key Vault с помощью Azure Batch

Предупреждение

Сертификаты учетной записи пакетной службы, как описано в этой статье, устарели. Чтобы безопасно получить доступ к Azure Key Vault, просто используйте управляемые удостоверения пула с соответствующими разрешениями доступа, настроенными для управляемого удостоверения, назначаемого пользователем, для доступа к Key Vault. Если вам нужно подготовить сертификаты на узлах пакетной службы, используйте доступное расширение виртуальной машины Azure Key Vault в сочетании с управляемым удостоверением пула для установки сертификатов и управления ими в пуле пакетной службы. Дополнительные сведения о развертывании сертификатов из Azure Key Vault с управляемым удостоверением в пулах пакетной службы см. в статье "Включить автоматическую смену сертификатов в пуле пакетной службы".

В этой статье вы узнаете, как настроить узлы пакетной службы с сертификатами для безопасного доступа к учетным данным, хранящимся в Azure Key Vault.

Чтобы пройти аутентификацию в Azure Key Vault с узла пакетной службы, вам потребуется следующее:

  • Учетные данные Microsoft Entra
  • сертификат;
  • учетная запись Batch
  • пул Batch с хотя бы одним узлом.

Получение сертификата

Если у вас еще нет сертификата, используйте командлет PowerShell New-SelfSignedCertificate для создания нового самозаверяющего сертификата.

Создание субъекта-службы

Доступ к Key Vault предоставляется для пользователя или субъекта-службы. Для программного доступа к Key Vault нужно использовать учетную запись службы с сертификатом, который вы создали на предыдущем шаге. Субъект-служба должен находиться в том же клиенте Microsoft Entra, что и 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

URL-адреса приложения не имеют значения, так как мы используем их только для доступа к Key Vault.

Предоставление доступа к Key Vault

Субъекту-службе, созданному на предыдущем шаге, нужны разрешения на получение секретов из Key Vault. Предоставить такое разрешение можно на портале Azure либо с помощью приведенной ниже команды PowerShell.

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

Назначение сертификата для учетной записи пакетной службы

Создайте пул Batch, затем перейдите на вкладку сертификатов в пуле и назначьте созданный вами сертификат. Теперь сертификат находится на всех узлах Batch.

Затем назначьте сертификат учетной записи Batch. Назначение сертификата учетной записи позволяет сервису Batch присвоить его пулам, а затем узлам. Самый простой способ сделать это — зайти в вашу пакетную учетную запись на портале, перейти в раздел Сертификаты и выбрать Добавить. Отправьте файл .pfx, который мы создали, и укажите пароль. Когда этот процесс завершится, сертификат появится в списке и вы сможете проверить отпечаток.

Теперь при создании пула пакетной службы вы можете открыть вкладку Сертификаты для этого пула и назначить ему созданный вами сертификат. При этом убедитесь, что выбрано расположение хранилища LocalMachine. Сертификат загружается на все узлы Batch в пуле.

Чтобы установить Azure PowerShell, выполните следующие действия

Если вы планируете обращаться к Key Vault через скрипты PowerShell на узлах, потребуется установить библиотеку Azure PowerShell. Если служба Windows Management Framework (WMF) 5 установлена на ваших узлах, для ее скачивания воспользуйтесь командой install-module. Если на ваших узлах нет WMF 5, для установки библиотеки проще всего объединить файл .msi Azure PowerShell с файлами пакетной службы, а затем вызвать установщик в самом начале скрипта запуска пакетной службы. Этот вариант подробно представлен в следующем примере:

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

Получите доступ к Key Vault.

Теперь вы готовы получить доступ к Key Vault из скриптов, работающих на Batch-узлах. Чтобы получить доступ к Key Vault из скрипта, вам потребуется выполнить проверку подлинности скрипта с использованием идентификатора Microsoft Entra с помощью сертификата. Для этого выполните приведенные ниже команды PowerShell. Укажите правильный GUID для отпечатка сертификата, Идентификатора приложения (идентификатор вашей учетной записи службы), и идентификатора арендатора (арендатор, в котором находится ваша учетная запись службы).

Add-AzureRmAccount -ServicePrincipal -CertificateThumbprint -ApplicationId

После проверки подлинности обращайтесь к KeyVault обычным образом.

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

Это учетные данные для использования в скрипте.

Следующие шаги