Szybki start: wdrażanie poufnej maszyny wirtualnej przy użyciu szablonu ARM

Możesz użyć szablonu usługi Azure Resource Manager (szablonu ARM), aby szybko utworzyć platformy Azure poufną maszynę wirtualną. Poufne maszyny wirtualne działają zarówno na procesorach AMD obsługiwanych przez AMD SEV-SNP, jak i na procesorach Intel obsługiwanych przez Intel TDX, aby zapewnić szyfrowanie i izolację pamięci maszyn wirtualnych. Aby uzyskać więcej informacji, zobacz artykuł Omówienie poufnej maszyny wirtualnej.

W tym samouczku omówiono wdrażanie poufnej maszyny wirtualnej z konfiguracją niestandardową.

Wymagania wstępne

Wdrażanie poufnego szablonu maszyny wirtualnej przy użyciu interfejsu wiersza polecenia platformy Azure

Można wdrożyć poufny szablon maszyny wirtualnej z opcjonalnym szyfrowaniem poufnym dysku systemu operacyjnego za pomocą klucza zarządzanego przez platformę.

Aby utworzyć i wdrożyć poufną maszynę wirtualną przy użyciu szablonu ARM za pomocą interfejsu wiersza polecenia platformy Azure (Azure CLI):

  1. Zaloguj się do konta Azure w narzędziu Azure CLI.

    az login
    
  2. Ustaw subskrypcję platformy Azure. Zastąp <subscription-id> identyfikatorem subskrypcji. Upewnij się, że używasz subskrypcji spełniającej wymagania wstępne.

    az account set --subscription <subscription-id>
    
  3. Ustaw zmienne dla poufnej maszyny wirtualnej. Podaj nazwę wdrożenia (), grupę zasobów ($deployName$resourceGroup), nazwę maszyny wirtualnej ($vmName) i region platformy Azure ($region). Zastąp przykładowe wartości własnymi informacjami.

    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.

    $deployName="<deployment-name>"
    $resourceGroup="<resource-group-name>"
    $vmName= "<confidential-vm-name>"
    $region="<region-name>"
    

    Jeśli określona grupa zasobów nie istnieje, utwórz grupę zasobów o tej nazwie.

    az group create -n $resourceGroup -l $region
    
  4. Wdróż maszynę wirtualną w Azure przy użyciu szablonu ARM z niestandardowym plikiem parametrów i plikiem szablonu.

    az deployment group create `
     -g $resourceGroup `
     -n $deployName `
     -u "<json-template-file-path>" `
     -p "<json-parameter-file-path>" `
     -p vmLocation=$region `
        vmName=$vmName
    

Definiowanie niestandardowego pliku parametrów

Podczas tworzenia maszyny wirtualnej poufnej za pomocą interfejsu wiersza polecenia platformy Azure (Azure CLI) należy zdefiniować niestandardowy plik parametrów. Aby utworzyć niestandardowy plik parametrów JSON:

  1. Zaloguj się do konta platformy Azure za pomocą interfejsu wiersza polecenia platformy Azure.

  2. Utwórz plik parametrów JSON. Na przykład azuredeploy.parameters.json.

  3. W zależności od używanego obrazu systemu operacyjnego skopiuj przykładowy plik parametrów systemu Windows lub przykładowy plik parametrów systemu Linux do pliku parametrów.

  4. Edytuj kod JSON w pliku parametrów zgodnie z potrzebami. Na przykład zaktualizuj nazwę obrazu systemu operacyjnego (osImageName) lub nazwę użytkownika administratora (adminUsername).

  5. Skonfiguruj ustawienie typu zabezpieczeń (securityType). 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ę. Tylko w przypadku jednostek SKU Intel TDX oraz obrazów opartych na systemie Linux klienci mogą wybrać typ zabezpieczenia NonPersistedTPM, aby wdrożyć efemeryczny moduł vTPM. W przypadku typu zabezpieczeń NonPersistedTPM użyj co najmniej wartości "apiVersion": "2023-09-01" pod elementem Microsoft.Compute/virtualMachines w pliku szablonu.

  6. Zapisz plik parametrów.

Przykładowy plik parametrów systemu Windows

Użyj tego przykładu, aby utworzyć niestandardowy plik parametrów dla poufnej maszyny wirtualnej z systemem 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>"
    }
  }
}

Przykładowy plik parametrów systemu Linux

Użyj tego przykładu, aby utworzyć niestandardowy plik parametrów dla poufnej maszyny wirtualnej opartej na systemie 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>
    }
  }
}

Uwaga

Zastąp odpowiednio wartość osImageName.

