Szybki start: tworzenie poufnej maszyny wirtualnej przy użyciu interfejsu wiersza polecenia platformy Azure

Dotyczy: ✔️ Maszyny wirtualne z systemem Linux maszyny wirtualne z ✔️ systemem Windows

W tym przewodniku Szybki start pokazano, jak za pomocą interfejsu wiersza polecenia platformy Azure (interfejs wiersza polecenia platformy Azure) wdrożyć poufne maszyny wirtualne (poufne maszyny wirtualne) na platformie Azure. Interfejs wiersza polecenia platformy Azure służy do tworzenia zasobów platformy Azure i zarządzania nimi za pośrednictwem wiersza polecenia lub skryptów.

Wymagania wstępne

Jeśli nie masz subskrypcji platformy Azure, przed rozpoczęciem utwórz bezpłatne konto platformy Azure.

Uruchamianie usługi Azure Cloud Shell

Usługa Azure Cloud Shell to bezpłatna interaktywna powłoka, której można użyć do wykonania kroków opisanych w tym artykule. Udostępnia ona wstępnie zainstalowane i najczęściej używane narzędzia platformy Azure, które są skonfigurowane do użycia na koncie.

Aby otworzyć usługę Cloud Shell, wybierz pozycję Wypróbuj w prawym górnym rogu bloku kodu. Możesz również otworzyć usługę Cloud Shell na osobnej karcie przeglądarki, przechodząc do .https://shell.azure.com/bash Wybierz pozycję Kopiuj , aby skopiować bloki kodu, wklej go w usłudze Cloud Shell, a następnie wybierz klawisz Enter , aby go uruchomić.

Jeśli wolisz zainstalować interfejs wiersza polecenia i korzystać z niego lokalnie, ten przewodnik Szybki start wymaga interfejsu wiersza polecenia platformy Azure w wersji 2.38.0 lub nowszej. Uruchom polecenie az--version, aby dowiedzieć się, jaka wersja jest używana. Jeśli konieczna będzie instalacja lub uaktualnienie, zobacz Instalowanie interfejsu wiersza polecenia platformy Azure.

Tworzenie grupy zasobów

Utwórz grupę zasobów za pomocą polecenia az group create. Grupa zasobów platformy Azure to logiczny kontener przeznaczony do wdrażania zasobów platformy Azure i zarządzania nimi. Poniższy przykład tworzy grupę zasobów o nazwie myResourceGroup w lokalizacji northeurope :

Uwaga

Poufne maszyny wirtualne nie są dostępne we wszystkich lokalizacjach. W przypadku aktualnie obsługiwanych lokalizacji zobacz, które produkty maszyn wirtualnych są dostępne w regionie świadczenia usługi Azure.

az group create --name myResourceGroup --location northeurope

Tworzenie poufnej maszyny wirtualnej przy użyciu klucza zarządzanego przez platformę

Utwórz maszynę wirtualną za pomocą polecenia az vm create.

W poniższym przykładzie zostanie utworzona maszyna wirtualna o nazwie myVM i dodane konto użytkownika o nazwie azureuser. Parametr --generate-ssh-keys służy do automatycznego generowania klucza SSH i umieszczania go w domyślnej lokalizacji klucza (~/.ssh). Aby zamiast niego użyć określonego zestawu kluczy, skorzystaj z opcji --ssh-key-values. W polu sizewybierz poufny rozmiar maszyny wirtualnej. Aby uzyskać więcej informacji, zobacz obsługiwane poufne rodziny maszyn wirtualnych.

Wybierz VMGuestStateOnly opcję braku poufnego szyfrowania dysku systemu operacyjnego. Możesz też wybrać DiskWithVMGuestState opcję poufnego szyfrowania dysku systemu operacyjnego przy użyciu klucza zarządzanego przez platformę. Bezpieczny rozruch jest domyślnie włączony, ale jest opcjonalny dla programu VMGuestStateOnly. Aby uzyskać więcej informacji, zobacz bezpieczny rozruch i protokół vTPM. Aby uzyskać więcej informacji na temat szyfrowania dysków i szyfrowania na hoście, zobacz poufne szyfrowanie dysków systemu operacyjnego i szyfrowanie na hoście.

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 \
  --encryption-at-host \

Utworzenie maszyny wirtualnej i zasobów pomocniczych potrwa kilka minut. Następujące przykładowe dane wyjściowe pokazują, że operacja utworzenia maszyny wirtualnej zakończyła się pomyślnie.

{
  "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": ""
}

Zanotuj wartość , publicIpAddress która ma być używana później.

Tworzenie poufnej maszyny wirtualnej przy użyciu klucza zarządzanego przez klienta

