Hızlı Başlangıç: Azure CLI ile gizli vm oluşturma

Şunlar için geçerlidir: ✔️ Linux VM'leri ✔️ Windows VM'leri

Bu hızlı başlangıçta, Azure'da gizli bir sanal makine (gizli VM) dağıtmak için Azure Command-Line Arabirimi'ni (Azure CLI) nasıl kullanacağınız gösterilmektedir. Azure CLI, komut satırı veya betikler aracılığıyla Azure kaynakları oluşturmak ve yönetmek için kullanılır.

Prerequisites

Azure aboneliğiniz yoksa başlamadan önce ücretsiz bir Azure hesabı oluşturun .

Azure Cloud Shell'i başlatma

Azure Cloud Shell, bu makaledeki adımları çalıştırmak için kullanabileceğiniz ücretsiz bir etkileşimli kabukdur. Sık kullanılan Azure araçları önceden yüklenmiş ve hesabınızla kullanılacak şekilde yapılandırılmıştır.

Cloud Shell'i açmak için, bir kod bloğunun sağ üst köşesindeki Deneyin seçeneğini seçin. Cloud Shell'i adresine giderek https://shell.azure.com/bashayrı bir tarayıcı sekmesinde de açabilirsiniz. Kod bloklarını kopyalamak için Kopyala'yı seçin, Cloud Shell'e yapıştırın ve çalıştırmak için Enter tuşuna basın.

CLI'yi yerel olarak yükleyip kullanmayı tercih ediyorsanız, bu hızlı başlangıç için Azure CLI 2.38.0 veya sonraki bir sürümü gerekir. Sürümü bulmak için az --version komutunu çalıştırın. Yüklemeniz veya yükseltmeniz gerekiyorsa bkz. Azure CLI'yı yükleme.

Bir kaynak grubu oluşturun

az group create komutuyla bir kaynak grubu oluşturun. Azure kaynak grubu, Azure kaynaklarının dağıtıldığı ve yönetildiği bir mantıksal kapsayıcıdır. Aşağıdaki örnek northeurope konumunda myResourceGroup adlı bir kaynak grubu oluşturur:

Note

Gizli VM'ler tüm konumlarda kullanılamaz. Şu anda desteklenen konumlar için bkz. Azure bölgesi tarafından hangi VM ürünlerinin kullanılabilir olduğu.

az group create --name myResourceGroup --location northeurope

Platform tarafından yönetilen anahtar kullanarak Gizli sanal makine oluşturma

az vm create komutuyla bir VM oluşturun .

Aşağıdaki örnek myVM adlı bir VM oluşturur ve azureuser adlı bir kullanıcı hesabı ekler. --generate-ssh-keys parametresi otomatik olarak bir SSH anahtarı oluşturmak ve bunu varsayılan anahtar konumuna (~/.ssh) yerleştirmek için kullanılır. Bunun yerine belirli bir anahtar kümesini kullanmak için seçeneğini kullanın --ssh-key-values . size için gizli bir VM boyutu seçin. Daha fazla bilgi için bkz. Desteklenen gizli VM aileleri.

İşletim sistemi diski için gizli şifreleme olmaması için VMGuestStateOnly seçin. İsterseniz, platform tarafından yönetilen bir anahtarla işletim sistemi diski gizli şifrelemesi de seçebilirsiniz DiskWithVMGuestState . Güvenli Önyükleme varsayılan olarak etkindir, ancak VMGuestStateOnly için isteğe bağlıdır. Daha fazla bilgi için bkz. güvenli önyükleme ve vTPM. Konakta disk şifreleme ve şifreleme hakkında daha fazla bilgi için bkz. Konakta gizli işletim sistemi disk şifrelemesi ve şifrelemesi.

az vm create \
  --resource-group myResourceGroup \
  --name myVM \
  --size Standard_DC4es_v6 \
  --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

VM’yi ve destekleyici kaynakları oluşturmak birkaç dakika sürer. Aşağıdaki örnek çıktıda VM oluşturma işleminin başarılı olduğu gösterilmektedir.

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

Daha sonra kullanmak üzere publicIpAddress öğesini not edin.

Müşteri Tarafından Yönetilen Anahtar kullanarak Gizli sanal makine oluşturma

Gizli bir disk şifreleme kümesi oluşturmak için iki seçeneğiniz vardır: Azure Key Vault veya Azure Key Vaultyönetilen Donanım Güvenlik Modülü(HSM) kullanma. Güvenlik ve uyumluluk gereksinimlerinize bağlı olarak iki seçeneği de seçebilirsiniz. Ancak, standart SKU'nun desteklenmediğini unutmayın. Aşağıdaki örnekte Azure Key Vault Premium kullanılır.

  1. Kiracıya gizli VM Hizmet Sorumlusu Confidential VM Orchestrator verin. Bu adım için Genel Yönetici olmanız veya Kullanıcı Erişimi Yöneticisi RBAC rolüne sahip olmanız gerekir. Aşağıdaki komutları yürütmek için Microsoft Graph SDK'sını yükleyin.
