@@ -923,15 +923,15 @@ function Test-AzureDiskEncryptionExtension
923923{
924924 # This test should be run in Live mode only not in Playback mode
925925 # 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+
932928 # 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 ;
935935
936936 # KeyVault config variables
937937 $vaultName = " detestvault" ;
@@ -951,30 +951,54 @@ function Test-AzureDiskEncryptionExtension
951951 $osDiskName = ' osdisk' + $vmName ;
952952 $dataDiskName = ' datadisk' + $vmName ;
953953 $osDiskCaching = ' ReadWrite' ;
954+ $extraDataDiskName1 = $dataDiskName + ' 1' ;
955+ $extraDataDiskName2 = $dataDiskName + ' 2' ;
954956
955957 # Network config variables
956958 $vnetName = " detestvnet" ;
957959 $subnetName = " detestsubnet" ;
958960 $publicIpName = ' pubip' + $vmName ;
959961 $nicName = ' nic' + $vmName ;
960-
961-
962+
962963 # Disk encryption variables
963964 $keyEncryptionAlgorithm = " RSA-OAEP" ;
964965 $volumeType = " All" ;
965966
966967 try
967968 {
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+ }
971996
972997 # Create new KeyVault
973998 $keyVault = New-AzureRmKeyVault - VaultName $vaultName - ResourceGroupName $rgname - Location $loc - Sku standard;
974999 $keyVault = Get-AzureRmKeyVault - VaultName $vaultName - ResourceGroupName $rgname
9751000 # 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;
9781002 # set permissions to AAD app to write secrets and keys
9791003 Set-AzureRmKeyVaultAccessPolicy - VaultName $vaultName - ServicePrincipalName $aadClientID - PermissionsToKeys all - PermissionsToSecrets all
9801004 # create a key in KeyVault to use as Kek
@@ -1019,17 +1043,69 @@ function Test-AzureDiskEncryptionExtension
10191043
10201044 $p = Set-AzureRmVMOperatingSystem - VM $p - Windows - ComputerName $computerName - Credential $cred - ProvisionVMAgent;
10211045 $p = Set-AzureRmVMSourceImage - VM $p - PublisherName $imagePublisher - Offer $imageOffer - Skus $imageSku - Version " latest" ;
1022-
1023-
1046+
10241047 # Virtual Machine
10251048 New-AzureRmVM - ResourceGroupName $rgname - Location $loc - VM $p ;
10261049
10271050 # Enable encryption on the VM
10281051 Set-AzureRmVMDiskEncryptionExtension - ResourceGroupName $rgname - VMName $vmName - AadClientID $aadClientID - AadClientSecret $aadClientSecret - DiskEncryptionKeyVaultUrl $diskEncryptionKeyVaultUrl - DiskEncryptionKeyVaultId $keyVaultResourceId - KeyEncryptionKeyUrl $keyEncryptionKeyUrl - KeyEncryptionKeyVaultId $keyVaultResourceId - Force;
10291052 # Get encryption status
10301053 $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+
10311088 # Remove AzureDiskEncryption extension
10321089 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 ;
10331109
10341110 # Remove the VM
10351111 Remove-AzureRmVm - ResourceGroupName $rgname - Name $vmName - Force;
@@ -1041,12 +1117,12 @@ function Test-AzureDiskEncryptionExtension
10411117 $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;
10421118
10431119 New-AzureRmVM - ResourceGroupName $rgname - Location $loc - VM $p ;
1044-
10451120 }
10461121 finally
10471122 {
10481123 # Cleanup
1049- Remove-AzureRmResourceGroup - Name $rgname - Force;
1124+ Clean - ResourceGroup $rgname ;
1125+ # Remove-AzureRmADApplication -ApplicationObjectId $ADApp.ApplicationId -Force;
10501126 }
10511127}
10521128
0 commit comments