Hızlı Başlangıç: ARM şablonuyla gizli VM dağıtma

Azure gizli VM'sini hızla oluşturmak için Azure Resource Manager şablonu (ARM şablonu) kullanabilirsiniz. Gizli VM'ler, VM bellek şifrelemesi ve yalıtımı elde etmek için HEM AMD SEV-SNP tarafından yedeklenen AMD işlemcilerde hem de Intel TDX tarafından yedeklenen Intel işlemcilerde çalışır. Daha fazla bilgi için bkz . Gizli VM'ye Genel Bakış.

Bu öğretici, özel bir yapılandırmayla gizli bir VM'nin dağıtımını kapsar.

Önkoşullar

Azure CLI ile gizli VM şablonu dağıtma

platform tarafından yönetilen bir anahtar aracılığıyla isteğe bağlı işletim sistemi diski gizli şifrelemesi olan gizli bir VM şablonu dağıtabilirsiniz.

Azure CLI aracılığıyla arm şablonu kullanarak gizli VM'nizi oluşturmak ve dağıtmak için:

  1. Azure CLI'da Azure hesabınızda oturum açın.

    az login
    
  2. Azure aboneliğinizi ayarlayın. değerini abonelik tanımlayıcınızla değiştirin <subscription-id> . Önkoşulları karşılayan bir abonelik kullandığınızdan emin olun.

    az account set --subscription <subscription-id>
    
  3. Gizli VM'nizin değişkenlerini ayarlayın. Dağıtım adını ($deployName ), kaynak grubunu ($resourceGroup ), VM adını ($vmName ) ve Azure bölgesini ($region belirtin. Örnek değerleri kendi bilgilerinizle değiştirin.

    Not

    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.

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

    Belirttiğiniz kaynak grubu yoksa, bu ada sahip bir kaynak grubu oluşturun.

    az group create -n $resourceGroup -l $region
    
  4. Özel parametre dosyası içeren bir ARM şablonu kullanarak VM'nizi Azure'a dağıtın. TDX dağıtımları için örnek bir şablon aşağıda verilmiştir: https://aka.ms/TDXtemplate.

    az deployment group create `
     -g $resourceGroup `
     -n $deployName `
     -u "https://aka.ms/CVMTemplate" `
     -p "<json-parameter-file-path>" `
     -p vmLocation=$region `
        vmName=$vmName
    

Özel parametre dosyası tanımlama

Azure Komut Satırı Arabirimi (Azure CLI) aracılığıyla gizli bir VM oluşturduğunuzda, özel bir parametre dosyası tanımlamanız gerekir. Özel bir JSON parametre dosyası oluşturmak için:

  1. Azure CLI aracılığıyla Azure hesabınızda oturum açın.

  2. Bir JSON parametre dosyası oluşturun. Örneğin, azuredeploy.parameters.json.

  3. Kullandığınız işletim sistemi görüntüsüne bağlı olarak, örnek Windows parametre dosyasını veya örnek Linux parametre dosyasını parametre dosyanıza kopyalayın.

  4. Parametre dosyasındaki JSON kodunu gerektiği gibi düzenleyin. Örneğin, işletim sistemi görüntü adını (osImageName) veya yönetici kullanıcı adını (adminUsername) güncelleştirin.

  5. Güvenlik türü ayarınızı (securityType) yapılandırın. İşletim sistemi diski gizli şifrelemesi olmamasını seçin VMGuestStateOnly . İsterseniz, platform tarafından yönetilen bir anahtarla işletim sistemi diski gizli şifrelemesi de seçebilirsiniz DiskWithVMGuestState . Yalnızca Intel TDX SKU'ları ve Linux tabanlı görüntüler için müşteriler kısa ömürlü vTPM ile dağıtılacak güvenlik türünü seçebilir NonPersistedTPM . NonPersistedTPM Güvenlik türü için şablon dosyasında altında en az "apiVersion" kullanın: "2023-09-01"Microsoft.Compute/virtualMachines.

  6. Parametre dosyanızı kaydedin.

Örnek Windows parametre dosyası

Windows tabanlı gizli vm için özel parametre dosyası oluşturmak için bu örneği kullanın.

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

Örnek Linux parametre dosyası

Linux tabanlı gizli vm için özel parametre dosyası oluşturmak için bu örneği kullanın.

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

Not

osImageName değerini uygun şekilde değiştirin.

