英文:
How can we create an Azure VM with trusted launch enabled with Azure Java SDK?
问题
根据标题的建议,我已经花了一些时间阅读 SDK 文档并进行测试,但到目前为止,我还没有找到一个方法在 AzureResourceManager.virtualMachine
下允许我在创建时显式设置虚拟机以启用可信启动功能的方法。
在 VirtualMachineInner
类中可以指定 SecurityProfile
,但我完全不知道如何将该对象传递给 AzureResourceManager.virtualMachine
下的 create()
方法。
以下是我目前想到的简短代码片段。
SecurityProfile securityProfile = new SecurityProfile()
.withSecurityType(SecurityTypes.TRUSTED_LAUNCH)
.withUefiSettings(new UefiSettings().withSecureBootEnabled(true).withVTpmEnabled(true))
.withEncryptionAtHost(true);
VirtualMachineInner vmi = new VirtualMachineInner();
vmi.withSecurityProfile(securityProfile);
提前感谢。
英文:
Like the title suggests, I've spent some time reading sdk documents and testing but had no luck so far finding a method under AzureResourceManager.virtualMachine
would allow me to explicitly set the VM to enable trusted launch feature at creation.
It is possible to specify SecurityProfile
with VirtualMachineInner
class but I have no clues at all passing the object to call the create()
method under AzureResourceManager.virtualMachine
.
Here's a short snippet I came up with so far.
SecurityProfile securityProfile = new SecurityProfile()
.withSecurityType(SecurityTypes.TRUSTED_LAUNCH)
.withUefiSettings(new UefiSettings().withSecureBootEnabled(true).withVTpmEnabled(true))
.withEncryptionAtHost(true);
VirtualMachineInner vmi = new VirtualMachineInner();
vmi.withSecurityProfile(securityProfile);
Thanks in advance.
答案1
得分: 0
VirtualMachineInner
类表示VM的内部属性,不应直接用于使用Azure Java SDK创建或管理虚拟机。
- 使用
VirtualMachine.DefinitionStages.WithCreate
接口提供的流畅生成器模式来定义并创建虚拟机,然后在创建虚拟机后单独配置可信启动设置。
import com.azure.resourcemanager.compute.models.SecurityProfile;
import com.azure.resourcemanager.compute.models.SecurityTypes;
import com.azure.resourcemanager.compute.models.UefiSettings;
import com.azure.resourcemanager.compute.models.VirtualMachine;
import com.azure.resourcemanager.compute.models.VirtualMachineSizeTypes;
// 使用可信启动设置创建SecurityProfile
SecurityProfile securityProfile = new SecurityProfile()
.withSecurityType(SecurityTypes.TRUSTED_LAUNCH)
.withUefiSettings(new UefiSettings().withSecureBootEnabled(true).withVTpmEnabled(true))
.withEncryptionAtHost(true);
// 使用Azure Java SDK创建虚拟机
VirtualMachine virtualMachine = azureResourceManager.virtualMachines()
.define(vmName)
.withRegion(Region.US_EAST)
.withExistingResourceGroup(resourceGroupName)
.withNewPrimaryNetwork(network)
.withPrimaryPrivateIPAddressDynamic()
.withNewPublicIPAddress()
.withPopularLinuxImage(knownLinuxImage)
.withRootUsername(vmUsername)
.withSsh(publicKey)
.withSize(VirtualMachineSizeTypes.STANDARD_D2_V2)
.withOSDiskStorageAccountType(StorageAccountTypes.PREMIUM_LRS)
.create();
// 单独为虚拟机配置可信启动设置
azureResourceManager.virtualMachines()
.manager()
.virtualMachineExtensionImages()
.register("Microsoft.Compute", "TrustedLaunchExtension", "1.0")
.beginCreateOrUpdate(
resourceGroupName,
virtualMachine.name(),
"TrustedLaunchExtension",
new VirtualMachineExtensionInner()
.withLocation(virtualMachine.regionName())
.withPublisher("Microsoft.Compute")
.withType("TrustedLaunchExtension")
.withVirtualMachineExtensionType("TrustedLaunchExtension")
.withAutoUpgradeMinorVersion(true)
.withSettings(securityProfile)
)
.waitForCompletion();
我尝试使用VirtualMachine.DefinitionStages.WithCreate.withTrustedLaunch()
方法启用可信启动,但无法成功。
- 在创建虚拟机时,Azure Java SDK中不提供
withTrustedLaunch()
方法来启用可信启动。
有一份声明引用了我们可以在VM创建后通过SDK设置安全启动参数的文档。
这是输出结果:
英文:
VirtualMachineInner
class represents the internal properties of the VM and is not to be used directly for creating or managing virtual machines using the Azure Java SDK.
- Use the fluent builder pattern provided by the
VirtualMachine.DefinitionStages.WithCreate
interface that define and it creates the virtual machine, then configure Trusted Launch settings separately after the virtual machine is created.
import com.azure.resourcemanager.compute.models.SecurityProfile;
import com.azure.resourcemanager.compute.models.SecurityTypes;
import com.azure.resourcemanager.compute.models.UefiSettings;
import com.azure.resourcemanager.compute.models.VirtualMachine;
import com.azure.resourcemanager.compute.models.VirtualMachineSizeTypes;
// Create a SecurityProfile with Trusted Launch settings
SecurityProfile securityProfile = new SecurityProfile()
.withSecurityType(SecurityTypes.TRUSTED_LAUNCH)
.withUefiSettings(new UefiSettings().withSecureBootEnabled(true).withVTpmEnabled(true))
.withEncryptionAtHost(true);
// Create the virtual machine using the Azure Java SDK
VirtualMachine virtualMachine = azureResourceManager.virtualMachines()
.define(vmName)
.withRegion(Region.US_EAST)
.withExistingResourceGroup(resourceGroupName)
.withNewPrimaryNetwork(network)
.withPrimaryPrivateIPAddressDynamic()
.withNewPublicIPAddress()
.withPopularLinuxImage(knownLinuxImage)
.withRootUsername(vmUsername)
.withSsh(publicKey)
.withSize(VirtualMachineSizeTypes.STANDARD_D2_V2)
.withOSDiskStorageAccountType(StorageAccountTypes.PREMIUM_LRS)
.create();
// Configure Trusted Launch settings separately for the virtual machine
azureResourceManager.virtualMachines()
.manager()
.virtualMachineExtensionImages()
.register("Microsoft.Compute", "TrustedLaunchExtension", "1.0")
.beginCreateOrUpdate(
resourceGroupName,
virtualMachine.name(),
"TrustedLaunchExtension",
new VirtualMachineExtensionInner()
.withLocation(virtualMachine.regionName())
.withPublisher("Microsoft.Compute")
.withType("TrustedLaunchExtension")
.withVirtualMachineExtensionType("TrustedLaunchExtension")
.withAutoUpgradeMinorVersion(true)
.withSettings(securityProfile)
)
.waitForCompletion();
I tried using the VirtualMachine.DefinitionStages.WithCreate.withTrustedLaunch()
method to enable Trusted Launch. but unable to do it.
withTrustedLaunch()
method is not available in the Azure Java SDK for enabling Trusted Launch during the creation of a virtual machine.
There is a statement quoting that we can set secure boot parameter by SDK after VM creation.
Here is the output:
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论