@@ -797,139 +797,120 @@ Test AzureDiskEncryption extension
797
797
#>
798
798
function Test-AzureDiskEncryptionExtension
799
799
{
800
- # Setup
801
- $rgname = Get-ComputeTestResourceName
800
+ # This test should be run in Live mode only not in Playback mode
801
+ # Pre-requisites to be filled in before running this test. The AAD app should belong to the directory as the user running the test.
802
+ $aadClientID = " " ;
803
+ $aadClientSecret = " " ;
804
+ # Fill in VM admin user and password
805
+ $adminUser = " " ;
806
+ $adminPassword = " " ;
807
+
808
+ # Resource group variables
809
+ $rgName = " detestrg" ;
810
+ $loc = " South Central US" ;
811
+
812
+ # KeyVault config variables
813
+ $vaultName = " detestvault" ;
814
+ $kekName = " dstestkek" ;
815
+
816
+ # VM config variables
817
+ $vmName = " detestvm" ;
818
+ $vmsize = ' Standard_D2' ;
819
+ $imagePublisher = " MicrosoftWindowsServer" ;
820
+ $imageOffer = " WindowsServer" ;
821
+ $imageSku = " 2012-R2-Datacenter" ;
822
+
823
+ # Storage config variables
824
+ $storageAccountName = " deteststore" ;
825
+ $stotype = ' Standard_LRS' ;
826
+ $vhdContainerName = " vhds" ;
827
+ $osDiskName = ' osdisk' + $vmName ;
828
+ $dataDiskName = ' datadisk' + $vmName ;
829
+ $osDiskCaching = ' ReadWrite' ;
830
+
831
+ # Network config variables
832
+ $vnetName = " detestvnet" ;
833
+ $subnetName = " detestsubnet" ;
834
+ $publicIpName = ' pubip' + $vmName ;
835
+ $nicName = ' nic' + $vmName ;
836
+
837
+
838
+ # Disk encryption variables
839
+ $keyEncryptionAlgorithm = " RSA-OAEP" ;
840
+ $volumeType = " All" ;
802
841
803
842
try
804
843
{
805
- # Common
806
- $loc = " South Central US " ;
844
+ Login - AzureRmAccount;
845
+ # Create new resource group
807
846
New-AzureRmResourceGroup - Name $rgname - Location $loc - Force;
808
847
809
- # VM Profile & Hardware
810
- $vmsize = ' Standard_D2' ;
811
- $vmname = ' vm' + $rgname ;
848
+ # Create new KeyVault
849
+ $keyVault = New-AzureRmKeyVault - VaultName $vaultName - ResourceGroupName $rgname - Location $loc - Sku standard;
850
+ $keyVault = Get-AzureRmKeyVault - VaultName $vaultName - ResourceGroupName $rgname
851
+ # set enabledForDiskEncryption
852
+ Write-Host ' Press go to https://resources.azure.com and set enabledForDiskEncryption flag on KeyVault. [ENTER] to continue or [CTRL-C] to abort...'
853
+ Read-Host
854
+ # set permissions to AAD app to write secrets and keys
855
+ Set-AzureRmKeyVaultAccessPolicy - VaultName $vaultName - ServicePrincipalName $aadClientID - PermissionsToKeys all - PermissionsToSecrets all
856
+ # create a key in KeyVault to use as Kek
857
+ $kek = Add-AzureKeyVaultKey - VaultName $vaultName - Name $kekName - Destination " Software"
858
+
859
+ $diskEncryptionKeyVaultUrl = $keyVault.VaultUri ;
860
+ $keyVaultResourceId = $keyVault.ResourceId ;
861
+ $keyEncryptionKeyUrl = $kek.Key.kid ;
862
+
863
+ # VM Profile & Hardware
812
864
$p = New-AzureRmVMConfig - VMName $vmname - VMSize $vmsize ;
813
- Assert-AreEqual $p.HardwareProfile.VirtualMachineSize $vmsize ;
814
865
815
866
# NRP
816
- $subnet = New-AzureRmVirtualNetworkSubnetConfig - Name (' subnet ' + $rgname ) - AddressPrefix " 10.0.0.0/24" ;
817
- $vnet = New-AzureRmVirtualNetwork - Force - Name (' vnet ' + $rgname ) - ResourceGroupName $rgname - Location $loc - AddressPrefix " 10.0.0.0/16" - DnsServer " 10.1.1.1 " - Subnet $subnet ;
818
- $vnet = Get-AzureRmVirtualNetwork - Name (' vnet ' + $rgname ) - ResourceGroupName $rgname ;
867
+ $subnet = New-AzureRmVirtualNetworkSubnetConfig - Name ($subnetName ) - AddressPrefix " 10.0.0.0/24" ;
868
+ $vnet = New-AzureRmVirtualNetwork - Force - Name ($vnetName ) - ResourceGroupName $rgname - Location $loc - AddressPrefix " 10.0.0.0/16" - Subnet $subnet ;
869
+ $vnet = Get-AzureRmVirtualNetwork - Name ($vnetName ) - ResourceGroupName $rgname ;
819
870
$subnetId = $vnet.Subnets [0 ].Id;
820
- $pubip = New-AzureRmPublicIpAddress - Force - Name (' pubip ' + $rgname ) - ResourceGroupName $rgname - Location $loc - AllocationMethod Dynamic - DomainNameLabel (' pubip ' + $rgname );
821
- $pubip = Get-AzureRmPublicIpAddress - Name (' pubip ' + $rgname ) - ResourceGroupName $rgname ;
871
+ $pubip = New-AzureRmPublicIpAddress - Force - Name ($publicIpName ) - ResourceGroupName $rgname - Location $loc - AllocationMethod Dynamic - DomainNameLabel ($publicIpName );
872
+ $pubip = Get-AzureRmPublicIpAddress - Name ($publicIpName ) - ResourceGroupName $rgname ;
822
873
$pubipId = $pubip.Id ;
823
- $nic = New-AzureRmNetworkInterface - Force - Name (' nic ' + $rgname ) - ResourceGroupName $rgname - Location $loc - SubnetId $subnetId - PublicIpAddressId $pubip.Id ;
824
- $nic = Get-AzureRmNetworkInterface - Name (' nic ' + $rgname ) - ResourceGroupName $rgname ;
874
+ $nic = New-AzureRmNetworkInterface - Force - Name ($nicName ) - ResourceGroupName $rgname - Location $loc - SubnetId $subnetId - PublicIpAddressId $pubip.Id ;
875
+ $nic = Get-AzureRmNetworkInterface - Name ($nicName ) - ResourceGroupName $rgname ;
825
876
$nicId = $nic.Id ;
826
877
827
878
$p = Add-AzureRmVMNetworkInterface - VM $p - Id $nicId ;
828
- Assert-AreEqual $p.NetworkProfile.NetworkInterfaces.Count 1 ;
829
- Assert-AreEqual $p.NetworkProfile.NetworkInterfaces [0 ].ReferenceUri $nicId ;
830
879
831
880
# Storage Account (SA)
832
- $stoname = ' sto' + $rgname ;
833
- $stotype = ' Standard_LRS' ;
834
- New-AzureRmStorageAccount - ResourceGroupName $rgname - Name $stoname - Location $loc - Type $stotype ;
835
- Retry- IfException { $global :stoaccount = Get-AzureRmStorageAccount - ResourceGroupName $rgname - Name $stoname ; }
836
- $stokey = (Get-AzureRmStorageAccountKey - ResourceGroupName $rgname - Name $stoname ).Key1;
881
+ New-AzureRmStorageAccount - ResourceGroupName $rgname - Name $storageAccountName - Location $loc - Type $stotype ;
882
+ $stokey = (Get-AzureRmStorageAccountKey - ResourceGroupName $rgname - Name $storageAccountName ).Key1;
837
883
838
- $osDiskName = ' osDisk' ;
839
- $osDiskCaching = ' ReadWrite' ;
840
- $osDiskVhdUri = " https://$stoname .blob.core.windows.net/test/os.vhd" ;
841
- $dataDiskVhdUri1 = " https://$stoname .blob.core.windows.net/test/data1.vhd" ;
842
- $dataDiskVhdUri2 = " https://$stoname .blob.core.windows.net/test/data2.vhd" ;
884
+ $osDiskVhdUri = " https://$storageAccountName .blob.core.windows.net/$vhdContainerName /$osDiskName .vhd" ;
885
+ $dataDiskVhdUri = " https://$storageAccountName .blob.core.windows.net/$vhdContainerName /$dataDiskName .vhd" ;
843
886
844
887
$p = Set-AzureRmVMOSDisk - VM $p - Name $osDiskName - VhdUri $osDiskVhdUri - Caching $osDiskCaching - CreateOption FromImage;
845
-
846
- $p = Add-AzureRmVMDataDisk - VM $p - Name ' testDataDisk1' - Caching ' ReadOnly' - DiskSizeInGB 10 - Lun 1 - VhdUri $dataDiskVhdUri1 - CreateOption Empty;
847
- $p = Add-AzureRmVMDataDisk - VM $p - Name ' testDataDisk2' - Caching ' ReadOnly' - DiskSizeInGB 11 - Lun 2 - VhdUri $dataDiskVhdUri2 - CreateOption Empty;
888
+ $p = Add-AzureRmVMDataDisk - VM $p - Name $dataDiskName - Caching ' ReadOnly' - DiskSizeInGB 2 - Lun 1 - VhdUri $dataDiskVhdUri - CreateOption Empty;
848
889
849
890
# OS & Image
850
- $user = " rdtest" ;
851
- $password = ' rdPa$$w0rd' ;
852
- $securePassword = ConvertTo-SecureString $password - AsPlainText - Force;
853
- $cred = New-Object System.Management.Automation.PSCredential ($user , $securePassword );
854
- $computerName = $vmname ;
855
- $vhdContainer = " https://$stoname .blob.core.windows.net/test" ;
891
+ $securePassword = ConvertTo-SecureString $adminPassword - AsPlainText - Force;
892
+ $cred = New-Object System.Management.Automation.PSCredential ($adminUser , $securePassword );
893
+ $computerName = $vmName ;
894
+ $vhdContainer = " https://$storageAccountName .blob.core.windows.net/$vhdContainerName " ;
856
895
857
896
$p = Set-AzureRmVMOperatingSystem - VM $p - Windows - ComputerName $computerName - Credential $cred - ProvisionVMAgent;
897
+ $p = Set-AzureRmVMSourceImage - VM $p - PublisherName $imagePublisher - Offer $imageOffer - Skus $imageSku - Version " latest" ;
858
898
859
- $imgRef = Get-DefaultCRPWindowsImageOffline ;
860
- $p = ($imgRef | Set-AzureRmVMSourceImage - VM $p );
861
-
862
- Assert-AreEqual $p.OSProfile.AdminUsername $user ;
863
- Assert-AreEqual $p.OSProfile.ComputerName $computerName ;
864
- Assert-AreEqual $p.OSProfile.AdminPassword $password ;
865
- Assert-AreEqual $p.OSProfile.WindowsConfiguration.ProvisionVMAgent $true ;
866
899
867
900
# Virtual Machine
868
- # TODO: Still need to do retry for New-AzureRmVM for SA, even it's returned in Get-.
869
901
New-AzureRmVM - ResourceGroupName $rgname - Location $loc - VM $p ;
870
902
871
- # Virtual Machine Extension
872
- $extname = ' ADETestExtension' ;
873
- $extver = ' 1.2' ;
874
- $user2 = " Bar12" ;
875
- $password2 = ' FoO@123' + $rgname ;
876
- $aadClientID = ' 97f847ef-9e1e-4c7c-9ae7-1c0f7c78f761' ;
877
- $aadClientSecret = ' ' ;
878
- $diskEncryptionKeyVaultUrl = ' https://sureddvaultsc2.vault.azure.net'
879
- $diskEncryptionKeyVaultId = ' /subscriptions/0ee9d577-9bc4-4a32-a4e8-c29981025378/resourceGroups/sureddrgsc2/providers/Microsoft.KeyVault/vaults/sureddvaultsc2' ;
880
- $volumeType = ' All' ;
881
-
882
- # Set custom script extension
883
- Set-AzureRmVMDiskEncryptionExtension - ResourceGroupName $rgname - Location $loc - VMName $vmname - Name $extname - TypeHandlerVersion $extver - AadClientID $aadClientID - AadClientSecret $aadClientSecret - DiskEncryptionKeyVaultUrl $diskEncryptionKeyVaultUrl - DiskEncryptionKeyVaultId $diskEncryptionKeyVaultId - VolumeType $volumeType ;
884
-
885
- $publisher = ' Microsoft.Azure.Security' ;
886
- $exttype = ' ADETest' ;
887
-
888
- # Get VM Extension
889
- $ext = Get-AzureRmVMAccessExtension - ResourceGroupName $rgname - VMName $vmname - Name $extname ;
890
- Assert-AreEqual $ext.ResourceGroupName $rgname ;
891
- Assert-AreEqual $ext.Name $extname ;
892
- Assert-AreEqual $ext.Publisher $publisher ;
893
- Assert-AreEqual $ext.ExtensionType $exttype ;
894
- Assert-AreEqual $ext.TypeHandlerVersion $extver ;
895
- # Assert-AreEqual $ext.UserName $user2;
896
- Assert-NotNull $ext.ProvisioningState ;
897
- # Assert-True {$ext.PublicSettings.Contains("UserName")};
898
-
899
- $ext = Get-AzureRmVMAccessExtension - ResourceGroupName $rgname - VMName $vmname - Name $extname - Status;
900
- Assert-AreEqual $ext.ResourceGroupName $rgname ;
901
- Assert-AreEqual $ext.Name $extname ;
902
- Assert-AreEqual $ext.Publisher $publisher ;
903
- Assert-AreEqual $ext.ExtensionType $exttype ;
904
- Assert-AreEqual $ext.TypeHandlerVersion $extver ;
905
- Assert-NotNull $ext.ProvisioningState ;
906
- Assert-NotNull $ext.Statuses ;
907
- # Assert-True {$ext.PublicSettings.Contains("UserName")};
908
- Assert-NotNull $ext.Statuses [0 ].Message;
909
-
910
- # Get VM
911
- $vm1 = Get-AzureRmVM - Name $vmname - ResourceGroupName $rgname ;
912
- Assert-AreEqual $vm1.Name $vmname ;
913
- Assert-AreEqual $vm1.NetworkProfile.NetworkInterfaces.Count 1 ;
914
- Assert-AreEqual $vm1.NetworkProfile.NetworkInterfaces [0 ].ReferenceUri $nicId ;
915
-
916
- Assert-AreEqual $vm1.OSProfile.AdminUsername $user ;
917
- Assert-AreEqual $vm1.OSProfile.ComputerName $computerName ;
918
- Assert-AreEqual $vm1.HardwareProfile.VirtualMachineSize $vmsize ;
919
-
920
- # Check Extensions in VM
921
- Assert-AreEqual $vm1.Extensions.Count 1 ;
922
- Assert-AreEqual $vm1.Extensions [0 ].Name $extname ;
923
- Assert-AreEqual $vm1.Extensions [0 ].Type ' Microsoft.Compute/virtualMachines/extensions' ;
924
- Assert-AreEqual $vm1.Extensions [0 ].Publisher $publisher ;
925
- Assert-AreEqual $vm1.Extensions [0 ].ExtensionType $exttype ;
926
- Assert-AreEqual $vm1.Extensions [0 ].TypeHandlerVersion $extver ;
927
- Assert-NotNull $vm1.Extensions [0 ].Settings;
903
+ # Enable encryption on the VM
904
+ Set-AzureRmVMDiskEncryptionExtension - ResourceGroupName $rgname - VMName $vmName - AadClientID $aadClientID - AadClientSecret $aadClientSecret - DiskEncryptionKeyVaultUrl $diskEncryptionKeyVaultUrl - DiskEncryptionKeyVaultId $keyVaultResourceId - KeyEncryptionKeyUrl $keyEncryptionKeyUrl - KeyEncryptionKeyVaultId $keyVaultResourceId - Force;
905
+ # Get encryption status
906
+ $encryptionStatus = Get-AzureRmVmDiskEncryptionStatus - ResourceGroupName $rgname - VMName $vmName ;
907
+ # Remove AzureDiskEncryption extension
908
+ Remove-AzureRmVMDiskEncryptionExtension - ResourceGroupName $rgname - VMName $vmName ;
928
909
929
910
}
930
911
finally
931
912
{
932
913
# Cleanup
933
- Clean - ResourceGroup $rgname
914
+ Remove-AzureRmResourceGroup - Name $rgname - Force;
934
915
}
935
916
}
0 commit comments