다음을 통해 공유


빠른 시작: ARM 템플릿을 사용하여 기밀 VM 배포

ARM 템플릿(Azure Resource Manager 템플릿)을 사용하여 Azure 기밀 VM을 빠르게 만들 수 있습니다. 기밀 VM은 AMD SEV-SNP가 지원하는 AMD 프로세서와 Intel TDX에서 지원하는 Intel 프로세서 모두에서 실행되어 VM 메모리 암호화 및 격리를 달성합니다. 자세한 내용은 기밀 VM 개요를 참조하세요.

이 자습서에서는 사용자 지정 구성을 사용하여 기밀 VM을 배포하는 방법을 설명합니다.

필수 구성 요소

Azure CLI를 사용하여 기밀 VM 템플릿 배포

플랫폼 관리형 키를 통해 선택적 OS 디스크 기밀 암호화가 있는 기밀 VM 템플릿을 배포할 수 있습니다.

Azure CLI를 통해 ARM 템플릿을 사용하여 기밀 VM을 만들고 배포하려면 다음을 수행합니다.

  1. Azure CLI에서 Azure 계정에 로그인합니다.

    az login
    
  2. Azure 구독을 설정합니다. <subscription-id>를 사용자의 구독 식별자로 바꿉니다. 사전 요구 사항을 충족하는 구독을 사용해야 합니다.

    az account set --subscription <subscription-id>
    
  3. 기밀 VM에 대한 변수를 설정합니다. 배포 이름($deployName), 리소스 그룹($resourceGroup), VM 이름($vmName) 및 Azure 지역($region)을 입력합니다. 샘플 값을 사용자 고유의 정보로 바꿉니다.

    참고 항목

    일부 위치에서는 기밀 VM을 사용할 수 없습니다. 현재 지원되는 위치는 Azure 지역별 사용 가능한 VM 제품을 참조하세요.

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

    지정한 리소스 그룹이 없으면 해당 이름으로 리소스 그룹을 만듭니다.

    az group create -n $resourceGroup -l $region
    
  4. 사용자 지정 매개 변수 파일이 있는 ARM 템플릿을 사용하여 Azure에 VM을 배포합니다. TDX 배포의 경우 예제 템플릿은 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
    

사용자 지정 매개 변수 파일 정의

Azure CLI(Azure 명령줄 인터페이스)를 통해 기밀 VM을 만들 때 사용자 지정 매개 변수 파일을 정의해야 합니다. 사용자 지정 JSON 매개 변수 파일을 만들려면 다음을 수행합니다.

  1. Azure CLI를 통해 Azure 계정에 로그인합니다.

  2. JSON 매개 변수 파일을 만듭니다. 예: azuredeploy.parameters.json.

  3. 사용 중인 OS 이미지에 따라 Windows 매개 변수 파일 예 또는 Linux 매개 변수 파일 예를 매개 변수 파일에 복사합니다.

  4. 필요에 따라 매개 변수 파일에서 JSON 코드를 편집합니다. 예를 들어, OS 이미지 이름(osImageName) 또는 관리자 사용자 이름(adminUsername)을 업데이트합니다.

  5. 보안 형식 설정을 구성합니다(securityType). OS 디스크 기밀 암호화를 사용하지 않으려면 VMGuestStateOnly를 선택합니다. 또는 플랫폼 관리형 키를 사용한 OS 디스크 기밀 암호화의 경우 DiskWithVMGuestState를 선택합니다. Intel TDX SKU 및 Linux 기반 이미지의 경우에만 고객은 임시 vTPM을 사용하여 배포할 NonPersistedTPM 보안 유형을 선택할 수 있습니다. NonPersistedTPM 보안 형식의 경우 템플릿 파일의 Microsoft.Compute/virtualMachines 아래에서 최소 "apiVersion": "2023-09-01"을 사용합니다.

  6. 매개 변수 파일을 저장합니다.

예제 Windows 매개 변수 파일

이 예제를 사용하여 Windows 기반 기밀 VM에 대한 사용자 지정 매개 변수 파일을 만듭니다.

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

예제 Linux 매개 변수 파일

이 예제를 사용하여 Linux 기반 기밀 VM에 대한 사용자 지정 매개 변수 파일을 만듭니다.

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

참고 항목

