Microsoft Entra ID (以前のリリース) を使用した Azure Disk Encryption 用のキー コンテナーの作成と構成
適用対象: ✔️ Windows VM
Azure Disk Encryption の新しいリリースでは、VM ディスク暗号化を有効にするために Microsoft Entra アプリケーション パラメーターを指定する必要はありません。 新しいリリースでは、暗号化を有効にする手順の途中で、Microsoft Entra の資格情報を指定する必要がなくなりました。 すべての新しい VM は、新しいリリースを使って、Microsoft Entra アプリケーション パラメーターを指定せずに暗号化する必要があります。 新しいリリースを使用して VM のディスク暗号化を有効にする手順を表示するには、Azure Disk Encryption に関するページを参照してください。 Microsoft Entra アプリケーションのパラメーターで既に暗号化されている VM は引き続きサポートされており、Microsoft Entra の構文を使って保持し続ける必要があります。
Azure Disk Encryption では、Azure Key Vault を使用して、ディスク暗号化キーとシークレットを制御および管理します。 キー コンテナーの詳細については、「Azure Key Vault の概要」と「キー コンテナーのセキュリティ保護」を参照してください。
Microsoft Entra ID (以前のリリース) を使用して Azure Disk Encryption で使用するためのキー コンテナーの作成と構成には、次の 3 つの手順が含まれます。
- Key Vault を作成します。
- Microsoft Entra アプリとサービス プリンシパルを設定します。
- Microsoft Entra アプリのキー コンテナー アクセス ポリシーを設定します。
- キー コンテナーに高度なアクセス ポリシーを設定します。
また、必要に応じて、キー暗号化キー (KEK) を生成またはインポートすることもできます。
ツールをインストールして Azure に接続する手順については、メイン記事「Azure Disk Encryption 用のキー コンテナーの作成と構成」を参照してください。
注意
この記事の手順は、Azure Disk Encryption の前提条件となる CLI スクリプトおよび Azure Disk Encryption の前提条件となる PowerShell スクリプトに関するページで自動化されています。
Key Vault を作成します
Azure Disk Encryption は Azure Key Vault と統合されており、ディスクの暗号化キーとシークレットは Key Vault サブスクリプションで制御および管理できます。 Azure Disk Encryption ではキー コンテナーを作成するか、既存のコンテナーを使用することができます。 キー コンテナーの詳細については、「Azure Key Vault の概要」と「キー コンテナーのセキュリティ保護」を参照してください。 Resource Manager テンプレート、Azure PowerShell、または Azure CLI を使用してキー コンテナーを作成できます。
警告
暗号化シークレットがリージョンの境界を超えないようにするため、Azure Disk Encryption では Key Vault と VM を同じリージョンに併置する必要があります。 暗号化する VM と同じリージョン内に Key Vault を作成し、使用します。
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'
返されるコンテナー名、リソース グループ名、リソース ID、コンテナーの URI、およびオブジェクト ID をメモします。これらの情報は、後でディスクを暗号化するときに使用します。
Azure CLI を使用してキー コンテナーを作成する
az keyvault コマンドを使用して Azure CLI でキー コンテナーを管理できます。 キー コンテナーを作成するには、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"
返されるコンテナー名 (名前)、リソース グループ名、リソース ID (ID)、コンテナーの URI、およびオブジェクト ID をメモします。これらの情報は後で使用します。
Resource Manager テンプレートを使用してキー コンテナーを作成する
Resource Manager テンプレートを使用してキー コンテナーを作成できます。
- Azure クイックスタート テンプレートで [Azure に配置する] を選択します。
- サブスクリプション、リソース グループ、リソース グループの場所、キー コンテナー名、オブジェクト ID、法律条項および契約を選択し、[購入] を選択します。
Microsoft Entra アプリとサービス プリンシパルを設定する
Azure で実行中の VM に対して暗号化を有効にする必要がある場合、Azure Disk Encryption により、暗号化キーが生成され、Key Vault に書き込まれます。 キー コンテナー内の暗号化キーを管理するには、Microsoft Entra 認証が必要です。 この用途向けの Microsoft Entra アプリケーションを作成してください。 認証には、クライアント シークレット ベースの認証か、クライアント証明書ベースの Microsoft Entra 認証を使用できます。
Azure PowerShell を使用して Microsoft Entra アプリとサービス プリンシパルを設定する
次のコマンドを実行するには、Azure PowerShell モジュールを取得して使用します。
New-AzADApplication PowerShell コマンドレットを使用して 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 ClientID で、$aadClientSecret はクライアント シークレットです。これらは Azure Disk Encryption を有効にするために後で使用します。 Microsoft Entra のクライアント シークレットは適切に保護してください。
$azureAdApplication.ApplicationId
を実行すると、ApplicationID が表示されます。
Azure CLI を使用して Microsoft Entra アプリとサービス プリンシパルを設定する
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>
返される appId は、他のコマンドで使用される Microsoft Entra ClientID です。 これは、az keyvault set-policy に使用する SPN でもあります。 パスワードは、あとで Azure Disk Encryption を有効にするために使用するクライアント シークレットです。 Microsoft Entra のクライアント シークレットは適切に保護してください。
Azure portal を使用して Microsoft Entra アプリとサービス プリンシパルを設定する
Microsoft Entra アプリケーションを作成するには、リソースにアクセスできる Microsoft Entra アプリケーションとサービス プリンシパルをポータルを使って作成する方法に関する記事の手順を使用してください。 各手順で完了する必要がある記事のセクションに直接進むことができます。
- 必要なアクセス許可を確認する
- Microsoft Entra アプリケーションを作成する
- アプリケーションの作成時には任意の名前とサインオン URL を使用できます。
- アプリケーション ID と認証キーを取得する。
- 認証キーはクライアント シークレットであり、Set-AzVMDiskEncryptionExtension の AadClientSecret として使用されます。
- 認証キーは、Microsoft Entra ID にサインインするための資格情報としてアプリケーションによって使用されます。 Azure portal では、このシークレットはキーと呼ばれますが、キー コンテナーとは関係がありません。 このシークレットはセキュリティで適切に保護してください。
- アプリケーション ID は、あとで Set-AzVMDiskEncryptionExtension の AadClientId と Set-AzKeyVaultAccessPolicy の ServicePrincipalName として使用されます。
- 認証キーはクライアント シークレットであり、Set-AzVMDiskEncryptionExtension の AadClientSecret として使用されます。
Microsoft Entra アプリのキー コンテナー アクセス ポリシーを設定する
指定した Key Vault に暗号化シークレット情報を書き込むには、シークレットを Key Vault に書き込むアクセス許可を持つ Microsoft Entra アプリケーションのクライアント ID とクライアント シークレットが Azure Disk Encryption に必要です。
Note
Azure Disk Encryption では、Microsoft Entra のクライアント アプリケーションに対して、アクセス ポリシー (WrapKey および Set アクセス許可) を構成する必要があります。
Azure PowerShell を使用して Microsoft Entra アプリのキー コンテナー アクセス ポリシーを設定する
Microsoft Entra アプリケーションには、コンテナー内のキーまたはシークレットへのアクセス権が必要です。 Set-AzKeyVaultAccessPolicy コマンドレットで、 –ServicePrincipalName パラメーター値としてクライアント ID (アプリケーションの登録時に生成されたもの) を使用して、アプリケーションに権限を付与します。 詳しくは、ブログ投稿「Azure Key Vault - Step by Step」(Azure Key Vault - 手順) をご覧ください。
PowerShell を使用して AD アプリケーションのキー コンテナー アクセス ポリシーを設定します。
$keyVaultName = 'MySecureVault' $aadClientID = 'MyAadAppClientID' $KVRGname = 'MyKeyVaultResourceGroup' Set-AzKeyVaultAccessPolicy -VaultName $keyVaultName -ServicePrincipalName $aadClientID -PermissionsToKeys 'WrapKey' -PermissionsToSecrets 'Set' -ResourceGroupName $KVRGname
Azure CLI を使用して Microsoft Entra アプリのキー コンテナー アクセス ポリシーを設定する
az keyvault set-policy を使用してアクセス ポリシーを設定します。 詳細については、CLI 2.0 を使用した Key Vault の管理に関するページを参照してください。
次のコマンドを使用して、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 アプリケーションを検索して選択してください。
- [キーのアクセス許可] で、 [暗号化操作] の [キーを折り返す] をオンにします。
- [シークレットのアクセス許可] で、 [シークレットの管理操作] の [設定] をオンにします。
- [OK] を選択してアクセス ポリシーを保存します。
キー コンテナーに高度なアクセス ポリシーを設定する
Azure プラットフォームには、Key Vault 内の暗号化キーまたはシークレットへのアクセス権を付与する必要があります。これにより、ボリュームをブートして暗号化する際に、それらの情報を VM に提供できるようになります。 キー コンテナーのディスク暗号化を有効にします。そうしないと、デプロイは失敗します。
Azure PowerShell を使用してキー コンテナーに高度なアクセス ポリシーを設定する
キー コンテナーの PowerShell コマンドレット Set-AzKeyVaultAccessPolicy を使用してキー コンテナーのディスク暗号化を有効にします。
Key Vault のディスク暗号化を有効にする: Azure Disk Encryption には EnabledForDiskEncryption が必要です。
Set-AzKeyVaultAccessPolicy -VaultName 'MySecureVault' -ResourceGroupName 'MyKeyVaultResourceGroup' -EnabledForDiskEncryption
必要に応じて Key Vault のデプロイを有効にする: Microsoft. Compute リソース プロバイダーがこのキー コンテナーからシークレットを取得できるようにします。仮想マシンの作成時など、このキー コンテナーがリソース作成時に参照される場合です。
Set-AzKeyVaultAccessPolicy -VaultName 'MySecureVault' -ResourceGroupName 'MyKeyVaultResourceGroup' -EnabledForDeployment
必要に応じて Key Vault のテンプレートのデプロイを有効にする: テンプレートのデプロイでこのキー コンテナーが参照される場合、Azure Resource Manager がこのキー コンテナーからシークレットを取得できるようにします。
Set-AzKeyVaultAccessPolicy -VaultName 'MySecureVault' -ResourceGroupName 'MyKeyVaultResourceGroup' -EnabledForTemplateDeployment
Azure CLI を使用してキー コンテナーに高度なアクセス ポリシーを設定する
az keyvault update を使用し、キー コンテナーのディスク暗号化を有効にします。
Key Vault のディスク暗号化を有効にする: Enabled-for-disk-encryption が必要です。
az keyvault update --name "MySecureVault" --resource-group "MyKeyVaultResourceGroup" --enabled-for-disk-encryption "true"
必要に応じて Key Vault のデプロイを有効にする: 資格情報コンテナーからシークレットとして保存されている証明書を取得することを Virtual Machines に許可します。
az keyvault update --name "MySecureVault" --resource-group "MyKeyVaultResourceGroup" --enabled-for-deployment "true"
必要に応じて Key Vault のテンプレートのデプロイを有効にする: Resource Manager がコンテナーからシークレットを取得することを許可します。
az keyvault update --name "MySecureVault" --resource-group "MyKeyVaultResourceGroup" --enabled-for-template-deployment "true"
Azure portal を使用してキー コンテナーに高度なアクセス ポリシーを設定する
- キー コンテナーを選択し、 [アクセス ポリシー] に移動し、 [クリックして高度なアクセス ポリシーを表示する] を選択します。
- [ボリューム暗号化に対して Azure Disk Encryption へのアクセスを有効にする] というボックスをオンにします。
- 必要に応じて、 [展開に対して Azure Virtual Machines へのアクセスを有効にする] と [テンプレートの展開に対して Azure Resource Manager へのアクセスを有効にする] の一方または両方をオンにします。
- [保存] を選択します。
キー暗号化キーをセットアップする (省略可能)
暗号化キーのセキュリティに対する追加レイヤーとしてキー暗号化キー (KEK) を使用する場合は、キー コンテナーに KEK を追加します。 キー コンテナーにキー暗号化キーを作成するには、Add-AzKeyVaultKey コマンドレットを使用します。 オンプレミスのキー管理 HSM から KEK をインポートすることもできます。 詳細については、Key Vault のドキュメントを参照してください。 キー暗号化キーが指定されている場合、Azure Disk Encryption では、Key Vault への書き込みの前に、そのキーを使用して暗号化シークレットがラップされます。
キーを生成するときは、RSA のキーの種類を使用します。 Azure Disk Encryption では、楕円曲線キーはまだ使用できません。
Key Vault シークレットおよび KEK URL のバージョン管理が必要です。 Azure では、このバージョン管理制限が適用されます。 有効なシークレットと KEK URI については、次の例をご覧ください。
Azure Disk Encryption では、ポート番号をキー コンテナー シークレットおよび KEK URL の一部として指定することはサポートされません。 サポートされない Key Vault URL とサポートされる Key Vault URL の例については、以下の例を参照してください。
Azure PowerShell を使用してキー暗号化キーを設定する
PowerShell スクリプトを使用する前に、Azure Disk Encryption の前提条件をよく読み、スクリプトの手順を理解しておく必要があります。 サンプル スクリプトは、実際の環境に合わせて変更が必要な場合があります。 このスクリプトで、すべての Azure Disk Encryption の前提条件が作成され、既存の IaaS VM が暗号化され、キー暗号化キーを使用してディスク暗号化キーがラップされます。
# 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 Disk Encryption の前提条件をよく読み、スクリプトの手順を理解しておく必要があります。 サンプル スクリプトは、実際の環境に合わせて変更が必要な場合があります。
# 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 Disk Encryption の前提条件をすべてよく読み、スクリプトの手順を理解しておく必要があります。 サンプル スクリプトは、実際の環境に合わせて変更が必要な場合があります。
# 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
次のステップ
Windows VM で Microsoft Entra ID を使って Azure Disk Encryption を有効にする (以前のリリース)