@@ -4791,3 +4791,157 @@ function Test-VirtualMachineScaleSetImageReferenceSkuUpdate
4791
4791
Clean - ResourceGroup $rgname ;
4792
4792
}
4793
4793
}
4794
+
4795
+ <#
4796
+ . SYNOPSIS
4797
+ Test Virtual Machine Scale Set VtpmEabled and SecureBootEnabled
4798
+ for the Trusted Launch feature setup.
4799
+ Tests that GuestAttestation extension is also installed.
4800
+ #>
4801
+ function Test-VirtualMachineScaleSetSecurityTypeWithoutConfigUpdate
4802
+ {
4803
+ # Setup
4804
+ $rgname = Get-ComputeTestResourceName ;
4805
+ $loc = Get-ComputeVMLocation ;
4806
+
4807
+ try
4808
+ {
4809
+ # Common
4810
+ New-AzResourceGroup - Name $rgname - Location $loc - Force;
4811
+
4812
+ $vmssSize = ' Standard_D4s_v3' ;
4813
+ $vmssName1 = ' vmss1' + $rgname ;
4814
+ $vmssName2 = ' vmss2' + $rgname ;
4815
+ $imageName = " Win2016DataCenterGenSecond" ;
4816
+ $PublisherName = " MicrosoftWindowsServer" ;
4817
+ $Offer = " WindowsServer" ;
4818
+ $SKU = " 2016-datacenter-gensecond" ;
4819
+ $domainNameLabel1 = " d1" + $rgname ;
4820
+ $domainNameLabel2 = " d2" + $rgname ;
4821
+ $disable = $false ;
4822
+ $enable = $true ;
4823
+ $securityType = " TrustedLaunch" ;
4824
+ $adminUsername = Get-ComputeTestResourceName ;
4825
+ $adminPassword = Get-PasswordForVM | ConvertTo-SecureString - AsPlainText - Force;
4826
+ $vmCred = New-Object System.Management.Automation.PSCredential ($adminUsername , $adminPassword );
4827
+
4828
+ # Create TL vmss
4829
+ $res = New-AzVmss - ResourceGroupName $rgname - Credential $vmCred - VMScaleSetName $vmssName1 - ImageName $imageName - DomainNameLabel $domainNameLabel1 ;
4830
+ Assert-Null $res.VirtualMachineProfile.SecurityProfile ;
4831
+
4832
+ # Test update functionality
4833
+ $vmssUp = Update-AzVmss - ResourceGroupName $rgname - VMScaleSetName $vmssName1 - SecurityType $securityType - EnableSecureBoot $disable - EnableVtpm $disable ;
4834
+ $vmssGet = Get-AzVmss - ResourcegroupName $rgname - VMScaleSetName $vmssName1 ;
4835
+ Assert-AreEqual $vmssGet.VirtualMachineProfile.SecurityProfile.SecurityType $securityType ;
4836
+
4837
+ $vmssUp1 = Update-AzVmss - ResourceGroupName $rgname - VMScaleSetName $vmssName1 - EnableVtpm $true ;
4838
+ $vmssGet1 = Get-AzVmss - ResourcegroupName $rgname - VMScaleSetName $vmssName1 ;
4839
+ Assert-AreEqual $vmssGet1.VirtualMachineProfile.SecurityProfile.UefiSettings.VTpmEnabled $true ;
4840
+
4841
+ $vmssUp2 = Update-AzVmss - ResourceGroupName $rgname - VMScaleSetName $vmssName1 - EnableSecureBoot $true ;
4842
+ $vmssGet2 = Get-AzVmss - ResourcegroupName $rgname - VMScaleSetName $vmssName1 ;
4843
+ Assert-AreEqual $vmssGet2.VirtualMachineProfile.SecurityProfile.UefiSettings.SecureBootEnabled $true ;
4844
+ }
4845
+ finally
4846
+ {
4847
+ # Cleanup
4848
+ Clean - ResourceGroup $rgname ;
4849
+ }
4850
+ }
4851
+
4852
+ <#
4853
+ . SYNOPSIS
4854
+ Test Virtual Machine Scale Set TL update and the EnableVtpm and EnableSecureBoot values.
4855
+ #>
4856
+ function Test-VirtualMachineScaleSetSecurityTypeUpdate
4857
+ {
4858
+ # Setup
4859
+ $rgname = Get-ComputeTestResourceName ;
4860
+ $loc = Get-ComputeVMLocation ;
4861
+
4862
+ try
4863
+ {
4864
+ # Common
4865
+ New-AzResourceGroup - Name $rgname - Location $loc - Force;
4866
+
4867
+ $vmssSize = ' Standard_D4s_v3' ;
4868
+ $PublisherName = " MicrosoftWindowsServer" ;
4869
+ $Offer = " WindowsServer" ;
4870
+ $SKU = " 2016-datacenter-gensecond" ;
4871
+ $securityType = " TrustedLaunch" ;
4872
+ $enable = $true ;
4873
+ $disable = $false ;
4874
+
4875
+ # NRP
4876
+ $vnetworkName = ' vnet' + $rgname ;
4877
+ $subnetName = ' subnet' + $rgname ;
4878
+ $subnet = New-AzVirtualNetworkSubnetConfig - Name $subnetName - AddressPrefix " 10.0.0.0/24" ;
4879
+ $vnet = New-AzVirtualNetwork - Name $vnetworkName - ResourceGroupName $rgname - Location $loc - AddressPrefix " 10.0.0.0/16" - Subnet $subnet ;
4880
+ $vnet = Get-AzVirtualNetwork - Name $vnetworkName - ResourceGroupName $rgname ;
4881
+ $subnetId = $vnet.Subnets [0 ].Id;
4882
+
4883
+ # New VMSS Parameters
4884
+ $vmssName1 = ' vmss1' + $rgname ;
4885
+ $vmssName2 = ' vmss2' + $rgname ;
4886
+ $vmssType = ' Microsoft.Compute/virtualMachineScaleSets' ;
4887
+
4888
+ $adminUsername = Get-ComputeTestResourceName ;
4889
+ $adminPassword = Get-PasswordForVM | ConvertTo-SecureString - AsPlainText - Force;
4890
+
4891
+ $imgRef = New-Object - TypeName ' Microsoft.Azure.Commands.Compute.Models.PSVirtualMachineImage' ;
4892
+ $imgRef.PublisherName = $PublisherName ;
4893
+ $imgRef.Offer = $Offer ;
4894
+ $imgRef.Skus = $SKU ;
4895
+ $imgRef.Version = " latest" ;
4896
+
4897
+ $ipCfg = New-AzVmssIPConfig - Name ' test' - SubnetId $subnetId ;
4898
+
4899
+ $vmss = New-AzVmssConfig - Location $loc - SkuCapacity 2 - SkuName $vmssSize - UpgradePolicyMode ' Manual' `
4900
+ | Add-AzVmssNetworkInterfaceConfiguration - Name ' test' - Primary $true - IPConfiguration $ipCfg `
4901
+ | Set-AzVmssOSProfile - ComputerNamePrefix ' test' - AdminUsername $adminUsername - AdminPassword $adminPassword `
4902
+ | Set-AzVmssStorageProfile - OsDiskCreateOption ' FromImage' - OsDiskCaching ' ReadOnly' `
4903
+ - ImageReferenceOffer $imgRef.Offer - ImageReferenceSku $imgRef.Skus - ImageReferenceVersion $imgRef.Version `
4904
+ - ImageReferencePublisher $imgRef.PublisherName ;
4905
+
4906
+ # Create TL Vmss
4907
+ $result = New-AzVmss - ResourceGroupName $rgname - VMScaleSetName $vmssName1 - VirtualMachineScaleSet $vmss ;
4908
+ $vmssGet = Get-AzVmss - ResourceGroupName $rgname - VMScaleSetName $vmssName1 ;
4909
+ Assert-Null $vmssGet.VirtualMachineProfile.SecurityProfile.SecurityType ;
4910
+
4911
+ # Test update functionality
4912
+ Update-AzVmss - ResourceGroupName $rgname - VMScaleSetName $vmssName1 - VirtualMachineScaleSet $vmssGet - SecurityType $securityType - EnableSecureBoot $disable - EnableVtpm $disable ;
4913
+
4914
+ $vmssGet = Get-AzVmss - ResourceGroupName $rgname - VMScaleSetName $vmssName1 ;
4915
+ Assert-AreEqual $vmssGet.VirtualMachineProfile.SecurityProfile.SecurityType $securityType ;
4916
+
4917
+ $vmssUp1 = Update-AzVmss - ResourceGroupName $rgname - VMScaleSetName $vmssName1 - VirtualMachineScaleSet $vmssGet - EnableVtpm $true ;
4918
+ $vmssGet1 = Get-AzVmss - ResourcegroupName $rgname - VMScaleSetName $vmssName1 ;
4919
+ Assert-AreEqual $vmssGet1.VirtualMachineProfile.SecurityProfile.UefiSettings.VTpmEnabled $true ;
4920
+
4921
+ $vmssUp2 = Update-AzVmss - ResourceGroupName $rgname - VMScaleSetName $vmssName1 - VirtualMachineScaleSet $vmssGet1 - EnableSecureBoot $true ;
4922
+ $vmssGet2 = Get-AzVmss - ResourcegroupName $rgname - VMScaleSetName $vmssName1 ;
4923
+ Assert-AreEqual $vmssGet2.VirtualMachineProfile.SecurityProfile.UefiSettings.SecureBootEnabled $true ;
4924
+
4925
+ # Guest Attestation extension defaulting test
4926
+ # Validate
4927
+ $vmGADefaultIdentity = " SystemAssigned" ; # New defaulting behavior that was unexpected but feature team says go with it.
4928
+ $extDefaultName = " GuestAttestation" ;
4929
+ $vmssGet = Get-AzVmss - ResourceGroupName $rgname - Name $vmssName1 ;
4930
+ # Assert-AreEqual $vmGADefaultIDentity $vmssGet.Identity.Type;
4931
+
4932
+ # $output = $vmssGet | Out-String;
4933
+ # Write-Verbose ($output);
4934
+ # Assert-True { $output.Contains($vmGADefaultIdentity) };
4935
+
4936
+ # $vmssvms = Get-AzVmssvm -ResourceGroupName $rgname -VMScaleSetName $vmssName1;
4937
+ # Assert-NotNull $vmssvms;
4938
+ # $vmssvm = Get-AzVmssvm -ResourceGroupName $rgname -VMScaleSetName $vmssName1 -InstanceId $vmssvms[0].InstanceId;
4939
+ # Assert-AreEqual $extDefaultName $vmssvm.Resources[2].Name;
4940
+ # Assert-True {$vmssvm.Resources[2].EnableAutomaticUpgrade};
4941
+ }
4942
+ finally
4943
+ {
4944
+ # Cleanup
4945
+ Clean - ResourceGroup $rgname ;
4946
+ }
4947
+ }
0 commit comments