Aby utworzyć zestaw szyfrowania dysków poufnych, dostępne są dwie opcje: Korzystanie z usługi Azure Key Vault lub zarządzanego sprzętowego modułu zabezpieczeń (HSM) usługi Azure Key Vault. Na podstawie wymagań dotyczących zabezpieczeń i zgodności można wybrać jedną z opcji. Należy jednak pamiętać, że standardowa jednostka SKU nie jest obsługiwana. W poniższym przykładzie użyto usługi Azure Key Vault Premium.

  1. Udziel poufnej jednostki Confidential VM Orchestrator usługi maszyny wirtualnej dzierżawie. W tym kroku musisz być Administracja globalnym lub musisz mieć rolę RBAC Administracja istratora dostępu użytkowników. Zainstaluj zestaw Microsoft Graph SDK , aby wykonać poniższe polecenia.
Connect-Graph -Tenant "your tenant ID" Application.ReadWrite.All
New-MgServicePrincipal -AppId bf7b6499-ff71-4aa2-97a4-f372087be7f0 -DisplayName "Confidential VM Orchestrator"
  1. Utwórz usługę Azure Key Vault przy użyciu polecenia az keyvault create . W przypadku warstwy cenowej wybierz pozycję Premium (obejmuje obsługę kluczy wspieranych przez moduł HSM). Upewnij się, że masz rolę właściciela w tym magazynie kluczy.
az keyvault create -n keyVaultName -g myResourceGroup --enabled-for-disk-encryption true --sku premium --enable-purge-protection true
  1. Nadaj Confidential VM Orchestrator uprawnienia i getrelease magazynowi kluczy.
$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
  1. Utwórz klucz w magazynie kluczy przy użyciu polecenia az keyvault key create. W przypadku typu klucza użyj modułu RSA-HSM.
az keyvault key create --name mykey --vault-name keyVaultName --default-cvm-policy --exportable --kty RSA-HSM
  1. Utwórz zestaw szyfrowania dysków przy użyciu polecenia az disk-encryption-set create. Ustaw typ szyfrowania na 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
  1. Udziel dostęp do zasobu zestawu szyfrowania dysków do magazynu kluczy przy użyciu polecenia 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
  1. Użyj identyfikatora zestawu szyfrowania dysków, aby utworzyć maszynę wirtualną.
$diskEncryptionSetID=(az disk-encryption-set show -n diskEncryptionSetName -g myResourceGroup --query [id] -o tsv)
  1. Utwórz maszynę wirtualną za pomocą polecenia az vm create. Wybierz DiskWithVMGuestState opcję poufnego szyfrowania dysku systemu operacyjnego przy użyciu klucza zarządzanego przez klienta. Włączanie bezpiecznego rozruchu jest opcjonalne, ale zalecane. Aby uzyskać więcej informacji, zobacz bezpieczny rozruch i protokół vTPM. Aby uzyskać więcej informacji na temat szyfrowania dysków, zobacz poufne szyfrowanie dysków systemu operacyjnego.
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 \

Utworzenie maszyny wirtualnej i zasobów pomocniczych potrwa kilka minut. Następujące przykładowe dane wyjściowe pokazują, że operacja utworzenia maszyny wirtualnej zakończyła się pomyślnie.

{
  "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": ""
}

Zanotuj wartość , publicIpAddress która ma być używana później.

Połączenie i potwierdzanie cvm opartego na amd za pośrednictwem przykładowej aplikacji zaświadczania platformy Microsoft Azure

Aby użyć przykładowej aplikacji w języku C++ do użycia z interfejsami API zaświadczania gościa, wykonaj następujące kroki. W tym przykładzie użyto poufnej maszyny wirtualnej z systemem Linux. W przypadku systemu Windows zobacz instrukcje dotyczące kompilacji dla systemu Windows.

  1. Zaloguj się do poufnej maszyny wirtualnej przy użyciu jego publicznego adresu IP.

  2. Sklonuj przykładową aplikację systemu Linux.

  3. Zainstaluj pakiet build-essential. Ten pakiet instaluje wszystko, co jest wymagane do kompilowania przykładowej aplikacji.

sudo apt-get install build-essential
  1. Zainstaluj poniższe pakiety.
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
  1. Pobierz pakiet zaświadczania.

  2. Zainstaluj pakiet zaświadczania. Pamiętaj, aby zastąpić <version> pobraną wersję.

sudo dpkg -i azguestattestation1_<latest-version>_amd64.deb
  1. Po zainstalowaniu powyższych pakietów wykonaj poniższe kroki, aby skompilować i uruchomić aplikację.
cd confidential-computing-cvm-guest-attestation/cvm-attestation-sample-app
sudo cmake . && make
sudo ./AttestationClient -o token
  1. Aby przekonwertować token internetowy na kod JSON, wykonaj poniższe kroki.
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 .

Następne kroki