Inicio rápido: Implementación de una máquina virtual confidencial mediante una plantilla de ARM
Puede usar una plantilla de Azure Resource Manager (ARM) para crear rápidamente una máquina virtual confidencial. Las máquinas virtuales confidenciales se ejecutan en ambos procesadores AMD respaldados por procesadores AMD SEV-SNP e Intel respaldados por Intel TDX para lograr el cifrado y el aislamiento de memoria de la máquina virtual. Para más información, consulte Información general sobre las máquinas virtuales confidenciales.
Este tutorial aborda la implementación de una máquina virtual confidencial con una configuración personalizada.
Requisitos previos
- Suscripción a Azure. Las cuentas de evaluación gratuita no tienen acceso a las máquinas virtuales que se usan en este tutorial. Una opción es usar una suscripción de pago por uso.
- Si desea hacer una implementación desde la CLI de Azure, instale PowerShell e instale la CLI de Azure.
Implementación de una plantilla de máquina virtual confidencial mediante la CLI de Azure
Puede implementar una plantilla de máquina virtual confidencial que tenga cifrado confidencial del disco del sistema operativo opcional mediante una clave que administra la plataforma.
Para crear e implementar una máquina virtual confidencial mediante una plantilla de ARM a través de la CLI de Azure:
Inicie sesión en su cuenta de Azure, en la CLI de Azure.
az login
Establezca su suscripción a Azure. Reemplace
<subscription-id>
por el identificador de suscripción. Asegúrese de usar una suscripción que cumpla los requisitos previos.az account set --subscription <subscription-id>
Establezca las variables de la máquina virtual confidencial. Proporcione el nombre de implementación (
$deployName
), el grupo de recursos ($resourceGroup
), el nombre de la máquina virtual ($vmName
) y la región de Azure ($region
). Reemplace los valores de ejemplo por su propia información.Nota
Las máquinas virtuales confidenciales no están disponibles en todas las ubicaciones. Para las ubicaciones admitidas actualmente, consulte qué productos de máquina virtual están disponibles en la región de Azure.
$deployName="<deployment-name>" $resourceGroup="<resource-group-name>" $vmName= "<confidential-vm-name>" $region="<region-name>"
Si el grupo de recursos especificado no existe, cree un grupo de recursos con ese nombre.
az group create -n $resourceGroup -l $region
Implemente la máquina virtual en Azure mediante una plantilla de ARM con un archivo de parámetros personalizado y archivo de plantilla.
az deployment group create ` -g $resourceGroup ` -n $deployName ` -u "<json-template-file-path>" ` -p "<json-parameter-file-path>" ` -p vmLocation=$region ` vmName=$vmName
Definición de un archivo de parámetros personalizado
Al crear una máquina virtual confidencial a través de la interfaz de línea de comandos de Azure (CLI de Azure), debe definir un archivo de parámetros personalizado. Para crear un archivo de parámetros JSON personalizado:
Inicie sesión en su cuenta de Azure mediante la CLI de Azure.
Cree un archivo de parámetros JSON. Por ejemplo,
azuredeploy.parameters.json
.En función de la imagen del sistema operativo que use, puede copiar el archivo de parámetros de Windows de ejemplo o el archivo de parámetros de Linux de ejemplo en su archivo de parámetros.
Edite el código JSON en el archivo de parámetros según sea necesario. Por ejemplo, actualice el nombre de la imagen del sistema operativo (
osImageName
) o el nombre de usuario de administrador (adminUsername
).Configure la configuración del tipo de seguridad (
securityType
). ElijaVMGuestStateOnly
para no usar ningún cifrado confidencial de disco del sistema operativo. O bien, elijaDiskWithVMGuestState
para usar un cifrado confidencial del disco del sistema operativo con una clave administrada por la plataforma. Solo para las SKU de Intel TDX y las imágenes basadas en Linux, los clientes pueden elegir el tipo de seguridadNonPersistedTPM
implementar con un vTPM efímero. Para el tipo de seguridadNonPersistedTPM
use el valor mínimo de "apiVersion": "2023-09-01" enMicrosoft.Compute/virtualMachines
en el archivo de plantilla.Guarde el archivo de parámetros.
Ejemplo del archivo de parámetros de Windows
Use este ejemplo para crear un archivo de parámetros personalizado para una máquina virtual confidencial basada en Windows.
{
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"vmSize": {
"value": "Standard_DC2as_v5"
},
"osImageName": {
"value": "Windows Server 2022 Gen 2"
},
"securityType": {
"value": "DiskWithVMGuestState"
},
"adminUsername": {
"value": "testuser"
},
"adminPasswordOrKey": {
"value": "<your password>"
}
}
}
Archivo de parámetros de Linux de ejemplo
Use este ejemplo para crear un archivo de parámetros personalizado para una máquina virtual confidencial basada en Linux.
{
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"vmSize": {
"value": "Standard_DC2as_v5"
},
"osImageName": {
"value": "Ubuntu 20.04 LTS Gen 2"
},
"securityType": {
"value": "DiskWithVMGuestState"
},
"adminUsername": {
"value": "testuser"
},
"authenticationType": {
"value": "sshPublicKey"
},
"adminPasswordOrKey": {
"value": <your SSH public key>
}
}
}
Nota:
Reemplace el valor osImageName según corresponda.
Implementación de una plantilla de máquina virtual confidencial con cifrado confidencial del disco del sistema operativo mediante una clave administrada por el cliente
Inicie sesión en su cuenta de Azure mediante la CLI de Azure.
az login
Establezca su suscripción a Azure. Reemplace
<subscription-id>
por el identificador de suscripción. Asegúrese de usar una suscripción que cumpla los requisitos previos.az account set --subscription <subscription-id>
Concesión de una entidad de servicio de máquina virtual confidencial
Confidential VM Orchestrator
al inquilinoPara este paso es preciso ser Administración global o tener el rol RBAC de administrador de acceso de usuario. Instale el SDK de Microsoft Graph para ejecutar los comandos siguientes.
Connect-Graph -Tenant "your tenant ID" Application.ReadWrite.All New-MgServicePrincipal -AppId bf7b6499-ff71-4aa2-97a4-f372087be7f0 -DisplayName "Confidential VM Orchestrator"
Configure su almacén de claves de Azure. Para obtener información sobre cómo usar un HSM administrado con Azure Key Vault en su lugar, consulte el paso siguiente.
Cree un grupo de recursos para su almacén de claves. La instancia del almacén de claves y la máquina virtual confidencial deben estar en la misma región de Azure.
$resourceGroup = <key vault resource group> $region = <Azure region> az group create --name $resourceGroup --location $region
Cree una instancia del almacén de claves con una SKU Premium y seleccione su región preferida. No se admite la SKU estándar.
$KeyVault = <name of key vault> az keyvault create --name $KeyVault --resource-group $resourceGroup --location $region --sku Premium --enable-purge-protection
Asegúrese de que tiene un rol de propietario en este almacén de claves.
Conceda a
Confidential VM Orchestrator
permisos para usarget
yrelease
con el almacén de claves.$cvmAgent = az ad sp show --id "bf7b6499-ff71-4aa2-97a4-f372087be7f0" | Out-String | ConvertFrom-Json az keyvault set-policy --name $KeyVault --object-id $cvmAgent.Id --key-permissions get release
(Opcional) Si no desea usar ningún almacén de claves de Azure, puede crear en su lugar un HSM administrado por Azure Key Vault.
Siga el inicio rápido para crear un HSM administrado por Azure Key Vault para aprovisionar y activar HSM administrado por Azure Key Vault.
Habilite la protección de purga en el HSM administrado por Azure. Este paso es necesario para habilitar la versión de la clave.
az keyvault update-hsm --subscription $subscriptionId -g $resourceGroup --hsm-name $hsm --enable-purge-protection true
Conceda a
Confidential VM Orchestrator
permisos a HSM administrado.$cvmAgent = az ad sp show --id "bf7b6499-ff71-4aa2-97a4-f372087be7f0" | Out-String | ConvertFrom-Json az keyvault role assignment create --hsm-name $hsm --assignee $cvmAgent.Id --role "Managed HSM Crypto Service Release User" --scope /keys/$KeyName
Cree una nueva clave con Azure Key Vault. Para obtener información sobre cómo usar un HSM administrado por Azure en su lugar, consulte el paso siguiente.
Prepare y descargue la directiva de versiones de claves en el disco local.
Cree una nueva clave.
$KeyName = <name of key> $KeySize = 3072 az keyvault key create --vault-name $KeyVault --name $KeyName --ops wrapKey unwrapkey --kty RSA-HSM --size $KeySize --exportable true --policy "@.\skr-policy.json"
Obtenga información sobre la clave que ha creado.
$encryptionKeyVaultId = ((az keyvault show -n $KeyVault -g $resourceGroup) | ConvertFrom-Json).id $encryptionKeyURL= ((az keyvault key show --vault-name $KeyVault --name $KeyName) | ConvertFrom-Json).key.kid
Implemente un conjunto de cifrado de disco (DES) mediante una plantilla ARM de DES (
deployDES.json
).$desName = <name of DES> $deployName = <name of deployment> $desArmTemplate = <name of DES ARM template file> az deployment group create ` -g $resourceGroup ` -n $deployName ` -f $desArmTemplate ` -p desName=$desName ` -p encryptionKeyURL=$encryptionKeyURL ` -p encryptionKeyVaultId=$encryptionKeyVaultId ` -p region=$region
Asigne acceso de clave al archivo DES.
$desIdentity= (az disk-encryption-set show -n $desName -g $resourceGroup --query [identity.principalId] -o tsv) az keyvault set-policy -n $KeyVault ` -g $resourceGroup ` --object-id $desIdentity ` --key-permissions wrapkey unwrapkey get
(Opcional) Cree una nueva clave a partir de un HSM administrado por Azure.
Prepare y descargue la directiva de versiones de claves en el disco local.
Cree la nueva clave.
$KeyName = <name of key> $KeySize = 3072 az keyvault key create --hsm-name $hsm --name $KeyName --ops wrapKey unwrapkey --kty RSA-HSM --size $KeySize --exportable true --policy "@.\skr-policy.json"
Obtenga información sobre la clave que ha creado.
$encryptionKeyURL = ((az keyvault key show --hsm-name $hsm --name $KeyName) | ConvertFrom-Json).key.kid
Implemente un DES.
$desName = <name of DES> az disk-encryption-set create -n $desName ` -g $resourceGroup ` --key-url $encryptionKeyURL
Asigne acceso de clave al DES.
desIdentity=$(az disk-encryption-set show -n $desName -g $resourceGroup --query [identity.principalId] -o tsv) az keyvault set-policy -n $hsm ` -g $resourceGroup ` --object-id $desIdentity ` --key-permissions wrapkey unwrapkey get
Implemente la máquina virtual confidencial con la clave administrada por el cliente.
Obtenga el identificador de recurso para el DES.
$desID = (az disk-encryption-set show -n $desName -g $resourceGroup --query [id] -o tsv)
Implemente la máquina virtual confidencial mediante una plantilla de ARM de máquina virtual confidencial para Intel TDX y un archivo de parámetros de implementación (por ejemplo,
azuredeploy.parameters.win2022.json
) con la clave administrada por el cliente.$deployName = <name of deployment> $vmName = <name of confidential VM> $cvmArmTemplate = <name of confidential VM ARM template file> $cvmParameterFile = <name of confidential VM parameter file> az deployment group create ` -g $resourceGroup ` -n $deployName ` -f $cvmArmTemplate ` -p $cvmParameterFile ` -p diskEncryptionSetId=$desID ` -p vmName=$vmName
Conéctese a la máquina virtual confidencial para asegurarse de que la creación se realizó correctamente.