Início Rápido: criar uma VM confidencial com a CLI do Azure
Aplica-se a: ✔️ VMs do Linux ✔️ VMs do Windows
Este início rápido mostra como usar a CLI (interface de linha de comando) do Azure para implantar uma máquina virtual confidencial (VM confidencial) no Azure. A CLI do Azure é usada para criar e gerenciar recursos do Azure por meio da linha de comando ou de scripts.
Pré-requisitos
Caso você não tenha uma assinatura do Azure, crie uma conta gratuita do Azure antes de começar.
Iniciar o Azure Cloud Shell
O Azure Cloud Shell é um shell interativo gratuito que pode ser usado para executar as etapas neste artigo. Ele tem ferramentas do Azure instaladas e configuradas para usar com sua conta.
Para abrir o Cloud Shell, basta selecionar Experimentar no canto superior direito de um bloco de código. Você também pode abrir o Cloud Shell em uma guia separada do navegador indo até https://shell.azure.com/bash. Selecione Copiar para copiar os blocos de código, cole-o no Cloud Shell e selecione Enter para executá-lo.
Se você preferir instalar e usar a CLI localmente, este início rápido exigirá a CLI do Azure versão 2.38.0 ou posterior. Execute az--version
para encontrar a versão. Se você precisa instalar ou atualizar, consulte Instalar a CLI do Azure.
Criar um grupo de recursos
Crie um grupo de recursos com o comando az group create. Um grupo de recursos do Azure é um contêiner lógico no qual os recursos do Azure são implantados e gerenciados. O exemplo a seguir cria um grupo de recursos chamado myResourceGroup no local northeurope:
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.
az group create --name myResourceGroup --location northeurope
Criar uma máquina virtual confidencial usando uma chave gerenciada pela plataforma
Crie uma VM com o comando az vm create.
O exemplo a seguir cria uma VM chamada myVM e adiciona uma conta de usuário chamada azureuser. O parâmetro --generate-ssh-keys
é usado para gerar automaticamente uma chave SSH e colocá-la no local de chave padrão (~/.ssh). Para usar um conjunto específico de chaves, use a opção --ssh-key-values
.
Para size
, selecione um tamanho de VM confidencial. Para obter mais informações, confira famílias de VMs confidenciais com suporte.
Escolha VMGuestStateOnly
para opção de sem criptografia confidencial de disco do sistema operacional. Ou escolha DiskWithVMGuestState
para opção de criptografia confidencial de disco do sistema operacional com uma chave gerenciada pela plataforma. A inicialização Segura está habilitada por padrão, mas é opcional para VMGuestStateOnly
. Para obter mais informações, consulte inicialização segura e vTPM. Para obter mais informações sobre criptografia e criptografia de disco no host, consulte criptografia de disco confidencial do sistema operacional e criptografia no host.
az vm create \
--resource-group myResourceGroup \
--name myVM \
--size Standard_DC4es_v5 \
--admin-username <azure-username> \
--admin-password <azure-password> \
--enable-vtpm true \
--image "Canonical:0001-com-ubuntu-confidential-vm-jammy:22_04-lts-cvm:latest" \
--public-ip-sku Standard \
--security-type ConfidentialVM \
--os-disk-security-encryption-type VMGuestStateOnly \
--enable-secure-boot true
A criação da VM e dos recursos de suporte demora alguns minutos. O seguinte exemplo de saída mostra que a operação de criação de VM foi bem-sucedida.
{
"fqdns": "",
"id": "/subscriptions/<guid>/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachines/myVM",
"location": "northeurope",
"macAddress": "<MAC-address>",
"powerState": "VM running",
"privateIpAddress": "10.20.255.255",
"publicIpAddress": "192.168.255.255",
"resourceGroup": "myResourceGroup",
"zones": ""
}
Anote o publicIpAddress
para usar posteriormente.
Criar uma máquina virtual confidencial usando uma chave gerenciada pelo cliente
Para criar um conjunto de criptografia de disco confidencial, você tem duas opções: usar o Azure Key Vault ou o HSM (Módulo de Segurança de Hardware) gerenciado pelo Azure Key Vault. Com base em suas necessidades de segurança e conformidade, você pode escolher uma dessas opções. No entanto, é importante observar que o SKU padrão não tem suporte. O exemplo a seguir usa o Azure Key Vault Premium.
- Conceder a Entidade de Serviço da VM confidencial
Confidential VM Orchestrator
ao locatário. Para 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"
- Crie um Azure Key Vault usando o comando az keyvault create. Para o tipo de preço, selecione Premium (inclui suporte para chaves com o apoio de HSM). Verifique se você tem uma função de proprietário nesse cofre de chaves.
az keyvault create -n keyVaultName -g myResourceGroup --enabled-for-disk-encryption true --sku premium --enable-purge-protection true --enable-rbac-authorization false
- 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 keyVaultName --object-id $cvmAgent.Id --key-permissions get release
- Crie uma chave no cofre de chaves usando az keyvault key create. Para o tipo de chave, use RSA-HSM.
az keyvault key create --name mykey --vault-name keyVaultName --default-cvm-policy --exportable --kty RSA-HSM
- Crie o conjunto de criptografia de disco usando az disk-encryption-set create. Defina o tipo de criptografia como
ConfidentialVmEncryptedWithCustomerKey
.
$keyVaultKeyUrl=(az keyvault key show --vault-name keyVaultName --name mykey--query [key.kid] -o tsv)
az disk-encryption-set create --resource-group myResourceGroup --name diskEncryptionSetName --key-url $keyVaultKeyUrl --encryption-type ConfidentialVmEncryptedWithCustomerKey
- Conceda ao conjunto de criptografia de disco acesso ao cofre de chaves usando az key vault set-policy.
$desIdentity=(az disk-encryption-set show -n diskEncryptionSetName -g myResourceGroup --query [identity.principalId] -o tsv)
az keyvault set-policy -n keyVaultName -g myResourceGroup --object-id $desIdentity --key-permissions wrapkey unwrapkey get
- Use a ID do conjunto de criptografia de disco para criar a VM.
$diskEncryptionSetID=(az disk-encryption-set show -n diskEncryptionSetName -g myResourceGroup --query [id] -o tsv)
- Crie uma VM com o comando az vm create. Escolha
DiskWithVMGuestState
para opção de criptografia confidencial de disco do sistema operacional com uma chave gerenciada pelo cliente. Habilitar a inicialização segura é opcional, mas recomendada. Para obter mais informações, consulte inicialização segura e vTPM. Para obter mais informações sobre criptografia de disco, consulte criptografia de disco do sistema operacional confidencial.
az vm create \
--resource-group myResourceGroup \
--name myVM \
--size Standard_DC4as_v5 \
--admin-username <azure-user> \
--admin-password <azure-password> \
--enable-vtpm true \
--enable-secure-boot true \
--image "Canonical:0001-com-ubuntu-confidential-vm-focal:20_04-lts-cvm:latest" \
--public-ip-sku Standard \
--security-type ConfidentialVM \
--os-disk-security-encryption-type DiskWithVMGuestState \
--os-disk-secure-vm-disk-encryption-set $diskEncryptionSetID \
A criação da VM e dos recursos de suporte demora alguns minutos. O seguinte exemplo de saída mostra que a operação de criação de VM foi bem-sucedida.
{
"fqdns": "",
"id": "/subscriptions/<guid>/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachines/myVM",
"location": "eastus",
"macAddress": "<MAC-address>",
"powerState": "VM running",
"privateIpAddress": "10.20.255.255",
"publicIpAddress": "192.168.255.255",
"resourceGroup": "myResourceGroup",
"zones": ""
}
Anote o publicIpAddress
para usar posteriormente.
Conecte e ateste o CVM baseado em AMD por meio do Aplicativo de Amostra de Atestado do Microsoft Azure
Para usar o aplicativo de exemplo no C++ para usar nas APIs de atestado convidado, use as etapas a seguir. Este exemplo usa uma máquina virtual confidencial do Linux. Para Windows, consulte instruções de build para Windows.
Entre em sua VM confidencial usando seu endereço IP público.
Clonar o aplicativo de exemplo Linux.
Instale o pacote
build-essential
. Esse pacote instala tudo o que é necessário para compilar o aplicativo de exemplo.
sudo apt-get install build-essential
- Instalar os pacotes abaixo.
sudo apt-get install libcurl4-openssl-dev
sudo apt-get install libjsoncpp-dev
sudo apt-get install libboost-all-dev
sudo apt install nlohmann-json3-dev
Baixe o pacote de atestado.
Instale o pacote de atestado. Certifique-se de substituir
<version>
pela versão que você baixou.
sudo dpkg -i azguestattestation1_<latest-version>_amd64.deb
- Depois que os pacotes acima tiverem sido instalados, use as etapas abaixo para compilar e executar o aplicativo.
cd confidential-computing-cvm-guest-attestation/cvm-attestation-sample-app
sudo cmake . && make
sudo ./AttestationClient -o token
- Para converter o token Web em um JSON, use as etapas abaixo.
sudo ./AttestationClient -o token>> /attestation_output
JWT=$(cat /attestation_output)
echo -n $JWT | cut -d "." -f 1 | base64 -d 2>/dev/null | jq .
echo -n $JWT | cut -d "." -f 2 | base64 -d 2>/dev/null | jq .