Wdrażanie poufnego szablonu maszyny wirtualnej przy użyciu poufnego szyfrowania dysku systemu operacyjnego za pomocą klucza zarządzanego przez klienta

  1. Zaloguj się do konta platformy Azure za pomocą interfejsu wiersza polecenia platformy Azure.

    az login
    
  2. Ustaw subskrypcję platformy Azure. Zastąp <subscription-id> identyfikatorem subskrypcji. Upewnij się, że używasz subskrypcji spełniającej wymagania wstępne.

    az account set --subscription <subscription-id>
    
  3. Przyznaj poufną nazwę główną usługi VM Confidential VM Orchestrator dzierżawcy

    W tym kroku musisz być administratorem globalnym lub musisz mieć rolę RBAC administratora 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"
    
  4. Konfigurowanie usługi Azure Key Vault. Aby zamiast tego użyć zarządzanego modułu HSM usługi Azure Key Vault, zobacz następny krok.

    1. Utwórz grupę zasobów dla magazynu kluczy. Wystąpienie usługi Key Vault i poufna maszyna wirtualna muszą znajdować się w tym samym regionie platformy Azure.

      $resourceGroup = <key vault resource group>
      $region = <Azure region>
      az group create --name $resourceGroup --location $region
      
    2. Utwórz magazyn kluczy z jednostką SKU Premium i wybierz preferowany region. Standardowa jednostka SKU nie jest obsługiwana.

      $KeyVault = <name of key vault>
      az keyvault create --name $KeyVault --resource-group $resourceGroup --location $region --sku Premium --enable-purge-protection
      
    3. Upewnij się, że masz przypisaną rolę właściciela w tym magazynie kluczy.

    4. Nadaj uprawnienia Confidential VM Orchestrator elementom get i release magazynu kluczy.

      $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
      
  5. (Opcjonalnie) Jeśli nie chcesz używać usługi Azure Key Vault, zamiast tego możesz utworzyć zarządzany moduł HSM usługi Azure Key Vault.

    1. Skorzystaj z przewodnika Szybki start, aby utworzyć zarządzany moduł HSM usługi Azure Key Vault w celu wdrożenia i aktywowania zarządzanego modułu HSM usługi Azure Key Vault.

    2. Włącz ochronę przed przeczyszczaniem w zarządzanym module HSM platformy Azure. Ten krok jest wymagany do włączenia wydania klucza.

      az keyvault update-hsm --subscription $subscriptionId -g $resourceGroup --hsm-name $hsm --enable-purge-protection true
      
    3. Nadaj Confidential VM Orchestrator uprawnienia zarządzanemu modułowi HSM.

      $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
      
  6. Utwórz nowy klucz przy użyciu usługi Azure Key Vault. Aby zamiast tego użyć zarządzanego modułu HSM platformy Azure, zobacz następny krok.

    1. Utwórz nowy klucz za pomocą polecenia az keyvault key create

      $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 --default-cvm-policy
      
    2. Uzyskaj informacje o utworzonym kluczu.

      $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
      
    3. Wdróż zestaw szyfrowania dysków (DES) przy użyciu szablonu ARM 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
      
    4. Przypisz dostęp do klucza do pliku 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
      
  7. (Opcjonalnie) Utwórz nowy klucz na podstawie zarządzanego modułu HSM platformy Azure.

    1. Utwórz nowy klucz za pomocą polecenia az keyvault key create

      $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 --default-cvm-policy
      
    2. Uzyskaj informacje o utworzonym kluczu.

      $encryptionKeyURL = ((az keyvault key show --hsm-name $hsm --name $KeyName) | ConvertFrom-Json).key.kid
      
    3. Wdróż system DES.

      $desName = <name of DES>
      az disk-encryption-set create -n $desName `
       -g $resourceGroup `
       --key-url $encryptionKeyURL
      
    4. Przypisz dostęp do klucza do 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
      
  8. Wdróż poufną maszynę wirtualną za pomocą klucza zarządzanego przez klienta.

    1. Pobierz identyfikator zasobu DES.

      $desID = (az disk-encryption-set show -n $desName -g $resourceGroup --query [id] -o tsv)
      
    2. Wdróż poufną maszynę wirtualną przy użyciu poufnego szablonu ARM maszyny wirtualnej dla technologii Intel TDX oraz pliku parametrów wdrożenia (na przykład azuredeploy.parameters.win2022.json) z kluczem zarządzanym przez klienta.

      $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
      
  9. Połącz się z zaufaną maszyną wirtualną, aby upewnić się, że tworzenie zakończyło się pomyślnie.

Następne kroki