(Versión preliminar) Habilitación del inicio seguro en un conjunto de escalado de máquinas virtuales existente
Se aplica a: ✔️ Máquinas virtuales Linux ✔️ Máquinas virtuales Windows ✔️ Conjuntos de escalado de máquinas virtuales uniformes
Los conjuntos de escalado de máquinas virtuales de Azure admiten la habilitación del inicio seguro en los conjuntos de escalado de máquinas virtuales uniformes mediante la actualización al tipo de seguridad de inicio seguro.
El inicio seguro permite la seguridad de proceso fundamental en máquinas virtuales y conjuntos de escalado de Azure Generation 2 y los protege contra técnicas avanzadas y persistentes de ataque, como kits de arranque y rootkits. Para ello, combina tecnologías de infraestructura como arranque seguro, vTPM y supervisión de integridad de arranque en el conjunto de escalado.
Limitaciones
Actualmente no se admite la habilitación del inicio seguro en conjuntos de escalado de máquinas virtuales existentes con discos de datos conectados.
- Para comprobar si el conjunto de escalado está configurada con un disco de datos, vaya a la pestaña >Discos del menú Configuración> y marque la casilla Discos de datos
Actualmente no se admite la habilitación del inicio seguro en conjuntos de escalado de máquinas virtuales existentes.
Actualmente no se admite la habilitación del inicio seguro en clústeres de Service Fabric existentes y clústeres administrados de Service Fabric.
Requisitos previos
- Registre la característica
ImageSkuGenUpdateWithVMSS
en versión preliminar en el espacio de nombresMicrosoft.Compute
en la suscripción del conjunto de escalado. Para más información, consulte Configuración de características en versión preliminar en la suscripción de Azure - El conjunto de escalado no depende de las características que actualmente no sean compatibles con el inicio seguro.
- El conjunto de escalado debe configurarse con una familia de tamaños compatibles con el inicio seguro
Nota:
- El tamaño de la máquina virtual se puede cambiar junto con la actualización de inicio seguro. Asegúrese de que la cuota del nuevo tamaño de máquina virtual está en contexto para evitar errores de actualización. Consulte Comprobación de las cuotas de vCPU.
- Los cambios en el tamaño de máquina virtual volverán a crear una instancia de máquina virtual con un nuevo tamaño y requerirán tiempo de inactividad de una instancia de máquina virtual individual. Se puede realizar de forma gradual para evitar el tiempo de inactividad del conjunto de escalado.
- El conjunto de escalado debe configurarse con imagen de sistema operativo compatible con el inicio seguro. Para la imagen del sistema operativo de la galería de proceso de Azure, asegúrese de que la definición de imagen esté marcada como TrustedLaunchSupported
Habilitación del inicio seguro en el conjunto de escalado uniforme existente
En esta sección se documentan los pasos para usar una plantilla de ARM para habilitar el inicio seguro en un conjunto de escalado de máquinas virtuales uniformes existente.
Realice las siguientes modificaciones en el código de implementación de la plantilla de ARM existente. Para obtener una plantilla completa, consulte Inicio rápido de la plantilla de ARM del conjunto de escalado de inicio seguro.
Importante
El tipo de seguridad de inicio seguro está disponible con el conjunto de escalado apiVersion
2020-12-01
o superior. Asegúrese de que la versión de la API esté configurada correctamente antes de la actualización.
Imagen del sistema operativo: actualice la referencia de imagen del sistema operativo a la imagen de inicio compatible con el inicio seguro de Gen2. Asegúrese de que la imagen de origen Gen2 tenga el tipo de seguridad
TrustedLaunchSupported
si usa la imagen del sistema operativo de Azure Compute Gallery."storageProfile": { "osDisk": { "createOption": "FromImage", "caching": "ReadWrite" }, "imageReference": { "publisher": "MicrosoftWindowsServer", "offer": "WindowsServer", "sku": "2022-datacenter-azure-edition", "version": "latest" } }
(Opcional) Tamaño del conjunto de escalado: modifique el tamaño del conjunto de escalado si la familia de tamaño actual no es compatible con la configuración de seguridad de inicio seguro.
"sku": { "name": "Standard_D2s_v3", "tier": "Standard", "capacity": "[parameters('instanceCount')]" }
Perfil de seguridad: agregue el bloque
securityProfile
envirtualMachineProfile
para habilitar la configuración de seguridad de inicio seguro.Nota:
Configuración recomendada:
vTPM
:true
ysecureBoot
:true
secureBoot
debe establecerse enfalse
si usa algún controlador personalizado o kernel sin firmar en el sistema operativo."securityProfile": { "securityType": "TrustedLaunch", "uefiSettings": { "secureBootEnabled": true, "vTpmEnabled": true } }
(Recomendado) Extensión de atestación de invitado: agregue extensión de atestación de invitado (GA) para el recurso conjunto de escalado, lo que permite supervisión de la integridad de arranque para el conjunto de escalado.
Importante
La extensión de atestación de invitado requiere que
secureBoot
yvTPM
estén establecidos entrue
.{ "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'))]" ] }
Nombre del publicador de extensiones:
Tipo de SO Nombre del publicador de extensiones Windows Microsoft.Azure.Security.WindowsAttestation Linux Microsoft.Azure.Security.LinuxAttestation Revise los cambios realizados en la plantilla.
Expanda para ver la plantilla de ARM de ejemplo completa, que admite la actualización del conjunto de escalado existente al inicio seguro y la reversión (si es necesario).
{ "$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'))]" ] } ] }
Ejecute la implementación de la plantilla de ARM.
$resourceGroupName = "myResourceGroup" $parameterFile = "folderPathToFile\parameters.json" $templateFile = "folderPathToFile\template.json" New-AzResourceGroupDeployment ` -ResourceGroupName $resourceGroupName ` -TemplateFile $templateFile -TemplateParameterFile $parameterFile
Comprobación de que la implementación se ha realizado correctamente. Compruebe el tipo de seguridad y la configuración de UEFI del conjunto de escalado uniforme mediante Azure Portal. Compruebe la sección Tipo de seguridad de la página Información general.
Actualice manualmente las instancias de máquina virtual si el modo de actualización uniforme del conjunto de escalado se establece en
Manual
.$resourceGroupName = "myResourceGroup" $vmssName = "VMScaleSet001" Update-AzVmssInstance -ResourceGroupName $resourceGroupName -VMScaleSetName $vmssName -InstanceId "0"
Reversión
Para revertir los cambios del inicio seguro a una configuración correcta conocida anterior, debe establecer securityType
del conjunto de escalado en Estándar.
Para revertir los cambios del inicio seguro a una configuración correcta conocida anterior, establezca securityProfile
en Estándar tal como se muestra. Si lo desea, también puede revertir otros cambios de parámetros: imagen del sistema operativo, tamaño de la máquina virtual, y repetir los pasos 5-8 descritos con Habilitación del inicio seguro en el conjunto de escalado existente
"securityProfile": {
"securityType": "Standard",
"uefiSettings": "[null()]"
}
Pasos siguientes
(Recomendado) Las actualizaciones posteriores permiten la supervisión de la integridad de arranque para supervisar el estado de la máquina virtual mediante Microsoft Defender for Cloud.
Obtenga más información sobre el inicio seguro y revise las preguntas más frecuentes.