Создание и настройка хранилища ключей для Шифрование дисков Azure с помощью идентификатора Microsoft Entra (предыдущий выпуск)
Область применения: ✔️ Виртуальные машины Windows
Новый выпуск Шифрование дисков Azure устраняет требование для предоставления параметра приложения Microsoft Entra для включения шифрования дисков виртуальной машины. В новом выпуске вы больше не обязаны предоставлять учетные данные Microsoft Entra во время включения шифрования. Все новые виртуальные машины должны быть зашифрованы без параметров приложения Microsoft Entra с помощью нового выпуска. Инструкции по включению шифрования дисков виртуальных машин при использовании нового выпуска см. в статье Включение шифрования дисков Azure для виртуальных машин IaaS. Виртуальные машины, которые уже зашифрованы с параметрами приложения Microsoft Entra, по-прежнему поддерживаются и должны продолжать поддерживаться с помощью синтаксиса Microsoft Entra.
Шифрование дисков Azure использует Azure Key Vault, чтобы управлять секретами и ключами шифрования дисков. Дополнительные сведения о хранилищах ключей см. в статье Приступая к работе с Azure Key Vault и Защита хранилища ключей.
Создание и настройка хранилища ключей для использования с Шифрование дисков Azure с идентификатором Microsoft Entra (предыдущий выпуск) состоит из трех этапов.
- Создайте хранилище ключей.
- Настройте приложение Microsoft Entra и субъект-службу.
- Задайте политику доступа к хранилищу ключей для приложения Microsoft Entra.
- Установите политики расширенного доступа к хранилищу ключей.
При необходимости можно создать или импортировать ключ шифрования ключа (KEK).
Инструкции по установке средств и подключению к Azure см. в статье Создание и настройка хранилища ключей для службы "Шифрование дисков Azure".
Примечание.
Описанные в этой статье процессы автоматизируются с помощью скриптов подготовки необходимых компонентов для службы "Шифрование дисков Azure". Скрипты доступны для интерфейса командной строки и PowerShell.
Создание хранилища ключей
Шифрование дисков Azure интегрировано с Azure Key Vault, что позволяет управлять секретами и ключами шифрования дисков в подписке Key Vault и контролировать их. Вы можете создать хранилище ключей или использовать существующее для шифрования дисков Azure. Дополнительные сведения о хранилищах ключей см. в статье Приступая к работе с Azure Key Vault и Защита хранилища ключей. Для создания хранилища ключей можно использовать шаблон Resource Manager, Azure PowerShell или Azure CLI.
Предупреждение
Чтобы убедиться, что секреты шифрования не пересекают региональные границы, шифрованию дисков Azure требуется, чтобы хранилище ключей и виртуальные машины были расположены в одном регионе. Создайте и используйте хранилище ключей, которое находится в том же регионе, что и виртуальная машина, которую нужно зашифровать.
Создание хранилища ключей с помощью PowerShell
Вы можете создать хранилище ключей в Azure PowerShell с помощью командлета New-AzKeyVault. Дополнительные командлеты для Key Vault см. в статье Az.KeyVault.
Чтобы создать группу ресурсов, используйте команду New-AzResourceGroup. Чтобы перечислить расположения центров обработки данных, используйте команду Get-AzLocation.
# Get-AzLocation New-AzResourceGroup –Name 'MyKeyVaultResourceGroup' –Location 'East US'
Создайте хранилище ключей с помощью командлета New-AzKeyVault.
New-AzKeyVault -VaultName 'MySecureVault' -ResourceGroupName 'MyKeyVaultResourceGroup' -Location 'East US'
Запишите возвращенные значения имени хранилища, имени группы ресурсов, идентификатора ресурса, кода URI хранилища и идентификатора объекта для последующего использования при шифровании дисков.
Создание хранилища ключей с помощью Azure CLI
Вы можете управлять вашим хранилищем ключей в Azure CLI с помощью команд az keyvault. Чтобы создать хранилище ключей, используйте команду az keyvault create.
Чтобы создать группу ресурсов, используйте команду az group create. Для перечисления расположений используйте команду az account list-locations.
# To list locations: az account list-locations --output table az group create -n "MyKeyVaultResourceGroup" -l "East US"
Чтобы создать новое хранилище ключей, используйте командуaz keyvault create.
az keyvault create --name "MySecureVault" --resource-group "MyKeyVaultResourceGroup" --location "East US"
Запишите возвращенные значения имени хранилища, имени группы ресурсов, идентификатора ресурса, кода URI хранилища и идентификатора объекта для последующего использования.
Создание хранилища ключей с помощью шаблона Resource Manager
Можно создать хранилище ключей с помощью шаблона Resource Manager.
- В шаблоне быстрого запуска Azure выберите "Развернуть в Azure".
- Выберите подписку, группу ресурсов, расположение группы ресурсов, имя Key Vault, идентификатор объекта, юридические условия и соглашение, а затем нажмите кнопку "Приобрести".
Настройка приложения и субъекта-службы Microsoft Entra
Если шифрование нужно включить для виртуальной машины, работающей в Azure, то служба шифрования дисков Azure создает ключи шифрования и записывает их в ваше хранилище ключей. Для управления ключами шифрования в хранилище ключей требуется проверка подлинности Microsoft Entra. Создайте приложение Microsoft Entra для этой цели. Для проверки подлинности можно использовать проверку подлинности на основе секрета клиента или проверку подлинности Microsoft Entra на основе сертификата клиента.
Настройка приложения и субъекта-службы Microsoft Entra с помощью Azure PowerShell
Чтобы выполнить следующие команды, получите и используйте модуль Azure PowerShell.
Используйте командлет PowerShell New-AzADApplication для создания приложения Microsoft Entra. Вместо MyApplicationHomePage и MyApplicationUri можно указать любые значения.
$aadClientSecret = "My AAD client secret" $aadClientSecretSec = ConvertTo-SecureString -String $aadClientSecret -AsPlainText -Force $azureAdApplication = New-AzADApplication -DisplayName "My Application Display Name" -HomePage "https://MyApplicationHomePage" -IdentifierUris "https://MyApplicationUri" -Password $aadClientSecretSec $servicePrincipal = New-AzADServicePrincipal –ApplicationId $azureAdApplication.ApplicationId -Role Contributor
Идентификатор $azureAdApplication.ApplicationId — это Идентификатор клиента Microsoft Entra, а $aadClientSecret — секрет клиента, который будет использоваться позже для включения Шифрование дисков Azure. Оберегите секрет клиента Microsoft Entra соответствующим образом. В результате запуска
$azureAdApplication.ApplicationId
вернется значение идентификатора приложения (ApplicationID).
Настройка приложения и субъекта-службы Microsoft Entra с помощью Azure CLI
Вы можете управлять своими субъектами-службами в Azure CLI с помощью команд az ad sp. Дополнительные сведения см. в статье Создание субъекта-службы Azure.
Создайте субъект-службу.
az ad sp create-for-rbac --name "ServicePrincipalName" --password "My-AAD-client-secret" --role Contributor --scopes /subscriptions/<subscription_id>
Возвращенный идентификатор приложения — это идентификатор клиента Microsoft Entra, используемый в других командах. Это также имя субъекта-службы, которое будет использоваться для команды az keyvault set-policy. Пароль — это секрет клиента, который понадобится позже, чтобы включить шифрование дисков Azure. Оберегите секрет клиента Microsoft Entra соответствующим образом.
Настройка приложения и субъекта-службы Microsoft Entra с помощью портал Azure
Чтобы создать приложение Microsoft Entra и субъект-службу, чтобы получить доступ к ресурсам, создайте приложение Microsoft Entra с помощью портала Use. Каждое из этих действий будет выполняться непосредственно в разделе статьи.
- Проверьте необходимые разрешения.
- Создание приложения Microsoft Entra
- При создании приложения можно использовать любое имя и URL-адрес входа.
- Получение идентификатора приложения и ключ проверки подлинности.
- Ключ проверки подлинности является секретом клиента и используется в качестве AadClientSecret для Set-AzVMDiskEncryptionExtension.
- Ключ проверки подлинности используется приложением в качестве учетных данных для входа в идентификатор Microsoft Entra. На портале Azure эти секреты называются ключами, но они не имеют никакого отношения к хранилищам ключей. Защитите этот секрет должным образом.
- Идентификатор приложения будет использоваться позже в качестве AadClientId для Set-AzVMDiskEncryptionExtension и в качестве ServicePrincipalName для Set-AzKeyVaultAccessPolicy.
- Ключ проверки подлинности является секретом клиента и используется в качестве AadClientSecret для Set-AzVMDiskEncryptionExtension.
Настройка политики доступа к хранилищу ключей для приложения Microsoft Entra
Чтобы записать секреты шифрования в указанное хранилище ключей, Шифрование дисков Azure требуется идентификатор клиента и секрет клиента приложения Microsoft Entra с разрешениями на запись секретов в Key Vault.
Примечание.
Шифрование дисков Azure требуется настроить следующие политики доступа для клиентского приложения Microsoft Entra: Разрешения WrapKey и Set.
Настройка политики доступа к хранилищу ключей для приложения Microsoft Entra с помощью Azure PowerShell
Приложению Microsoft Entra требуются права доступа к ключам или секретам в хранилище. Используйте командлет Set-AzKeyVaultAccessPolicy, чтобы предоставить приложению необходимые разрешения. Здесь в качестве значения параметра –ServicePrincipalName следует использовать идентификатор клиента, созданный при регистрации приложения. Чтобы узнать больше, ознакомьтесь с записью блога Azure Key Vault - Step by Ste (Пошаговая инструкция для Azure Key Vault).
Настройте политики доступа к хранилищу ключей для приложения AD с помощью PowerShell.
$keyVaultName = 'MySecureVault' $aadClientID = 'MyAadAppClientID' $KVRGname = 'MyKeyVaultResourceGroup' Set-AzKeyVaultAccessPolicy -VaultName $keyVaultName -ServicePrincipalName $aadClientID -PermissionsToKeys 'WrapKey' -PermissionsToSecrets 'Set' -ResourceGroupName $KVRGname
Настройка политики доступа к хранилищу ключей для приложения Microsoft Entra с помощью Azure CLI
Используйте az keyvault set-policy, чтобы настроить политику доступа. Дополнительные сведения см. в разделе Управление Key Vault с помощью интерфейса командной строки 2.0.
Предоставьте субъекту-службе, который вы создали через интерфейс Azure CLI, доступ к секретам и упакуйте ключи с помощью следующей команды:
az keyvault set-policy --name "MySecureVault" --spn "<spn created with CLI/the Azure AD ClientID>" --key-permissions wrapKey --secret-permissions set
Настройка политики доступа к хранилищу ключей для приложения Microsoft Entra с помощью портала
- Откройте группу ресурсов, в которой содержится ваше хранилище ключей.
- Выберите хранилище ключей, перейдите к политикам доступа, а затем нажмите кнопку "Добавить".
- В разделе "Выбор субъекта" найдите созданное приложение Microsoft Entra и выберите его.
- В колонке Разрешения ключей установите флажок Упаковка ключа в разделе Операции шифрования.
- В колонке Разрешения секретов установите флажок Установить в разделе Операции управления секретами.
- Нажмите кнопку "ОК ", чтобы сохранить политику доступа.
установить политики расширенного доступа к хранилищу ключей.
Платформа Azure должна иметь доступ к ключам шифрования или секретам, расположенным в вашем хранилище ключей, чтобы предоставлять их виртуальной машине при ее загрузке для расшифровки томов. Включите шифрование диска в хранилище ключей, иначе развертывание завершится сбоем.
Настройка политик расширенного доступа хранилища ключей с помощью Azure PowerShell
Используйте командлет Set-AzKeyVaultAccessPolicy в PowerShell, чтобы включить шифрование диска для хранилища ключей.
Включение хранилища ключей для шифрования диска: для шифрования дисков Azure требуется использовать параметр EnabledForDiskEncryption.
Set-AzKeyVaultAccessPolicy -VaultName 'MySecureVault' -ResourceGroupName 'MyKeyVaultResourceGroup' -EnabledForDiskEncryption
Включите Key Vault для развертывания при необходимости: включает корпорацию Майкрософт. Поставщик вычислительных ресурсов для получения секретов из этого хранилища ключей при создании ресурса, например при создании виртуальной машины.
Set-AzKeyVaultAccessPolicy -VaultName 'MySecureVault' -ResourceGroupName 'MyKeyVaultResourceGroup' -EnabledForDeployment
Включение хранилища ключей для развертывания шаблона (если необходимо): позволяет Azure Resource Manager получать секреты из этого хранилища ключей в случае использования ссылки на него при развертывании шаблона.
Set-AzKeyVaultAccessPolicy -VaultName 'MySecureVault' -ResourceGroupName 'MyKeyVaultResourceGroup' -EnabledForTemplateDeployment
Настройка политик расширенного доступа хранилища ключей с помощью Azure CLI
Включите шифрование дисков для хранилища ключей с помощью команды az keyvault update.
Включение хранилища ключей для шифрования диска: требуется использовать параметр enabled-for-disk-encryption.
az keyvault update --name "MySecureVault" --resource-group "MyKeyVaultResourceGroup" --enabled-for-disk-encryption "true"
Включение хранилища ключей для развертывания (если необходимо): позволяет виртуальным машинам получать сертификаты, хранимые в виде секретов, из хранилища.
az keyvault update --name "MySecureVault" --resource-group "MyKeyVaultResourceGroup" --enabled-for-deployment "true"
Включение хранилища ключей для развертывания шаблона (если необходимо): позволяет Resource Manager получать секреты из хранилища.
az keyvault update --name "MySecureVault" --resource-group "MyKeyVaultResourceGroup" --enabled-for-template-deployment "true"
Настройка политик расширенного доступа к хранилищу ключей с помощью портал Azure
- Выберите хранилище ключей, перейдите на вкладку Политики доступа и выберите Щелкните, чтобы показать политики расширенного доступа.
- Установите флажок Включить доступ к шифрованию дисков Azure для шифрования томов.
- Выберите Включить доступ к виртуальным машинам Azure для развертывания или Включить доступ к Azure Resource Manager для развертывания шаблонов, если это необходимо.
- Выберите Сохранить.
Настройка ключа шифрования ключей (необязательно)
Если вы хотите использовать ключ шифрования ключей (KEK), чтобы добавить уровень безопасности ключей шифрования, поместите KEK в хранилище ключей. Используйте командлет Add-AzKeyVaultKey, чтобы создать ключ шифрования ключей в хранилище ключей. Кроме того, KEK можно импортировать из своего локального модуля HSM службы управления ключами. Дополнительные сведения см. в документации по Key Vault. Когда ключ шифрования ключей указан, шифрование дисков Azure использует его для упаковки секретов шифрования перед записью в Key Vault.
При создании ключей используйте тип ключа RSA. Шифрование дисков Azure пока не поддерживает использование клавиш с эллиптической кривой.
Для URL-адресов секрета и ключа шифрования ключей (KEK) хранилища ключей необходимо включить управление версиями. Это требование Azure. Ниже приведены примеры действительных URL-адресов секрета и ключа шифрования ключей.
- Пример допустимого URL-адреса секрета: https://contosovault.vault.azure.net/secrets/EncryptionSecretWithKek/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
- Пример допустимого URL-адреса KEK: https://contosovault.vault.azure.net/keys/diskencryptionkek/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Шифрование дисков Azure не поддерживает указание номеров портов в URL-адресах секрета и ключа шифрования ключей для хранилища ключей. Ниже приведены примеры недопустимых и допустимых URL-адресов хранилища ключей.
- Недопустимый URL-адрес хранилища ключей https://contosovault.vault.azure.net:443/secrets/contososecret/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.
- Допустимый URL-адрес хранилища ключей: https://contosovault.vault.azure.net/secrets/contososecret/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Настройка ключа шифрования с помощью Azure PowerShell
Перед использованием скрипта PowerShell нужно ознакомиться с предварительными требованиями к шифрованию дисков Azure, чтобы понять шаги. Для примера скрипта могут потребоваться изменения в вашей среде. Этот скрипт создает все необходимые компоненты для шифрования дисков Azure и шифрует существующую виртуальную машину IaaS, упаковывая ключ шифрования диска с помощью ключа шифрования ключей.
# Step 1: Create a new resource group and key vault in the same location.
# Fill in 'MyLocation', 'MyKeyVaultResourceGroup', and 'MySecureVault' with your values.
# Use Get-AzLocation to get available locations and use the DisplayName.
# To use an existing resource group, comment out the line for New-AzResourceGroup
$Loc = 'MyLocation';
$KVRGname = 'MyKeyVaultResourceGroup';
$KeyVaultName = 'MySecureVault';
New-AzResourceGroup –Name $KVRGname –Location $Loc;
New-AzKeyVault -VaultName $KeyVaultName -ResourceGroupName $KVRGname -Location $Loc;
$KeyVault = Get-AzKeyVault -VaultName $KeyVaultName -ResourceGroupName $KVRGname;
$KeyVaultResourceId = (Get-AzKeyVault -VaultName $KeyVaultName -ResourceGroupName $KVRGname).ResourceId;
$diskEncryptionKeyVaultUrl = (Get-AzKeyVault -VaultName $KeyVaultName -ResourceGroupName $KVRGname).VaultUri;
# Step 2: Create the AD application and service principal.
# Fill in 'MyAADClientSecret', "<My Application Display Name>", "<https://MyApplicationHomePage>", and "<https://MyApplicationUri>" with your values.
# MyApplicationHomePage and the MyApplicationUri can be any values you wish.
$aadClientSecret = 'MyAADClientSecret';
$aadClientSecretSec = ConvertTo-SecureString -String $aadClientSecret -AsPlainText -Force;
$azureAdApplication = New-AzADApplication -DisplayName "<My Application Display Name>" -HomePage "<https://MyApplicationHomePage>" -IdentifierUris "<https://MyApplicationUri>" -Password $aadClientSecretSec
$servicePrincipal = New-AzADServicePrincipal –ApplicationId $azureAdApplication.ApplicationId -Role Contributor;
$aadClientID = $azureAdApplication.ApplicationId;
#Step 3: Enable the vault for disk encryption and set the access policy for the Microsoft Entra application.
Set-AzKeyVaultAccessPolicy -VaultName $KeyVaultName -ResourceGroupName $KVRGname -EnabledForDiskEncryption;
Set-AzKeyVaultAccessPolicy -VaultName $keyVaultName -ServicePrincipalName $aadClientID -PermissionsToKeys 'WrapKey' -PermissionsToSecrets 'Set' -ResourceGroupName $KVRGname;
#Step 4: Create a new key in the key vault with the Add-AzKeyVaultKey cmdlet.
# Fill in 'MyKeyEncryptionKey' with your value.
$keyEncryptionKeyName = 'MyKeyEncryptionKey';
Add-AzKeyVaultKey -VaultName $KeyVaultName -Name $keyEncryptionKeyName -Destination 'Software';
$keyEncryptionKeyUrl = (Get-AzKeyVaultKey -VaultName $KeyVaultName -Name $keyEncryptionKeyName).Key.kid;
#Step 5: Encrypt the disks of an existing IaaS VM
# Fill in 'MySecureVM' and 'MyVirtualMachineResourceGroup' with your values.
$VMName = 'MySecureVM';
$VMRGName = 'MyVirtualMachineResourceGroup';
Set-AzVMDiskEncryptionExtension -ResourceGroupName $VMRGName -VMName $vmName -AadClientID $aadClientID -AadClientSecret $aadClientSecret -DiskEncryptionKeyVaultUrl $diskEncryptionKeyVaultUrl -DiskEncryptionKeyVaultId $KeyVaultResourceId -KeyEncryptionKeyUrl $keyEncryptionKeyUrl -KeyEncryptionKeyVaultId $KeyVaultResourceId;
Проверка подлинности на основе сертификатов (необязательно)
Если вы хотите использовать аутентификацию на основе сертификата, вы можете загрузить его в свое хранилище и развернуть в клиенте. Перед использованием скрипта PowerShell нужно ознакомиться с предварительными требованиями к шифрованию дисков Azure, чтобы понять шаги. Для примера скрипта могут потребоваться изменения в вашей среде.
# Fill in "MyKeyVaultResourceGroup", "MySecureVault", and 'MyLocation' ('My location' only if needed)
$KVRGname = 'MyKeyVaultResourceGroup'
$KeyVaultName= 'MySecureVault'
# Create a key vault and set enabledForDiskEncryption property on it.
# Comment out the next three lines if you already have an existing key vault enabled for encryption. No need to set 'My location' in this case.
$Loc = 'MyLocation'
New-AzKeyVault -VaultName $KeyVaultName -ResourceGroupName $KVRGname -Location $Loc
Set-AzKeyVaultAccessPolicy -VaultName $KeyVaultName -ResourceGroupName $KVRGname -EnabledForDiskEncryption
#Setting some variables with the key vault information
$KeyVault = Get-AzKeyVault -VaultName $KeyVaultName -ResourceGroupName $KVRGname
$DiskEncryptionKeyVaultUrl = $KeyVault.VaultUri
$KeyVaultResourceId = $KeyVault.ResourceId
# Create the Microsoft Entra application and associate the certificate with it.
# Fill in "C:\certificates\mycert.pfx", "Password", "<My Application Display Name>", "<https://MyApplicationHomePage>", and "<https://MyApplicationUri>" with your values.
# MyApplicationHomePage and the MyApplicationUri can be any values you wish
$CertPath = "C:\certificates\mycert.pfx"
$CertPassword = "Password"
$Cert = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2($CertPath, $CertPassword)
$CertValue = [System.Convert]::ToBase64String($cert.GetRawCertData())
$AzureAdApplication = New-AzADApplication -DisplayName "<My Application Display Name>" -HomePage "<https://MyApplicationHomePage>" -IdentifierUris "<https://MyApplicationUri>" -CertValue $CertValue
$ServicePrincipal = New-AzADServicePrincipal -ApplicationId $AzureAdApplication.ApplicationId -Role Contributor
$AADClientID = $AzureAdApplication.ApplicationId
$aadClientCertThumbprint= $cert.Thumbprint
Set-AzKeyVaultAccessPolicy -VaultName $keyVaultName -ServicePrincipalName $aadClientID -PermissionsToKeys 'WrapKey' -PermissionsToSecrets 'Set' -ResourceGroupName $KVRGname
# Upload the pfx file to the key vault.
# Fill in "MyAADCert".
$KeyVaultSecretName = "MyAADCert"
$FileContentBytes = get-content $CertPath -Encoding Byte
$FileContentEncoded = [System.Convert]::ToBase64String($fileContentBytes)
$JSONObject = @"
{
"data" : "$filecontentencoded",
"dataType" : "pfx",
"password" : "$CertPassword"
}
"@
$JSONObjectBytes = [System.Text.Encoding]::UTF8.GetBytes($jsonObject)
$JSONEncoded = [System.Convert]::ToBase64String($jsonObjectBytes)
#Set the secret and set the key vault policy for -EnabledForDeployment
$Secret = ConvertTo-SecureString -String $JSONEncoded -AsPlainText -Force
Set-AzKeyVaultSecret -VaultName $KeyVaultName -Name $KeyVaultSecretName -SecretValue $Secret
Set-AzKeyVaultAccessPolicy -VaultName $KeyVaultName -ResourceGroupName $KVRGname -EnabledForDeployment
# Deploy the certificate to the VM
# Fill in 'MySecureVM' and 'MyVirtualMachineResourceGroup' with your values.
$VMName = 'MySecureVM'
$VMRGName = 'MyVirtualMachineResourceGroup'
$CertUrl = (Get-AzKeyVaultSecret -VaultName $KeyVaultName -Name $KeyVaultSecretName).Id
$SourceVaultId = (Get-AzKeyVault -VaultName $KeyVaultName -ResourceGroupName $KVRGName).ResourceId
$VM = Get-AzVM -ResourceGroupName $VMRGName -Name $VMName
$VM = Add-AzVMSecret -VM $VM -SourceVaultId $SourceVaultId -CertificateStore "My" -CertificateUrl $CertUrl
Update-AzVM -VM $VM -ResourceGroupName $VMRGName
#Enable encryption on the VM using Microsoft Entra client ID and the client certificate thumbprint
Set-AzVMDiskEncryptionExtension -ResourceGroupName $VMRGName -VMName $VMName -AadClientID $AADClientID -AadClientCertThumbprint $AADClientCertThumbprint -DiskEncryptionKeyVaultUrl $DiskEncryptionKeyVaultUrl -DiskEncryptionKeyVaultId $KeyVaultResourceId
Проверка подлинности на основе сертификатов и KEK (необязательно)
Если вы хотите использовать аутентификацию на основе сертификата и упаковать ключ шифрования с помощью KEK, вы можете использовать приведенный ниже скрипт в качестве примера. Перед использованием скрипта PowerShell нужно ознакомиться со всеми предыдущими предварительными требованиями к шифрованию дисков Azure, чтобы понять шаги. Для примера скрипта могут потребоваться изменения в вашей среде.
# Fill in 'MyKeyVaultResourceGroup', 'MySecureVault', and 'MyLocation' (if needed)
$KVRGname = 'MyKeyVaultResourceGroup'
$KeyVaultName= 'MySecureVault'
# Create a key vault and set enabledForDiskEncryption property on it.
# Comment out the next three lines if you already have an existing key vault enabled for encryption.
$Loc = 'MyLocation'
New-AzKeyVault -VaultName $KeyVaultName -ResourceGroupName $KVRGname -Location $Loc
Set-AzKeyVaultAccessPolicy -VaultName $KeyVaultName -ResourceGroupName $KVRGname -EnabledForDiskEncryption
# Create the Azure AD application and associate the certificate with it.
# Fill in "C:\certificates\mycert.pfx", "Password", "<My Application Display Name>", "<https://MyApplicationHomePage>", and "<https://MyApplicationUri>" with your values.
# MyApplicationHomePage and the MyApplicationUri can be any values you wish
$CertPath = "C:\certificates\mycert.pfx"
$CertPassword = "Password"
$Cert = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2($CertPath, $CertPassword)
$CertValue = [System.Convert]::ToBase64String($cert.GetRawCertData())
$AzureAdApplication = New-AzADApplication -DisplayName "<My Application Display Name>" -HomePage "<https://MyApplicationHomePage>" -IdentifierUris "<https://MyApplicationUri>" -CertValue $CertValue
$ServicePrincipal = New-AzADServicePrincipal -ApplicationId $AzureAdApplication.ApplicationId -Role Contributor
$AADClientID = $AzureAdApplication.ApplicationId
$aadClientCertThumbprint= $cert.Thumbprint
## Give access for setting secrets and wraping keys
Set-AzKeyVaultAccessPolicy -VaultName $keyVaultName -ServicePrincipalName $aadClientID -PermissionsToKeys 'WrapKey' -PermissionsToSecrets 'Set' -ResourceGroupName $KVRGname
# Upload the pfx file to the key vault.
# Fill in "MyAADCert".
$KeyVaultSecretName = "MyAADCert"
$FileContentBytes = get-content $CertPath -Encoding Byte
$FileContentEncoded = [System.Convert]::ToBase64String($fileContentBytes)
$JSONObject = @"
{
"data" : "$filecontentencoded",
"dataType" : "pfx",
"password" : "$CertPassword"
}
"@
$JSONObjectBytes = [System.Text.Encoding]::UTF8.GetBytes($jsonObject)
$JSONEncoded = [System.Convert]::ToBase64String($jsonObjectBytes)
#Set the secret and set the key vault policy for deployment
$Secret = ConvertTo-SecureString -String $JSONEncoded -AsPlainText -Force
Set-AzKeyVaultSecret -VaultName $KeyVaultName -Name $KeyVaultSecretName -SecretValue $Secret
Set-AzKeyVaultAccessPolicy -VaultName $KeyVaultName -ResourceGroupName $KVRGname -EnabledForDeployment
#Setting some variables with the key vault information and generating a KEK
# FIll in 'KEKName'
$KEKName ='KEKName'
$KeyVault = Get-AzKeyVault -VaultName $KeyVaultName -ResourceGroupName $KVRGname
$DiskEncryptionKeyVaultUrl = $KeyVault.VaultUri
$KeyVaultResourceId = $KeyVault.ResourceId
$KEK = Add-AzKeyVaultKey -VaultName $KeyVaultName -Name $KEKName -Destination "Software"
$KeyEncryptionKeyUrl = $KEK.Key.kid
# Deploy the certificate to the VM
# Fill in 'MySecureVM' and 'MyVirtualMachineResourceGroup' with your values.
$VMName = 'MySecureVM';
$VMRGName = 'MyVirtualMachineResourceGroup';
$CertUrl = (Get-AzKeyVaultSecret -VaultName $KeyVaultName -Name $KeyVaultSecretName).Id
$SourceVaultId = (Get-AzKeyVault -VaultName $KeyVaultName -ResourceGroupName $KVRGName).ResourceId
$VM = Get-AzVM -ResourceGroupName $VMRGName -Name $VMName
$VM = Add-AzVMSecret -VM $VM -SourceVaultId $SourceVaultId -CertificateStore "My" -CertificateUrl $CertUrl
Update-AzVM -VM $VM -ResourceGroupName $VMRGName
#Enable encryption on the VM using Azure AD client ID and the client certificate thumbprint
Set-AzVMDiskEncryptionExtension -ResourceGroupName $VMRGName -VMName $VMName -AadClientID $AADClientID -AadClientCertThumbprint $AADClientCertThumbprint -DiskEncryptionKeyVaultUrl $DiskEncryptionKeyVaultUrl -DiskEncryptionKeyVaultId $KeyVaultResourceId -KeyEncryptionKeyUrl $keyEncryptionKeyUrl -KeyEncryptionKeyVaultId $KeyVaultResourceId