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

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

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

CloudServiceConfigurationпулы не предоставляют возможность указывать управляемое удостоверение или расширение виртуальной машины Azure Key Vault, и эти пулы не рекомендуется. Следует перенести в VirtualMachineConfiguration пулы, которые предоставляют указанные выше упоминание альтернативные варианты.

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

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

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

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

Если у вас еще нет сертификата, используйте командлет 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'

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

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

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

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

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

Add-AzureRmAccount -ServicePrincipal -CertificateThumbprint -ApplicationId

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

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

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

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