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. Confidential VM'ler, VM bellek şifrelemesi ve yalıtımı sağlamak için hem AMD SEV-SNP tarafından desteklenen AMD işlemcilerde hem de Intel TDX tarafından desteklenen 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. <subscription-id> öğesini abonelik tanımlayıcınızla değiştirin. Ö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ölgesine göre hangi VM ürünlerinin kullanılabildiği.

    $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ı ve şablon dosyası içeren bir ARM şablonu kullanarak VM'nizi Azure'a dağıtın.

    az deployment group create `
     -g $resourceGroup `
     -n $deployName `
     -u "<json-template-file-path>" `
     -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 için gizli şifreleme olmaması adına VMGuestStateOnly seçin. İ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 Microsoft.Compute/virtualMachines altında en düşük "apiVersion" olarak "2023-09-01" kullanın.

  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. <subscription-id> öğesini abonelik tanımlayıcınızla değiştirin. Önkoşulları karşılayan bir abonelik kullandığınızdan emin olun.

    az account set --subscription <subscription-id>
    
  3. Kiracıya gizli VM Hizmet Sorumlusunu 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"
    
  4. Azure Key Vault'unuzu 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'ya sahip bir anahtar kasası 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üne sahip olduğunuzdan emin olun.

    4. Confidential VM Orchestrator ve get anahtar kasasına release için izin verin.

      $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 Key Vault kullanmak istemiyorsanız bunun yerine Azure Key Vault Yönetilen HSM oluşturabilirsiniz.

    1. Azure Key Vault Yönetilen HSM’yi oluşturmak için hızlı başlangıç kılavuzunu izleyerek Azure Key Vault Yönetilen HSM’yi oluşturun ve etkinleştirin.

    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. Confidential VM Orchestrator öğesine yönetilen HSM için izinler verin.

      $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. az keyvault key create ile yeni anahtar oluşturma

      $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
      

      Not

      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.

    2. 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
      
    3. 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
      
    4. 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. az keyvault key create ile yeni anahtar oluşturma

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

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

      $desName = <name of DES>
      az disk-encryption-set create -n $desName `
       -g $resourceGroup `
       --key-url $encryptionKeyURL
      
    4. 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 Intel TDX için bir gizli 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ın.

Sonraki adımlar