(Versão prévia) Habilitar a Inicialização confiável no Conjunto de dimensionamento de Máquinas virtuais existente
Aplica-se a: ✔️ VMs do Linux ✔️ VMs do Windows ✔️ Conjuntos de Dimensionamento de Máquinas Virtuais Uniformes
Os Conjuntos de dimensionamento de Máquinas virtuais do Azure dão suporte à habilitação da Inicialização confiável nas VMs dos Conjuntos de Dimensionamento Uniforme existentes, atualizando para o tipo de segurança da Inicialização confiável.
A Inicialização confiável habilita a segurança da computação fundamental nas máquinas virtuais de Azure de Geração 2 e protege contra as técnicas de ataque avançadas e persistentes, como kits de inicialização e rootkits. Ele faz isso combinando tecnologias de infraestrutura como Inicialização Segura, vTPM e Monitoramento de Integridade de Inicialização no seu Conjunto de dimensionamento.
Limitações
Atualmente, não há suporte para habilitar a Inicialização confiável nos Conjuntos de dimensionamento de máquinas virtuais com os discos de dados anexados existentes.
- Para validar se o conjunto de dimensionamento está configurado com o disco de dados, navegue até o conjunto de dimensionamento –>Discos no menu Configurações –> verifique no título Discos de dados
Atualmente, não há suporte para habilitar a Inicialização confiável nos Conjuntos de Dimensionamento de Máquinas Virtuais Flex existentes.
Atualmente, não há suporte para habilitar a Inicialização confiável nos Clusters do Service Fabric existentes e nos Clusters gerenciados do Service Fabric.
Pré-requisitos
- Registre dos Recursos de Visualização
ImageSkuGenUpdateWithVMSS
noMicrosoft.Compute
namespace na assinatura do conjunto de dimensionamento. Para obter mais detalhes, consulte Configurar os recursos de versão prévia na assinatura do Azure - O conjunto de dimensionamento não depende dos Recursos atualmente não compatíveis com a Inicialização confiável.
- O conjunto de dimensionamento deve ser configurado com a Família de tamanho com suporte de Inicialização confiável
Observação
- O tamanho da máquina virtual pode ser alterado junto com a atualização da Inicialização confiável. Certifique-se de que a cota para o novo Tamanho da VM esteja em vigor para evitar falhas na atualização. Consulte Verificar as cotas de vCPU.
- As alterações no Tamanho da máquina virtual recriarão a Instância da máquina virtual com o novo tamanho e exigirão tempo de inatividade de instância da máquina virtual individual. Isso pode ser feito em um modo de atualização contínua para evitar o tempo de inatividade do conjunto de dimensionamento.
- O conjunto de dimensionamento deve ser configurado com a Imagem do sistema operacional com suporte da Inicialização confiável. Quanto à Imagem do sistema operacional da galeria de computação do Azure, verifique se a definição de imagem está marcada como TrustedLaunchSupported
Habilitar a Inicialização confiável no Uniforme do Conjunto de dimensionamento existente
Esta seção documenta as etapas para usar um Modelo do ARM para habilitar a Inicialização confiável no uniforme do Conjunto de dimensionamento das Máquinas virtuais existentes.
Faça as seguintes modificações no código de implantação do Modelo do ARM existente. Para obter um modelo completo, consulte Modelo do ARM do Conjunto de dimensionamento de Inicialização Confiável do Início Rápido.
Importante
O tipo de segurança de início confiável está disponível no conjunto de dimensionamento apiVersion
2020-12-01
ou superior. Verifique se a versão da API está definida corretamente antes da atualização.
Imagem do sistema operacional: atualize a referência de imagem do sistema operacional para a imagem do sistema operacional compatível com o lançamento do Gen2-Trusted. Certifique-se de que a imagem Gen2 de origem tenha o tipo
TrustedLaunchSupported
de segurança se estiver usando a imagem do sistema operacional da Galeria de Computação do Azure."storageProfile": { "osDisk": { "createOption": "FromImage", "caching": "ReadWrite" }, "imageReference": { "publisher": "MicrosoftWindowsServer", "offer": "WindowsServer", "sku": "2022-datacenter-azure-edition", "version": "latest" } }
(Opcional) Tamanho do Conjunto de dimensionamento: modifique o Tamanho do conjunto de dimensionamento se a família do tamanho atual não tiver suporte com a configuração de segurança da Inicialização confiável.
"sku": { "name": "Standard_D2s_v3", "tier": "Standard", "capacity": "[parameters('instanceCount')]" }
Perfil de Segurança: adicione
securityProfile
bloco emvirtualMachineProfile
para habilitar a configuração de segurança da Inicialização Confiável.Observação
Configurações recomendadas:
vTPM
:true
esecureBoot
:true
secureBoot
deve ser definido comofalse
se você estiver usando drivers ou kernels personalizados não assinados no sistema operacional."securityProfile": { "securityType": "TrustedLaunch", "uefiSettings": { "secureBootEnabled": true, "vTpmEnabled": true } }
(Recomendado) Extensão de Atestado de Convidado: adicionar Extensão de Atestado de Convidado (GA) no recurso do Conjunto de dimensionamento, que permite o Monitoramento de integridade de inicialização no Conjunto de dimensionamento.
Importante
A extensão de atestado de convidado requer
secureBoot
evTPM
definidos comotrue
.{ "condition": "[and(parameters('vTPM'), parameters('secureBoot'))]", "type": "Microsoft.Compute/virtualMachineScaleSets/extensions", "apiVersion": "2022-03-01", "name": "[format('{0}/{1}', parameters('vmssName'), GuestAttestation)]", "location": "[parameters('location')]", "properties": { "publisher": "Microsoft.Azure.Security.WindowsAttestation", "type": "GuestAttestation", "typeHandlerVersion": "1.0", "autoUpgradeMinorVersion": true, "enableAutomaticUpgrade": true, "settings": { "AttestationConfig": { "MaaSettings": { "maaEndpoint": "[substring('emptystring', 0, 0)]", "maaTenantName": "GuestAttestation" } } } }, "dependsOn": [ "[resourceId('Microsoft.Compute/virtualMachineScaleSets', parameters('vmssName'))]" ] }
Nome do editor de extensão:
Tipo de sistema operacional Nome do editor de extensão Windows Microsoft.Azure.Security.WindowsAttestation Linux Microsoft.Azure.Security.LinuxAttestation Examine as alterações feitas no modelo.
Expandir para exibir o modelo completo do ARM de exemplo, que dá suporte à atualização do conjunto de dimensionamento existente na Inicialização confiável e na reversão (se necessário).
{ "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", "contentVersion": "1.0.0.0", "parameters": { "vmSku": { "type": "string", "defaultValue": "Standard_D2s_v3", "metadata": { "description": "Size of VMs in the VM Scale Set." } }, "sku": { "type": "string", "defaultValue": "2022-datacenter-azure-edition", "allowedValues": [ "2022-datacenter-azure-edition" ], "metadata": { "description": "The Windows version for the VM. This will pick a fully patched image of this given Windows version." } }, "vmssName": { "type": "string", "maxLength": 61, "metadata": { "description": "String used as a base for naming resources. Must be 3-61 characters in length and globally unique across Azure. A hash is prepended to this string for some resources, and resource-specific information is appended." } }, "instanceCount": { "type": "int", "defaultValue": 2, "maxValue": 100, "minValue": 1, "metadata": { "description": "Number of VM instances (100 or less)." } }, "adminUsername": { "type": "string", "metadata": { "description": "Admin username on all VMs." } }, "adminPassword": { "type": "securestring", "metadata": { "description": "Admin password on all VMs." } }, "location": { "type": "string", "defaultValue": "[resourceGroup().location]", "metadata": { "description": "Location for all resources." } }, "publicIpName": { "type": "string", "defaultValue": "myPublicIP", "metadata": { "description": "Name for the Public IP used to access the virtual machine Scale set." } }, "publicIPAllocationMethod": { "type": "string", "defaultValue": "Static", "allowedValues": [ "Dynamic", "Static" ], "metadata": { "description": "Allocation method for the Public IP used to access the virtual machine set." } }, "publicIpSku": { "type": "string", "defaultValue": "Standard", "allowedValues": [ "Basic", "Standard" ], "metadata": { "description": "SKU for the Public IP used to access the virtual machine Scale set." } }, "dnsLabelPrefix": { "type": "string", "defaultValue": "[toLower(format('{0}-{1}', parameters('vmssName'), uniqueString(resourceGroup().id)))]", "metadata": { "description": "Unique DNS Name for the Public IP used to access the virtual machine Scale set." } }, "healthExtensionProtocol": { "type": "string", "defaultValue": "TCP", "allowedValues": [ "TCP", "HTTP", "HTTPS" ] }, "healthExtensionPort": { "type": "int", "defaultValue": 3389 }, "healthExtensionRequestPath": { "type": "string", "defaultValue": "/" }, "overprovision": { "type": "bool", "defaultValue": false }, "upgradePolicy": { "type": "string", "defaultValue": "Manual", "allowedValues": [ "Manual", "Rolling", "Automatic" ] }, "maxBatchInstancePercent": { "type": "int", "defaultValue": 20 }, "maxUnhealthyInstancePercent": { "type": "int", "defaultValue": 20 }, "maxUnhealthyUpgradedInstancePercent": { "type": "int", "defaultValue": 20 }, "pauseTimeBetweenBatches": { "type": "string", "defaultValue": "PT5S" }, "securityType": { "type": "string", "defaultValue": "TrustedLaunch", "allowedValues": [ "Standard", "TrustedLaunch" ], "metadata": { "description": "Security Type of the Virtual Machine." } }, "encryptionAtHost": { "type": "bool", "defaultValue": false, "metadata": { "description": "This property can be used by user in the request to enable or disable the Host Encryption for the virtual machine or virtual machine Scale set. This will enable the encryption for all the disks including Resource/Temp disk at host itself. The default behavior is: The Encryption at host will be disabled unless this property is set to true for the resource." } } }, "variables": { "namingInfix": "[toLower(substring(format('{0}{1}', parameters('vmssName'), uniqueString(resourceGroup().id)), 0, 9))]", "addressPrefix": "10.0.0.0/16", "subnetPrefix": "10.0.0.0/24", "virtualNetworkName": "[format('{0}vnet', variables('namingInfix'))]", "subnetName": "[format('{0}subnet', variables('namingInfix'))]", "loadBalancerName": "[format('{0}lb', variables('namingInfix'))]", "natPoolName": "[format('{0}natpool', variables('namingInfix'))]", "bePoolName": "[format('{0}bepool', variables('namingInfix'))]", "natStartPort": 50000, "natEndPort": 50119, "natBackendPort": 3389, "nicName": "[format('{0}nic', variables('namingInfix'))]", "ipConfigName": "[format('{0}ipconfig', variables('namingInfix'))]", "imageReference": { "2022-datacenter-azure-edition": { "publisher": "MicrosoftWindowsServer", "offer": "WindowsServer", "sku": "[parameters('sku')]", "version": "latest" } }, "extensionName": "GuestAttestation", "extensionPublisher": "Microsoft.Azure.Security.WindowsAttestation", "extensionVersion": "1.0", "maaTenantName": "GuestAttestation", "maaEndpoint": "[substring('emptyString', 0, 0)]", "uefiSettingsJson": { "secureBootEnabled": true, "vTpmEnabled": true }, "rollingUpgradeJson": { "maxBatchInstancePercent": "[parameters('maxBatchInstancePercent')]", "maxUnhealthyInstancePercent": "[parameters('maxUnhealthyInstancePercent')]", "maxUnhealthyUpgradedInstancePercent": "[parameters('maxUnhealthyUpgradedInstancePercent')]", "pauseTimeBetweenBatches": "[parameters('pauseTimeBetweenBatches')]" } }, "resources": [ { "type": "Microsoft.Network/virtualNetworks", "apiVersion": "2022-05-01", "name": "[variables('virtualNetworkName')]", "location": "[parameters('location')]", "properties": { "addressSpace": { "addressPrefixes": [ "[variables('addressPrefix')]" ] }, "subnets": [ { "name": "[variables('subnetName')]", "properties": { "addressPrefix": "[variables('subnetPrefix')]" } } ] } }, { "type": "Microsoft.Network/publicIPAddresses", "apiVersion": "2022-05-01", "name": "[parameters('publicIpName')]", "location": "[parameters('location')]", "sku": { "name": "[parameters('publicIpSku')]" }, "properties": { "publicIPAllocationMethod": "[parameters('publicIPAllocationMethod')]", "dnsSettings": { "domainNameLabel": "[parameters('dnsLabelPrefix')]" } } }, { "type": "Microsoft.Network/loadBalancers", "apiVersion": "2022-05-01", "name": "[variables('loadBalancerName')]", "location": "[parameters('location')]", "sku": { "name": "[parameters('publicIpSku')]", "tier": "Regional" }, "properties": { "frontendIPConfigurations": [ { "name": "LoadBalancerFrontEnd", "properties": { "publicIPAddress": { "id": "[resourceId('Microsoft.Network/publicIPAddresses', parameters('publicIpName'))]" } } } ], "backendAddressPools": [ { "name": "[variables('bePoolName')]" } ], "inboundNatPools": [ { "name": "[variables('natPoolName')]", "properties": { "frontendIPConfiguration": { "id": "[resourceId('Microsoft.Network/loadBalancers/frontendIPConfigurations', variables('loadBalancerName'), 'loadBalancerFrontEnd')]" }, "protocol": "Tcp", "frontendPortRangeStart": "[variables('natStartPort')]", "frontendPortRangeEnd": "[variables('natEndPort')]", "backendPort": "[variables('natBackendPort')]" } } ] }, "dependsOn": [ "[resourceId('Microsoft.Network/publicIPAddresses', parameters('publicIpName'))]" ] }, { "type": "Microsoft.Compute/virtualMachineScaleSets", "apiVersion": "2022-03-01", "name": "[parameters('vmssName')]", "location": "[parameters('location')]", "sku": { "name": "[parameters('vmSku')]", "tier": "Standard", "capacity": "[parameters('instanceCount')]" }, "properties": { "virtualMachineProfile": { "storageProfile": { "osDisk": { "createOption": "FromImage", "caching": "ReadWrite" }, "imageReference": "[variables('imageReference')[parameters('sku')]]" }, "osProfile": { "computerNamePrefix": "[variables('namingInfix')]", "adminUsername": "[parameters('adminUsername')]", "adminPassword": "[parameters('adminPassword')]" }, "securityProfile": { "encryptionAtHost": "[parameters('encryptionAtHost')]", "securityType": "[parameters('securityType')]", "uefiSettings": "[if(equals(parameters('securityType'), 'TrustedLaunch'), variables('uefiSettingsJson'), null())]" }, "networkProfile": { "networkInterfaceConfigurations": [ { "name": "[variables('nicName')]", "properties": { "primary": true, "ipConfigurations": [ { "name": "[variables('ipConfigName')]", "properties": { "subnet": { "id": "[resourceId('Microsoft.Network/virtualNetworks/subnets', variables('virtualNetworkName'), variables('subnetName'))]" }, "loadBalancerBackendAddressPools": [ { "id": "[resourceId('Microsoft.Network/loadBalancers/backendAddressPools', variables('loadBalancerName'), variables('bePoolName'))]" } ], "loadBalancerInboundNatPools": [ { "id": "[resourceId('Microsoft.Network/loadBalancers/inboundNatPools', variables('loadBalancerName'), variables('natPoolName'))]" } ] } } ] } } ] }, "extensionProfile": { "extensions": [ { "name": "HealthExtension", "properties": { "publisher": "Microsoft.ManagedServices", "type": "ApplicationHealthWindows", "typeHandlerVersion": "1.0", "autoUpgradeMinorVersion": false, "settings": { "protocol": "[parameters('healthExtensionProtocol')]", "port": "[parameters('healthExtensionPort')]", "requestPath": "[if(equals(parameters('healthExtensionProtocol'), 'TCP'), null(), parameters('healthExtensionRequestPath'))]" } } } ] }, "diagnosticsProfile": { "bootDiagnostics": { "enabled": true } } }, "orchestrationMode": "Uniform", "overprovision": "[parameters('overprovision')]", "upgradePolicy": { "mode": "[parameters('upgradePolicy')]", "rollingUpgradePolicy": "[if(equals(parameters('upgradePolicy'), 'Rolling'), variables('rollingUpgradeJson'), null())]", "automaticOSUpgradePolicy": { "enableAutomaticOSUpgrade": true } } }, "dependsOn": [ "[resourceId('Microsoft.Network/loadBalancers', variables('loadBalancerName'))]", "[resourceId('Microsoft.Network/virtualNetworks', variables('virtualNetworkName'))]" ] }, { "condition": "[and(equals(parameters('securityType'), 'TrustedLaunch'), and(equals(variables('uefiSettingsJson').secureBootEnabled, true()), equals(variables('uefiSettingsJson').vTpmEnabled, true())))]", "type": "Microsoft.Compute/virtualMachineScaleSets/extensions", "apiVersion": "2022-03-01", "name": "[format('{0}/{1}', parameters('vmssName'), variables('extensionName'))]", "location": "[parameters('location')]", "properties": { "publisher": "[variables('extensionPublisher')]", "type": "[variables('extensionName')]", "typeHandlerVersion": "[variables('extensionVersion')]", "autoUpgradeMinorVersion": true, "enableAutomaticUpgrade": true, "settings": { "AttestationConfig": { "MaaSettings": { "maaEndpoint": "[variables('maaEndpoint')]", "maaTenantName": "[variables('maaTenantName')]" } } } }, "dependsOn": [ "[resourceId('Microsoft.Compute/virtualMachineScaleSets', parameters('vmssName'))]" ] } ] }
Execute a implantação do modelo do ARM.
$resourceGroupName = "myResourceGroup" $parameterFile = "folderPathToFile\parameters.json" $templateFile = "folderPathToFile\template.json" New-AzResourceGroupDeployment ` -ResourceGroupName $resourceGroupName ` -TemplateFile $templateFile -TemplateParameterFile $parameterFile
Verifique se a implantação foi bem-sucedida. Verifique o tipo de segurança e as configurações UEFI do uniforme do Conjunto de dimensionamento usando o portal do Azure. Verifique a seção Tipo de segurança na página Visão geral.
Atualize as instâncias da VM manualmente se o modo de atualização do uniforme do Conjunto de dimensionamento estiver definido como
Manual
.$resourceGroupName = "myResourceGroup" $vmssName = "VMScaleSet001" Update-AzVmssInstance -ResourceGroupName $resourceGroupName -VMScaleSetName $vmssName -InstanceId "0"
Reverter
Para reverter as alterações da Inicialização confiável para a configuração anterior conhecida, você precisa definir securityType
do Conjunto de dimensionamento como Standard.
Para reverter as alterações da Inicialização confiável para a configuração anterior conhecida, defina securityProfile
como Standard, conforme mostrado. Opcionalmente, você também pode reverter outras alterações de parâmetro – imagem do sistema operacional, tamanho da VM e repetir as etapas 5 a 8 descritas com Habilitar a Inicialização Confiável no conjunto de dimensionamento existente
"securityProfile": {
"securityType": "Standard",
"uefiSettings": "[null()]"
}
Próximas etapas
(Recomendado) As atualizações posteriores permitem que o Monitoramento de integridade de inicialização, monitore a integridade da VM usando Microsoft Defender para Nuvem.
Saiba mais sobre a Inicialização confiável e examinar perguntas frequentes.