@@ -3449,6 +3449,25 @@ function Test-VirtualMachineScaleSetGuestAttestation
3449
3449
$vmssvm = Get-AzVmssvm - ResourceGroupName $rgname - VMScaleSetName $vmssName - InstanceId $vmssvms [0 ].InstanceId;
3450
3450
Assert-AreEqual $extDefaultName $vmssvm.Resources [2 ].Name;
3451
3451
3452
+ # Simple param Set
3453
+ $username = Get-ComputeTestResourceName ;
3454
+ $securePassword = Get-PasswordForVM | ConvertTo-SecureString - AsPlainText - Force
3455
+ $credential = New-Object System.Management.Automation.PSCredential ($username , $securePassword );
3456
+
3457
+ $vmssname2 = " vmss2" + $rgname ;
3458
+ $domainNameLabel2 = " dnl" + $rgname ;
3459
+ $vmss2 = New-AzVmss - ResourceGroupName $rgname - VMScaleSetName $vmssname2 - ImageName ' Win2019DatacenterGen2' `
3460
+ - Credential $credential - InstanceCount 1 - DomainNameLabel $domainNameLabel2 - SecurityType " TrustedLaunch" `
3461
+ - EnableSecureBoot $true - EnableVtpm $true ;
3462
+
3463
+ $vmssGet2 = Get-AzVmss - ResourceGroupName $rgname - Name $vmssName2 ;
3464
+ $output2 = $vmssGet2 | Out-String ;
3465
+ Assert-True { $output2.Contains ($vmGADefaultIDentity ) };
3466
+
3467
+ $vmssvms = Get-AzVmssvm - ResourceGroupName $rgname - VMScaleSetName $vmssName2 ;
3468
+ Assert-NotNull $vmssvms ;
3469
+ $vmssvm = Get-AzVmssvm - ResourceGroupName $rgname - VMScaleSetName $vmssName2 - InstanceId $vmssvms [0 ].InstanceId;
3470
+ Assert-AreEqual $extDefaultName $vmssvm.Resources [2 ].Name;
3452
3471
3453
3472
}
3454
3473
finally
@@ -4401,4 +4420,182 @@ function Test-VirtualMachineScaleSetGetById
4401
4420
# Cleanup
4402
4421
Clean - ResourceGroup $rgname ;
4403
4422
}
4423
+ }
4424
+
4425
+ <#
4426
+ . SYNOPSIS
4427
+ Test Virtual Machine Scale Set VtpmEabled and SecureBootEnabled
4428
+ for the certain Trusted Launch feature setup.
4429
+ #>
4430
+ function Test-VirtualMachineScaleSetSecurityType
4431
+ {
4432
+ # Setup
4433
+ $rgname = Get-ComputeTestResourceName ;
4434
+ $loc = Get-ComputeVMLocation ;
4435
+
4436
+ try
4437
+ {
4438
+ # Common
4439
+ New-AzResourceGroup - Name $rgname - Location $loc - Force;
4440
+
4441
+ $vmssSize = ' Standard_D4s_v3' ;
4442
+ $PublisherName = " MicrosoftWindowsServer" ;
4443
+ $Offer = " WindowsServer" ;
4444
+ $SKU = " 2016-datacenter-gensecond" ;
4445
+ $securityType = " TrustedLaunch" ;
4446
+ $enable = $true ;
4447
+ $disable = $false ;
4448
+
4449
+ # NRP
4450
+ $vnetworkName = ' vnet' + $rgname ;
4451
+ $subnetName = ' subnet' + $rgname ;
4452
+ $subnet = New-AzVirtualNetworkSubnetConfig - Name $subnetName - AddressPrefix " 10.0.0.0/24" ;
4453
+ $vnet = New-AzVirtualNetwork - Name $vnetworkName - ResourceGroupName $rgname - Location $loc - AddressPrefix " 10.0.0.0/16" - Subnet $subnet ;
4454
+ $vnet = Get-AzVirtualNetwork - Name $vnetworkName - ResourceGroupName $rgname ;
4455
+ $subnetId = $vnet.Subnets [0 ].Id;
4456
+
4457
+ # New VMSS Parameters
4458
+ $vmssName1 = ' vmss1' + $rgname ;
4459
+ $vmssName2 = ' vmss2' + $rgname ;
4460
+ $vmssType = ' Microsoft.Compute/virtualMachineScaleSets' ;
4461
+
4462
+ $adminUsername = Get-ComputeTestResourceName ;
4463
+ $adminPassword = Get-PasswordForVM | ConvertTo-SecureString - AsPlainText - Force;
4464
+
4465
+ $imgRef = New-Object - TypeName ' Microsoft.Azure.Commands.Compute.Models.PSVirtualMachineImage' ;
4466
+ $imgRef.PublisherName = $PublisherName ;
4467
+ $imgRef.Offer = $Offer ;
4468
+ $imgRef.Skus = $SKU ;
4469
+ $imgRef.Version = " latest" ;
4470
+
4471
+
4472
+ $ipCfg = New-AzVmssIPConfig - Name ' test' - SubnetId $subnetId ;
4473
+
4474
+ $vmss = New-AzVmssConfig - Location $loc - SkuCapacity 2 - SkuName $vmssSize - UpgradePolicyMode ' Manual' `
4475
+ | Add-AzVmssNetworkInterfaceConfiguration - Name ' test' - Primary $true - IPConfiguration $ipCfg `
4476
+ | Set-AzVmssOSProfile - ComputerNamePrefix ' test' - AdminUsername $adminUsername - AdminPassword $adminPassword `
4477
+ | Set-AzVmssStorageProfile - OsDiskCreateOption ' FromImage' - OsDiskCaching ' ReadOnly' `
4478
+ - ImageReferenceOffer $imgRef.Offer - ImageReferenceSku $imgRef.Skus - ImageReferenceVersion $imgRef.Version `
4479
+ - ImageReferencePublisher $imgRef.PublisherName ;
4480
+
4481
+ # Requirements for the TrustedLaunch default behavior.
4482
+ # Case 1: -SecurityType = TrustedLaunch || ConfidentialVM
4483
+ # validate that for -SecurityType "TrustedLaunch" "-Vtpm" and -"SecureBoot" are "Enabled/true"
4484
+ $vmss1 = Set-AzVmssSecurityProfile - VirtualMachineScaleSet $vmss - SecurityType $securityType ;
4485
+ $result = New-AzVmss - ResourceGroupName $rgname - VMScaleSetName $vmssName1 - VirtualMachineScaleSet $vmss1 ;
4486
+ $vmssGet = Get-AzVmss - ResourceGroupName $rgname - VMScaleSetName $vmssName1 ;
4487
+
4488
+ Assert-AreEqual $vmssGet.VirtualMachineProfile.SecurityProfile.SecurityType $securityType ;
4489
+ Assert-AreEqual $vmssGet.VirtualMachineProfile.SecurityProfile.UefiSettings.VTpmEnabled $true ;
4490
+ Assert-AreEqual $vmssGet.VirtualMachineProfile.SecurityProfile.UefiSettings.SecureBootEnabled $true ;
4491
+
4492
+ # Case 2: -SecurityType = "TrustedLaunch" || "ConfidentialVM" -EnableVtpm $false -EnableSecureBoot $true
4493
+ $vmss2 = Set-AzVmssUefi - VirtualMachineScaleSet $VMSS - EnableVtpm $disable - EnableSecureBoot $enable ;
4494
+ $result = New-AzVmss - ResourceGroupName $rgname - VMScaleSetName $vmssName2 - VirtualMachineScaleSet $vmss2 ;
4495
+ $vmssGet = Get-AzVmss - ResourceGroupName $rgname - VMScaleSetName $vmssName2 ;
4496
+
4497
+ Assert-AreEqual $vmssGet.VirtualMachineProfile.SecurityProfile.SecurityType $securityType ;
4498
+ Assert-AreEqual $vmssGet.VirtualMachineProfile.SecurityProfile.UefiSettings.VTpmEnabled $false ;
4499
+ Assert-AreEqual $vmssGet.VirtualMachineProfile.SecurityProfile.UefiSettings.SecureBootEnabled $true ;
4500
+ # Vmss Identity is now in fact only UserAssigned as expected.
4501
+
4502
+ # Guest Attestation extension defaulting test
4503
+ # Validate
4504
+ $vmGADefaultIdentity = " SystemAssigned" ; # New defaulting behavior that was unexpected but feature team says go with it.
4505
+ $extDefaultName = " GuestAttestation" ;
4506
+ $vmssGet = Get-AzVmss - ResourceGroupName $rgname - Name $vmssName1 ;
4507
+ # Assert-AreEqual $vmGADefaultIDentity $vmssGet.Identity.Type;
4508
+
4509
+ $output = $vmssGet | Out-String ;
4510
+ # Write-Verbose ($output);
4511
+ Assert-True { $output.Contains ($vmGADefaultIdentity ) };
4512
+
4513
+ $vmssvms = Get-AzVmssvm - ResourceGroupName $rgname - VMScaleSetName $vmssName1 ;
4514
+ Assert-NotNull $vmssvms ;
4515
+ $vmssvm = Get-AzVmssvm - ResourceGroupName $rgname - VMScaleSetName $vmssName1 - InstanceId $vmssvms [0 ].InstanceId;
4516
+ Assert-AreEqual $extDefaultName $vmssvm.Resources [2 ].Name;
4517
+ }
4518
+ finally
4519
+ {
4520
+ # Cleanup
4521
+ Clean - ResourceGroup $rgname ;
4522
+ }
4523
+ }
4524
+
4525
+
4526
+ <#
4527
+ . SYNOPSIS
4528
+ Test Virtual Machine Scale Set VtpmEabled and SecureBootEnabled
4529
+ for the Trusted Launch feature setup.
4530
+ Tests that GuestAttestation extension is also installed.
4531
+ #>
4532
+ function Test-VirtualMachineScaleSetSecurityTypeWithoutConfig
4533
+ {
4534
+ # Setup
4535
+ $rgname = Get-ComputeTestResourceName ;
4536
+ $loc = Get-ComputeVMLocation ;
4537
+
4538
+ try
4539
+ {
4540
+ # Common
4541
+ New-AzResourceGroup - Name $rgname - Location $loc - Force;
4542
+
4543
+ $vmssSize = ' Standard_D4s_v3' ;
4544
+ $vmssName1 = ' vmss1' + $rgname ;
4545
+ $vmssName2 = ' vmss2' + $rgname ;
4546
+ $imageName = " Win2016DataCenterGenSecond" ;
4547
+ $PublisherName = " MicrosoftWindowsServer" ;
4548
+ $Offer = " WindowsServer" ;
4549
+ $SKU = " 2016-datacenter-gensecond" ;
4550
+ $domainNameLabel1 = " d1" + $rgname ;
4551
+ $domainNameLabel2 = " d2" + $rgname ;
4552
+ $disable = $false ;
4553
+ $enable = $true ;
4554
+ $securityType = " TrustedLaunch" ;
4555
+ $adminUsername = Get-ComputeTestResourceName ;
4556
+ $adminPassword = Get-PasswordForVM | ConvertTo-SecureString - AsPlainText - Force;
4557
+ $vmCred = New-Object System.Management.Automation.PSCredential ($adminUsername , $adminPassword );
4558
+
4559
+ # Requirements for the TrustedLaunch default behavior.
4560
+ # Case 1: -SecurityType = TrustedLaunch || ConfidentialVM
4561
+ # validate that for -SecurityType "TrustedLaunch" "-Vtpm" and -"SecureBoot" are "Enabled/true"
4562
+ $res = New-AzVmss - ResourceGroupName $rgname - Credential $vmCred - VMScaleSetName $vmssName1 - ImageName $imageName - DomainNameLabel $domainNameLabel1 - SecurityType $securityType ;
4563
+
4564
+ Assert-AreEqual $res.VirtualMachineProfile.SecurityProfile.SecurityType $securityType ;
4565
+ Assert-AreEqual $res.VirtualMachineProfile.SecurityProfile.UefiSettings.VTpmEnabled $true ;
4566
+ Assert-AreEqual $res.VirtualMachineProfile.SecurityProfile.UefiSettings.SecureBootEnabled $true ;
4567
+
4568
+ # Case 2: -SecurityType = "TrustedLaunch" || "ConfidentialVM" -EnableVtpm $false -EnableSecureBoot $true
4569
+ $result = New-AzVmss - ResourceGroupName $rgname - Credential $vmCred - VMScaleSetName $vmssName2 - ImageName $imageName - DomainNameLabel $domainNameLabel2 - SecurityType $securityType - EnableVtpm $disable ;
4570
+
4571
+ Assert-AreEqual $result.VirtualMachineProfile.SecurityProfile.SecurityType $securityType ;
4572
+ Assert-AreEqual $result.VirtualMachineProfile.SecurityProfile.UefiSettings.VTpmEnabled $false ;
4573
+ Assert-AreEqual $result.VirtualMachineProfile.SecurityProfile.UefiSettings.SecureBootEnabled $true ;
4574
+
4575
+ # Update-AzVmss EnableVtpm
4576
+ $vmssUp = Update-AzVmss - ResourceGroupName $rgname - VMScaleSetName $vmssName2 - EnableVtpm $true ;
4577
+ $vmssGet2 = Get-AzVmss - ResourcegroupName $rgname - VMScaleSetName $vmssName2 ;
4578
+ Assert-AreEqual $vmssGet2.VirtualMachineProfile.SecurityProfile.UefiSettings.VTpmEnabled $true ;
4579
+
4580
+ # Guest Attestation extension defaulting test
4581
+ # Validate
4582
+ $vmGADefaultIdentity = " SystemAssigned" ; # New defaulting behavior that was unexpected but feature team says go with it.
4583
+ $extDefaultName = " GuestAttestation" ;
4584
+ $vmssGet = Get-AzVmss - ResourceGroupName $rgname - Name $vmssName1 ;
4585
+ # Assert-AreEqual $vmGADefaultIDentity $vmssGet.Identity.Type;
4586
+
4587
+ $output = $vmssGet | Out-String ;
4588
+ # Write-Verbose ($output);
4589
+ Assert-True { $output.Contains ($vmGADefaultIdentity ) };
4590
+
4591
+ $vmssvms = Get-AzVmssvm - ResourceGroupName $rgname - VMScaleSetName $vmssName1 ;
4592
+ Assert-NotNull $vmssvms ;
4593
+ $vmssvm = Get-AzVmssvm - ResourceGroupName $rgname - VMScaleSetName $vmssName1 - InstanceId $vmssvms [0 ].InstanceId;
4594
+ Assert-AreEqual $extDefaultName $vmssvm.Resources [2 ].Name;
4595
+ }
4596
+ finally
4597
+ {
4598
+ # Cleanup
4599
+ Clean - ResourceGroup $rgname ;
4600
+ }
4404
4601
}
0 commit comments