Início Rápido: Implantar uma VM confidencial com o modelo do ARM
Você pode usar um modelo do ARM (modelo do Azure Resource Manager) para criar uma VM confidencial do Azure rapidamente. As VMs confidenciais são executadas nos processadores AMD, com suporte dos processadores AMD SEV-SNP, e nos processadores Intel, com suporte do Intel TDX, para obtenção da criptografia e isolamento de memória da VM. Para obter mais informações, confira Visão geral da VM confidencial.
Este tutorial aborda a implantação de uma VM confidencial com uma configuração personalizada.
Pré-requisitos
- Uma assinatura 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 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 a VM confidencial usando um modelo do ARM por meio da CLI do Azure:
Entre em sua conta do Azure usando a CLI do Azure.
az login
Defina sua assinatura do Azure. Substitua
<subscription-id>
pelo identificador de assinatura. Use 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.Observação
As VMs confidenciais não estão disponíveis em todos os locais. Para locais com suporte no momento, confira 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 do ARM com um arquivo de parâmetro personalizado e 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 CLI do Azure (Interface de linha de comando do Azure), você precisa definir um arquivo de parâmetro personalizado. Para criar um arquivo de parâmetro JSON personalizado:
Entre em sua conta do Azure usando a CLI do Azure.
Crie um arquivo de parâmetro JSON. Por exemplo,
azuredeploy.parameters.json
.Dependendo da imagem do SO que você está usando, copie o arquivo de parâmetro do Windows de exemplo ou o arquivo de parâmetro do Linux de exemplo em seu arquivo de parâmetro.
Edite o código JSON no arquivo de parâmetro, conforme necessário. Por exemplo, atualize o nome da imagem do SO (
osImageName
) ou o nome de usuário do administrador (adminUsername
).Defina a configuração de tipo de segurança (
securityType
). EscolhaVMGuestStateOnly
para opção de sem criptografia confidencial de disco do sistema operacional. Ou escolhaDiskWithVMGuestState
para opção de criptografia confidencial de disco do sistema operacional com uma chave gerenciada pela plataforma. Para SKUs do Intel TDX e imagens baseadas em Linux, os clientes podem escolher o tipo de segurançaNonPersistedTPM
a ser implantado com um vTPM efêmero. No caso do tipo de segurançaNonPersistedTPM
, use a “apiVersion” mínima: “2023-09-01” emMicrosoft.Compute/virtualMachines
no arquivo de modelo.Salve o arquivo de parâmetro.
Arquivo de parâmetro do Windows de exemplo
Use este exemplo para criar um arquivo de parâmetro personalizado para uma VM confidencial baseada em 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 do 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>
}
}
}
Observação
Substitua o valor de osImageName na conformidade.
Implantar modelo de VM confidencial com criptografia confidencial de disco do sistema operacional por meio de chave gerenciada pelo cliente
Entre em sua conta do Azure usando a CLI do Azure.
az login
Defina sua assinatura do Azure. Substitua
<subscription-id>
pelo identificador de assinatura. Use uma assinatura que atenda aos pré-requisitos.az account set --subscription <subscription-id>
Conceder entidade de serviço
Confidential VM Orchestrator
de VM confidencial ao locatárioPara esta etapa, é necessário ser um administrador global ou ter a função RBAC de Administrador de Acesso do Usuário. Instalar 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 o seu cofre de chaves do Azure. Para saber como usar um HSM gerenciado do Azure Key Vault em vez disso, 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 em sua região preferida. O SKU Standard não é compatível.
$KeyVault = <name of key vault> az keyvault create --name $KeyVault --resource-group $resourceGroup --location $region --sku Premium --enable-purge-protection
Verifique se você tem uma função de proprietário nesse cofre de chaves.
Dê permissões
Confidential VM Orchestrator
aget
erelease
o 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 você não quiser usar um cofre de chaves do Azure, poderá 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 HSM Gerenciado do Azure Key Vault.
Habilite a proteção de limpeza no HSM Gerenciado do Azure. Essa 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 permissões
Confidential VM Orchestrator
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 Azure Key Vault. Para saber como usar um HSM gerenciado do Azure em vez disso, consulte a próxima etapa.
Prepare e baixe a política de liberação de chaves no 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 você 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
Implantar um DES (Conjunto de Criptografia de Disco) usando um modelo do 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
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 de um HSM Gerenciado do Azure.
Prepare e baixe a política de liberação de chaves no 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 você 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 do 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
Conexão para sua VM confidencial para verificar se a criação foi bem-sucedida.