Müşteri tarafından yönetilen anahtar aracılığıyla işletim sistemi diski gizli şifrelemesi ile gizli VM şablonu dağıtma

  1. Azure CLI aracılığıyla Azure hesabınızda oturum açın.

    az login
    
  2. Azure aboneliğinizi ayarlayın. değerini abonelik tanımlayıcınızla değiştirin <subscription-id> . Önkoşulları karşılayan bir abonelik kullandığınızdan emin olun.

    az account set --subscription <subscription-id>
    
  3. Kiracıya gizli VM Hizmet Sorumlusu Confidential VM Orchestrator verme

    Bu adım için Genel Yönetici olmanız veya Kullanıcı Erişimi Yönetici istrator 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"
    
  4. Azure anahtar kasanızı ayarlayın. Bunun yerine Azure Key Vault Yönetilen HSM'sini kullanma hakkında bilgi için sonraki adıma bakın.

    1. Anahtar kasanız için bir kaynak grubu oluşturun. Anahtar kasası örneğiniz ve gizli VM'niz aynı Azure bölgesinde olmalıdır.

      $resourceGroup = <key vault resource group>
      $region = <Azure region>
      az group create --name $resourceGroup --location $region
      
    2. Premium SKU ile bir anahtar kasası örneği oluşturun ve tercih ettiğiniz bölgeyi seçin. Standart SKU desteklenmez.

      $KeyVault = <name of key vault>
      az keyvault create --name $KeyVault --resource-group $resourceGroup --location $region --sku Premium --enable-purge-protection
      
    3. Bu anahtar kasasında sahip rolünüz olduğundan emin olun.

    4. ve release anahtar kasasına get izin verinConfidential VM Orchestrator.

      $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. (İsteğe bağlı) Azure anahtar kasası kullanmak istemiyorsanız bunun yerine Azure Key Vault Yönetilen HSM oluşturabilirsiniz.

    1. Azure Key Vault Yönetilen HSM'yi sağlamak ve etkinleştirmek için Azure Key Vault Yönetilen HSM oluşturmak için hızlı başlangıcı izleyin.

    2. Azure Yönetilen HSM'de temizleme korumasını etkinleştirin. Bu adım, anahtar yayınını etkinleştirmek için gereklidir.

      az keyvault update-hsm --subscription $subscriptionId -g $resourceGroup --hsm-name $hsm --enable-purge-protection true
      
    3. Yönetilen HSM'ye izin verin Confidential VM Orchestrator .

      $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. Azure Key Vault'u kullanarak yeni bir anahtar oluşturun. Bunun yerine Azure Yönetilen HSM'yi kullanma hakkında bilgi için sonraki adıma bakın.

    1. Ana sürüm ilkesini hazırlayın ve yerel diskinize indirin.

    2. Yeni bir anahtar oluşturun.

      $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"
      
    3. Oluşturduğunuz anahtar hakkında bilgi edinin.

      $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
      
    4. DES ARM şablonu () kullanarak Disk Şifreleme Kümesi (deployDES.jsonDES) dağıtma.

      $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
      
    5. DES dosyasına anahtar erişimi atayın.

      $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. (İsteğe bağlı) Azure Yönetilen HSM'den yeni bir anahtar oluşturun.

    1. Ana sürüm ilkesini hazırlayın ve yerel diskinize indirin.

    2. Yeni anahtarı oluşturun.

      $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"
      
    3. Oluşturduğunuz anahtar hakkında bilgi edinin.

      $encryptionKeyURL = ((az keyvault key show --hsm-name $hsm --name $KeyName) | ConvertFrom-Json).key.kid
      
    4. DES dağıtma.

      $desName = <name of DES>
      az disk-encryption-set create -n $desName `
       -g $resourceGroup `
       --key-url $encryptionKeyURL
      
    5. DES'e anahtar erişimi atayın.

      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. Gizli VM'nizi müşteri tarafından yönetilen anahtarla dağıtın.

    1. DES için kaynak kimliğini alın.

      $desID = (az disk-encryption-set show -n $desName -g $resourceGroup --query [id] -o tsv)
      
    2. GIZLI VM'nizi AMD SEV-SNP veya Intel TDX için gizli bir VM ARM şablonu ve müşteri tarafından yönetilen anahtarla bir dağıtım parametresi dosyası (örneğin, azuredeploy.parameters.win2022.json) kullanarak dağıtın.

      $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. Oluşturma işleminin başarılı olduğundan emin olmak için gizli VM'nize Bağlan.

Sonraki adımlar