그에 따라 osImageName 값을 바꿉니다.

고객 관리형 키를 통한 OS 디스크 기밀 암호화로 기밀 VM 템플릿 배포

  1. Azure CLI를 통해 Azure 계정에 로그인합니다.

    az login
    
  2. Azure 구독을 설정합니다. <subscription-id>를 사용자의 구독 식별자로 바꿉니다. 사전 요구 사항을 충족하는 구독을 사용해야 합니다.

    az account set --subscription <subscription-id>
    
  3. 테넌트에게 기밀 VM 서비스 주체 Confidential VM Orchestrator 부여

    이 단계에서는 전역 관리자이거나 사용자 액세스 관리자 RBAC 역할이 있어야 합니다. 아래 명령을 실행하려면 Microsoft Graph SDK를 설치합니다.

    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 설정. 대신 Azure Key Vault 관리되는 HSM을 사용하는 방법은 다음 단계를 참조하세요.

    1. 키 자격 증명 모음에 대한 리소스 그룹을 만듭니다. 키 자격 증명 모음 인스턴스와 기밀 VM은 동일한 Azure 지역에 있어야 합니다.

      $resourceGroup = <key vault resource group>
      $region = <Azure region>
      az group create --name $resourceGroup --location $region
      
    2. 프리미엄 SKU를 사용하여 키 자격 증명 모음 인스턴스를 만들고 원하는 지역을 선택합니다. 표준 SKU는 지원되지 않습니다.

      $KeyVault = <name of key vault>
      az keyvault create --name $KeyVault --resource-group $resourceGroup --location $region --sku Premium --enable-purge-protection
      
    3. 이 키 자격 증명 모음에 소유자 역할이 있는지 확인합니다.

    4. 키 자격 증명 모음 getreleaseConfidential 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. (선택 사항) Azure Key Vault를 사용하지 않으려면 대신 Azure Key Vault 관리되는 HSM을 만들 수 있습니다.

    1. 빠른 시작에 따라 Azure Key Vault 관리되는 HSM 만들기에 따라 Azure Key Vault 관리되는 HSM을 프로비전하고 활성화합니다.

    2. Azure Managed HSM에서 제거 보호를 사용하도록 설정합니다. 이 단계는 키 릴리스를 사용하도록 설정하는 데 필요합니다.

      az keyvault update-hsm --subscription $subscriptionId -g $resourceGroup --hsm-name $hsm --enable-purge-protection true
      
    3. 관리되는 HSM에 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를 사용하여 새 키를 만듭니다. 대신 Azure 관리되는 HSM을 사용하는 방법은 다음 단계를 참조하세요.

    1. 키 릴리스 정책을 준비하고 로컬 디스크에 다운로드합니다.

    2. 새 키 만들기.

      $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. 만든 키에 대한 정보를 가져옵니다.

      $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 템플릿(deployDES.json)을 사용하여 DES(디스크 암호화 집합)를 배포합니다.

      $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 파일에 대한 키 액세스를 할당합니다.

      $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. (선택 사항) Azure 관리되는 HSM에서 새 키를 만듭니다.

    1. 키 릴리스 정책을 준비하고 로컬 디스크에 다운로드합니다.

    2. 새 키 만들기.

      $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. 만든 키에 대한 정보를 가져옵니다.

      $encryptionKeyURL = ((az keyvault key show --hsm-name $hsm --name $KeyName) | ConvertFrom-Json).key.kid
      
    4. DES를 배포합니다.

      $desName = <name of DES>
      az disk-encryption-set create -n $desName `
       -g $resourceGroup `
       --key-url $encryptionKeyURL
      
    5. 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. 고객 관리형 키를 사용하여 기밀 VM을 배포합니다.

    1. DES의 리소스 ID를 가져옵니다.

      $desID = (az disk-encryption-set show -n $desName -g $resourceGroup --query [id] -o tsv)
      
    2. 고객 관리형 키와 함께 AMD SEV-SNP 또는 Intel TDX용 기밀 VM ARM 템플릿 및 배포 매개 변수 파일(예: azuredeploy.parameters.win2022.json)을 사용하여 기밀 VM을 배포합니다.

      $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. 기밀 VM에 연결하여 성공적으로 만들어졌는지 확인합니다.

다음 단계