@@ -923,15 +923,15 @@ function Test-AzureDiskEncryptionExtension
923
923
{
924
924
# This test should be run in Live mode only not in Playback mode
925
925
# Pre-requisites to be filled in before running this test. The AAD app should belong to the directory as the user running the test.
926
- $aadClientID = " " ;
927
- $aadClientSecret = " " ;
928
- # Fill in VM admin user and password
929
- $adminUser = " " ;
930
- $adminPassword = " " ;
931
-
926
+ $aadAppName = " detestaadapp" ;
927
+
932
928
# Resource group variables
933
- $rgName = " detestrg" ;
934
- $loc = " South Central US" ;
929
+ $rgName = Get-ComputeTestResourceName ;
930
+ $loc = Get-ComputeVMLocation ;
931
+
932
+ # Fill in VM admin user and password
933
+ $adminUser = " Foo12" ;
934
+ $adminPassword = " BaR@123" + $rgName ;
935
935
936
936
# KeyVault config variables
937
937
$vaultName = " detestvault" ;
@@ -951,30 +951,54 @@ function Test-AzureDiskEncryptionExtension
951
951
$osDiskName = ' osdisk' + $vmName ;
952
952
$dataDiskName = ' datadisk' + $vmName ;
953
953
$osDiskCaching = ' ReadWrite' ;
954
+ $extraDataDiskName1 = $dataDiskName + ' 1' ;
955
+ $extraDataDiskName2 = $dataDiskName + ' 2' ;
954
956
955
957
# Network config variables
956
958
$vnetName = " detestvnet" ;
957
959
$subnetName = " detestsubnet" ;
958
960
$publicIpName = ' pubip' + $vmName ;
959
961
$nicName = ' nic' + $vmName ;
960
-
961
-
962
+
962
963
# Disk encryption variables
963
964
$keyEncryptionAlgorithm = " RSA-OAEP" ;
964
965
$volumeType = " All" ;
965
966
966
967
try
967
968
{
968
- Login- AzureRmAccount;
969
- # Create new resource group
970
- New-AzureRmResourceGroup - Name $rgname - Location $loc - Force;
969
+ # Create new resource group
970
+ New-AzureRmResourceGroup - Name $rgName - Location $loc - Force;
971
+
972
+ # Check if AAD app was already created
973
+ $SvcPrincipals = (Get-AzureRmADServicePrincipal - SearchString $aadAppName );
974
+ if (-not $SvcPrincipals )
975
+ {
976
+ # Create a new AD application if not created before
977
+ $identifierUri = [string ]::Format(" http://localhost:8080/{0}" , $rgname );
978
+ $defaultHomePage = ' http://contoso.com' ;
979
+ $now = [System.DateTime ]::Now;
980
+ $oneYearFromNow = $now.AddYears (1 );
981
+ $aadClientSecret = Get-ResourceName ;
982
+ $ADApp = New-AzureRmADApplication - DisplayName $aadAppName - HomePage $defaultHomePage - IdentifierUris $identifierUri - StartDate $now - EndDate $oneYearFromNow - Password $aadClientSecret ;
983
+ Assert-NotNull $ADApp ;
984
+ $servicePrincipal = New-AzureRmADServicePrincipal - ApplicationId $ADApp.ApplicationId ;
985
+ $SvcPrincipals = (Get-AzureRmADServicePrincipal - SearchString $aadAppName );
986
+ # Was AAD app created?
987
+ Assert-NotNull $SvcPrincipals ;
988
+ $aadClientID = $servicePrincipal.ApplicationId ;
989
+ }
990
+ else
991
+ {
992
+ # Was AAD app already created?
993
+ Assert-NotNull $aadClientSecret ;
994
+ $aadClientID = $SvcPrincipals [0 ].ApplicationId;
995
+ }
971
996
972
997
# Create new KeyVault
973
998
$keyVault = New-AzureRmKeyVault - VaultName $vaultName - ResourceGroupName $rgname - Location $loc - Sku standard;
974
999
$keyVault = Get-AzureRmKeyVault - VaultName $vaultName - ResourceGroupName $rgname
975
1000
# set enabledForDiskEncryption
976
- Write-Host ' Press go to https://resources.azure.com and set enabledForDiskEncryption flag on KeyVault. [ENTER] to continue or [CTRL-C] to abort...'
977
- Read-Host
1001
+ Set-AzureRmKeyVaultAccessPolicy - VaultName $vaultName - ResourceGroupName $rgname - EnabledForDiskEncryption;
978
1002
# set permissions to AAD app to write secrets and keys
979
1003
Set-AzureRmKeyVaultAccessPolicy - VaultName $vaultName - ServicePrincipalName $aadClientID - PermissionsToKeys all - PermissionsToSecrets all
980
1004
# create a key in KeyVault to use as Kek
@@ -1019,17 +1043,69 @@ function Test-AzureDiskEncryptionExtension
1019
1043
1020
1044
$p = Set-AzureRmVMOperatingSystem - VM $p - Windows - ComputerName $computerName - Credential $cred - ProvisionVMAgent;
1021
1045
$p = Set-AzureRmVMSourceImage - VM $p - PublisherName $imagePublisher - Offer $imageOffer - Skus $imageSku - Version " latest" ;
1022
-
1023
-
1046
+
1024
1047
# Virtual Machine
1025
1048
New-AzureRmVM - ResourceGroupName $rgname - Location $loc - VM $p ;
1026
1049
1027
1050
# Enable encryption on the VM
1028
1051
Set-AzureRmVMDiskEncryptionExtension - ResourceGroupName $rgname - VMName $vmName - AadClientID $aadClientID - AadClientSecret $aadClientSecret - DiskEncryptionKeyVaultUrl $diskEncryptionKeyVaultUrl - DiskEncryptionKeyVaultId $keyVaultResourceId - KeyEncryptionKeyUrl $keyEncryptionKeyUrl - KeyEncryptionKeyVaultId $keyVaultResourceId - Force;
1029
1052
# Get encryption status
1030
1053
$encryptionStatus = Get-AzureRmVmDiskEncryptionStatus - ResourceGroupName $rgname - VMName $vmName ;
1054
+ # Verify encryption is enabled on OS volume and data volumes
1055
+ $OsVolumeEncryptionSettings = $encryptionStatus.OsVolumeEncryptionSettings ;
1056
+ Assert-AreEqual $encryptionStatus.OsVolumeEncrypted $true ;
1057
+ Assert-AreEqual $encryptionStatus.DataVolumesEncrypted $true ;
1058
+ # verify diskencryption keyvault url & kek url are not null
1059
+ Assert-NotNull $OsVolumeEncryptionSettings ;
1060
+ Assert-NotNull $OsVolumeEncryptionSettings.DiskEncryptionKey.SecretUrl ;
1061
+ Assert-NotNull $OsVolumeEncryptionSettings.DiskEncryptionKey.SourceVault ;
1062
+
1063
+ # Add a couple of data volumes to encrypt them
1064
+ $p = Add-AzureRmVMDataDisk - VM $p - Name $extraDataDiskName1 - Caching ' ReadOnly' - DiskSizeInGB 2 - Lun 1 - VhdUri $dataDiskVhdUri - CreateOption Empty;
1065
+ $p = Add-AzureRmVMDataDisk - VM $p - Name $extraDataDiskName2 - Caching ' ReadOnly' - DiskSizeInGB 2 - Lun 1 - VhdUri $dataDiskVhdUri - CreateOption Empty;
1066
+ # Enable encryption on the VM
1067
+ Set-AzureRmVMDiskEncryptionExtension - ResourceGroupName $rgname - VMName $vmName - AadClientID $aadClientID - AadClientSecret $aadClientSecret - DiskEncryptionKeyVaultUrl $diskEncryptionKeyVaultUrl - DiskEncryptionKeyVaultId $keyVaultResourceId - KeyEncryptionKeyUrl $keyEncryptionKeyUrl - KeyEncryptionKeyVaultId $keyVaultResourceId - Force;
1068
+ # Get encryption status
1069
+ $encryptionStatus = Get-AzureRmVmDiskEncryptionStatus - ResourceGroupName $rgname - VMName $vmName ;
1070
+ # Verify encryption is enabled on OS volume and data volumes
1071
+ $OsVolumeEncryptionSettings = $encryptionStatus.OsVolumeEncryptionSettings ;
1072
+ Assert-AreEqual $encryptionStatus.OsVolumeEncrypted $true ;
1073
+ Assert-AreEqual $encryptionStatus.DataVolumesEncrypted $true ;
1074
+ # verify diskencryption keyvault url & kek url are not null
1075
+ Assert-NotNull $OsVolumeEncryptionSettings ;
1076
+ Assert-NotNull $OsVolumeEncryptionSettings.DiskEncryptionKey.SecretUrl ;
1077
+ Assert-NotNull $OsVolumeEncryptionSettings.DiskEncryptionKey.SourceVault ;
1078
+
1079
+ # Disable encryption on the VM
1080
+ Disable-AzureRmVMDiskEncryption - ResourceGroupName $rgname - VMName $vmName ;
1081
+ # Get encryption status
1082
+ $encryptionStatus = Get-AzureRmVmDiskEncryptionStatus - ResourceGroupName $rgname - VMName $p.StorageProfile.OSDisk.Name ;
1083
+ # Verify encryption is disabled on OS volume and data volumes
1084
+ $OsVolumeEncryptionSettings = $encryptionStatus.OsVolumeEncryptionSettings ;
1085
+ Assert-AreEqual $encryptionStatus.OsVolumeEncrypted $false ;
1086
+ Assert-AreEqual $encryptionStatus.DataVolumesEncrypted $false ;
1087
+
1031
1088
# Remove AzureDiskEncryption extension
1032
1089
Remove-AzureRmVMDiskEncryptionExtension - ResourceGroupName $rgname - VMName $vmName ;
1090
+ # Get encryption status again to make sure it's the same as before when the extension was installed
1091
+ $encryptionStatus = Get-AzureRmVmDiskEncryptionStatus - ResourceGroupName $rgname - VMName $vmName ;
1092
+ # Verify encryption is disabled on OS volume and data volumes
1093
+ $OsVolumeEncryptionSettings = $encryptionStatus.OsVolumeEncryptionSettings ;
1094
+ Assert-AreEqual $encryptionStatus.OsVolumeEncrypted $false ;
1095
+ Assert-AreEqual $encryptionStatus.DataVolumesEncrypted $false ;
1096
+
1097
+ # Enable encryption on the VM
1098
+ Set-AzureRmVMDiskEncryptionExtension - ResourceGroupName $rgname - VMName $vmName - AadClientID $aadClientID - AadClientSecret $aadClientSecret - DiskEncryptionKeyVaultUrl $diskEncryptionKeyVaultUrl - DiskEncryptionKeyVaultId $keyVaultResourceId - KeyEncryptionKeyUrl $keyEncryptionKeyUrl - KeyEncryptionKeyVaultId $keyVaultResourceId - Force;
1099
+ # Get encryption status
1100
+ $encryptionStatus = Get-AzureRmVmDiskEncryptionStatus - ResourceGroupName $rgname - VMName $vmName ;
1101
+ # Verify encryption is enabled on OS volume and data volumes
1102
+ $OsVolumeEncryptionSettings = $encryptionStatus.OsVolumeEncryptionSettings ;
1103
+ Assert-AreEqual $encryptionStatus.OsVolumeEncrypted $true ;
1104
+ Assert-AreEqual $encryptionStatus.DataVolumesEncrypted $true ;
1105
+ # verify diskencryption keyvault url & kek url are not null
1106
+ Assert-NotNull $OsVolumeEncryptionSettings ;
1107
+ Assert-NotNull $OsVolumeEncryptionSettings.DiskEncryptionKey.SecretUrl ;
1108
+ Assert-NotNull $OsVolumeEncryptionSettings.DiskEncryptionKey.SourceVault ;
1033
1109
1034
1110
# Remove the VM
1035
1111
Remove-AzureRmVm - ResourceGroupName $rgname - Name $vmName - Force;
@@ -1041,12 +1117,12 @@ function Test-AzureDiskEncryptionExtension
1041
1117
$p = Set-AzureRmVMOSDisk - VM $p - Name $p.StorageProfile.OSDisk.Name - VhdUri $p.StorageProfile.OSDisk.Vhd.Uri - Caching ReadWrite - CreateOption attach - DiskEncryptionKeyUrl $encryptionStatus.OsVolumeEncryptionSettings.DiskEncryptionKey.SecretUrl - DiskEncryptionKeyVaultId $encryptionStatus.OsVolumeEncryptionSettings.DiskEncryptionKey.SourceVault.Id - Windows;
1042
1118
1043
1119
New-AzureRmVM - ResourceGroupName $rgname - Location $loc - VM $p ;
1044
-
1045
1120
}
1046
1121
finally
1047
1122
{
1048
1123
# Cleanup
1049
- Remove-AzureRmResourceGroup - Name $rgname - Force;
1124
+ Clean - ResourceGroup $rgname ;
1125
+ # Remove-AzureRmADApplication -ApplicationObjectId $ADApp.ApplicationId -Force;
1050
1126
}
1051
1127
}
1052
1128
0 commit comments