Guia de início rápido: implantar VM confidencial com modelo ARM
Você pode usar um modelo do Azure Resource Manager (modelo ARM) para criar uma VM confidencial do Azure rapidamente. VMs confidenciais são executadas em processadores AMD apoiados por AMD SEV-SNP e processadores Intel apoiados por Intel TDX para obter criptografia e isolamento de memória VM. Para obter mais informações, consulte Visão geral confidencial da VM.
Este tutorial aborda a implantação de uma VM confidencial com uma configuração personalizada.
Pré-requisitos
- Uma subscrição do Azure. As contas de avaliação gratuita não têm acesso às VMs usadas neste tutorial. Uma opção é usar uma assinatura paga conforme o uso.
- Se você quiser implantar a partir da CLI do Azure, instale o PowerShell e instale a CLI do Azure.
Implantar modelo de VM confidencial com a CLI do Azure
Você pode implantar um modelo de VM confidencial que tenha criptografia confidencial de disco do sistema operacional opcional por meio de uma chave gerenciada pela plataforma.
Para criar e implantar sua VM confidencial usando um modelo ARM por meio da CLI do Azure:
Entre na sua conta do Azure na CLI do Azure.
az login
Defina sua assinatura do Azure. Substitua
<subscription-id>
pelo identificador da sua subscrição. Certifique-se de usar uma assinatura que atenda aos pré-requisitos.az account set --subscription <subscription-id>
Defina as variáveis para sua VM confidencial. Forneça o nome da implantação (
$deployName
), o grupo de recursos ($resourceGroup
), o nome da VM ($vmName
) e a região do Azure ($region
). Substitua os valores de exemplo por suas próprias informações.Nota
As VMs confidenciais não estão disponíveis em todos os locais. Para locais atualmente suportados, consulte quais produtos de VM estão disponíveis por região do Azure.
$deployName="<deployment-name>" $resourceGroup="<resource-group-name>" $vmName= "<confidential-vm-name>" $region="<region-name>"
Se o grupo de recursos especificado não existir, crie um grupo de recursos com esse nome.
az group create -n $resourceGroup -l $region
Implante sua VM no Azure usando um modelo ARM com um arquivo de parâmetro personalizado e um arquivo de modelo.
az deployment group create ` -g $resourceGroup ` -n $deployName ` -u "<json-template-file-path>" ` -p "<json-parameter-file-path>" ` -p vmLocation=$region ` vmName=$vmName
Definir arquivo de parâmetro personalizado
Ao criar uma VM confidencial por meio da Interface de Linha de Comando do Azure (CLI do Azure), você precisa definir um arquivo de parâmetro personalizado. Para criar um arquivo de parâmetro JSON personalizado:
Inicie sessão na sua conta do Azure através da CLI do Azure.
Crie um arquivo de parâmetro JSON. Por exemplo,
azuredeploy.parameters.json
.Dependendo da imagem do sistema operacional que você está usando, copie o arquivo de parâmetro de exemplo do Windows ou o arquivo de parâmetro de exemplo do Linux para o arquivo de parâmetros.
Edite o código JSON no arquivo de parâmetros conforme necessário. Por exemplo, atualize o nome da imagem do sistema operacional (
osImageName
) ou o nome de usuário do administrador (adminUsername
).Configure a definição do tipo de segurança (
securityType
). EscolhaVMGuestStateOnly
por nenhuma criptografia confidencial de disco do sistema operacional. Ou escolha aDiskWithVMGuestState
criptografia confidencial do disco do sistema operacional com uma chave gerenciada pela plataforma. Somente para SKUs Intel TDX e imagens baseadas em Linux, os clientes podem escolher o tipo de segurança a ser implantado com um vTPM efêmeroNonPersistedTPM
. Para o tipo de segurança,NonPersistedTPM
use o mínimo "apiVersion": "2023-09-01" noMicrosoft.Compute/virtualMachines
arquivo de modelo.Salve seu arquivo de parâmetros.
Exemplo de arquivo de parâmetro do Windows
Use este exemplo para criar um arquivo de parâmetro personalizado para uma VM confidencial baseada no 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>"
}
}
}
Exemplo de arquivo de parâmetro Linux
Use este exemplo para criar um arquivo de parâmetro personalizado para uma VM confidencial baseada em 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
Substitua o valor osImageName de acordo.
Implante um modelo de VM confidencial com criptografia confidencial de disco do sistema operacional por meio de chave gerenciada pelo cliente
Inicie sessão na sua conta do Azure através da CLI do Azure.
az login
Defina sua assinatura do Azure. Substitua
<subscription-id>
pelo identificador da sua subscrição. Certifique-se de usar uma assinatura que atenda aos pré-requisitos.az account set --subscription <subscription-id>
Conceder entidade
Confidential VM Orchestrator
de serviço de VM confidencial ao locatárioPara esta etapa, você precisa ser um Administrador Global ou precisa ter a função RBAC de Administrador de Acesso de Usuário. Instale o SDK do Microsoft Graph para executar os comandos abaixo.
Connect-Graph -Tenant "your tenant ID" Application.ReadWrite.All New-MgServicePrincipal -AppId bf7b6499-ff71-4aa2-97a4-f372087be7f0 -DisplayName "Confidential VM Orchestrator"
Configure seu cofre de chaves do Azure. Para saber como usar um HSM gerenciado do Azure Key Vault, consulte a próxima etapa.
Crie um grupo de recursos para o cofre de chaves. Sua instância do cofre de chaves e sua VM confidencial devem estar na mesma região do Azure.
$resourceGroup = <key vault resource group> $region = <Azure region> az group create --name $resourceGroup --location $region
Crie uma instância do cofre de chaves com um SKU premium e selecione sua região preferida. O SKU padrão não é suportado.
$KeyVault = <name of key vault> az keyvault create --name $KeyVault --resource-group $resourceGroup --location $region --sku Premium --enable-purge-protection
Certifique-se de que tem uma função de proprietário neste cofre de chaves.
Conceda
Confidential VM Orchestrator
permissões ao cofre de chaves erelease
aoget
cofre de chaves.$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) Se não quiser usar um cofre de chaves do Azure, você pode criar um HSM gerenciado do Azure Key Vault.
Siga o início rápido para criar um HSM Gerenciado do Azure Key Vault para provisionar e ativar o Azure Key Vault Managed HSM.
Habilite a proteção contra limpeza no HSM gerenciado do Azure. Esta etapa é necessária para habilitar a liberação de chaves.
az keyvault update-hsm --subscription $subscriptionId -g $resourceGroup --hsm-name $hsm --enable-purge-protection true
Conceda
Confidential VM Orchestrator
permissões ao HSM gerenciado.$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
Crie uma nova chave usando o Cofre de Chaves do Azure. Para saber como usar um HSM gerenciado do Azure, consulte a próxima etapa.
Prepare e transfira a política de libertação de chaves para o disco local.
Crie uma nova chave.
$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"
Obtenha informações sobre a chave que criou.
$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
Implante um conjunto de criptografia de disco (DES) usando um modelo DES ARM (
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
Atribua acesso de chave ao arquivo 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) Crie uma nova chave a partir de um HSM Gerenciado do Azure.
Prepare e transfira a política de libertação de chaves para o disco local.
Crie a nova chave.
$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"
Obtenha informações sobre a chave que criou.
$encryptionKeyURL = ((az keyvault key show --hsm-name $hsm --name $KeyName) | ConvertFrom-Json).key.kid
Implante um DES.
$desName = <name of DES> az disk-encryption-set create -n $desName ` -g $resourceGroup ` --key-url $encryptionKeyURL
Atribua acesso de chave ao 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
Implante sua VM confidencial com a chave gerenciada pelo cliente.
Obtenha a ID do recurso para o DES.
$desID = (az disk-encryption-set show -n $desName -g $resourceGroup --query [id] -o tsv)
Implante sua VM confidencial usando um modelo ARM de VM confidencial para Intel TDX e um arquivo de parâmetro de implantação (por exemplo,
azuredeploy.parameters.win2022.json
) com a chave gerenciada pelo 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
Conecte-se à sua VM confidencial para garantir que a criação foi bem-sucedida.