Connect-Graph -Tenant "your tenant ID" Application.ReadWrite.All
New-MgServicePrincipal -AppId bf7b6499-ff71-4aa2-97a4-f372087be7f0 -DisplayName "Confidential VM Orchestrator"
  1. az keyvault create komutunu kullanarak bir Azure Key Vault oluşturun. Fiyatlandırma katmanı için Premium (HSM destekli anahtarlar için destek içerir) seçeneğini belirleyin. Bu anahtar kasasında sahip rolünüz olduğundan emin olun.
az keyvault create -n keyVaultName -g myResourceGroup --enabled-for-disk-encryption true --sku premium --enable-purge-protection true --enable-rbac-authorization false
  1. Confidential VM Orchestrator için get ve release izinlerini verin.
$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. az keyvault key create komutunu kullanarak anahtar kasasında bir anahtar oluşturun. Anahtar türü için RSA-HSM kullanın.
az keyvault key create --name mykey --vault-name keyVaultName --default-cvm-policy --exportable --kty RSA-HSM

Note

Yeni dağıtımların yapıldığı bölgelerde, --default-cvm-policy bayrağı kullanıldığında MAA (Microsoft Azure Doğrulama) uç noktaları erişilebilir olmayabilir. Geçici bir çözüm olarak, bölgesel MAA uç noktası URL'sini almak için aşağıdaki PowerShell betiğini kullanabilirsiniz:

$sub = "<subscription-id>"
az account set --subscription $sub
$token = Get-AzAccessToken
$region = "<region-name>"
$url = "https://management.azure.com/subscriptions/$sub/providers/Microsoft.Attestation/Locations/$region/defaultProvider?api-version=2021-06-01"
$r = Invoke-WebRequest -Uri $url -Method Get -Headers @{'Authorization' = 'Bearer ' + $token.Token}
$d = $r.content | ConvertFrom-Json
$d.properties.attestUri

<subscription-id> ifadesini Azure abonelik kimliğiniz ile, <region-name> ifadesini de hedef dağıtım bölgesi ile değiştirin.

  1. az disk-encryption-set create komutunu kullanarak disk şifreleme kümesini oluşturun. Şifreleme türünü olarak ConfidentialVmEncryptedWithCustomerKeyayarlayın.
$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. az key vault set-policy kullanarak anahtar kasasına disk şifreleme kümesi kaynak erişimi verin.
$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. VM'yi oluşturmak için disk şifreleme kümesi kimliğini kullanın.
$diskEncryptionSetID=(az disk-encryption-set show -n diskEncryptionSetName -g myResourceGroup --query [id] -o tsv)
  1. az vm create komutuyla bir VM oluşturun . Müşteri tarafından yönetilen anahtarla işletim sistemi diski gizli şifrelemesi için seçin DiskWithVMGuestState . Güvenli önyüklemenin etkinleştirilmesi isteğe bağlıdır ancak önerilir. Daha fazla bilgi için bkz. güvenli önyükleme ve vTPM. Disk şifrelemesi hakkında daha fazla bilgi için bkz. gizli işletim sistemi disk şifrelemesi.
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 \

VM’yi ve destekleyici kaynakları oluşturmak birkaç dakika sürer. Aşağıdaki örnek çıktıda VM oluşturma işleminin başarılı olduğu gösterilmektedir.

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

Daha sonra kullanmak üzere publicIpAddress öğesini not edin.

Microsoft Azure Kanıtlama Örnek Uygulaması aracılığıyla AMD tabanlı CVM'ye bağlanma ve doğrulama

Konuk kanıtlama API'leriyle kullanmak üzere C++ dilinde örnek bir uygulama kullanmak için aşağıdaki adımları kullanın. Bu örnekte Linux gizli sanal makinesi kullanılmaktadır. Windows için bkz. Windows için derleme yönergeleri.

  1. Genel IP adresini kullanarak gizli VM'nizde oturum açın.

  2. Örnek Linux uygulamasını kopyalayın.

  3. build-essential paketini yükleyin. Bu paket, örnek uygulamayı derlemek için gereken her şeyi yükler.

sudo apt-get install build-essential
  1. Aşağıdaki paketleri yükleyin.
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. Kanıtlama paketini indirin.

  2. Kanıtlama paketini yükleyin. İndirdiğiniz sürümle <version>'ün değiştirildiğinden emin olun.

sudo dpkg -i azguestattestation1_<latest-version>_amd64.deb
  1. Yukarıdaki paketler yüklendikten sonra uygulamayı derlemek ve çalıştırmak için aşağıdaki adımları kullanın.
cd confidential-computing-cvm-guest-attestation/cvm-attestation-sample-app
sudo cmake . && make
sudo ./AttestationClient -o token
  1. Web belirtecini JSON'a dönüştürmek için aşağıdaki adımları kullanın.
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 .

Sonraki Adımlar