빠른 시작: Azure CLI를 사용하여 기밀 VM 만들기

적용 대상: ✔️ Linux VM ✔️ Windows VM

이 빠른 시작에서는 Azure CLI(Azure 명령줄 인터페이스)를 사용하여 Azure에서 기밀 VM(기밀 가상 머신)을 배포하는 방법을 보여 줍니다. Azure CLI는 명령줄 또는 스크립트를 통해 Azure 리소스를 만들고 관리하는 데 사용됩니다.

사전 요구 사항

Azure 구독이 아직 없는 경우 시작하기 전에 Azure 체험 계정을 만듭니다.

Azure Cloud Shell 시작

Azure Cloud Shell은 이 문서의 단계를 실행하는 데 무료로 사용할 수 있는 대화형 셸입니다. 공용 Azure 도구가 사전 설치되어 계정에서 사용하도록 구성되어 있습니다.

Cloud Shell을 열려면 코드 블록의 오른쪽 위 모서리에 있는 사용해 보세요를 선택하기만 하면 됩니다. 또한 https://shell.azure.com/bash로 이동하여 별도의 브라우저 탭에서 Cloud Shell을 열 수도 있습니다. 복사를 선택하여 코드 블록을 복사하여 Cloud Shell에 붙여넣고, Enter를 선택하여 실행합니다.

CLI를 로컬로 설치하고 사용하려는 경우 이 빠른 시작에는 Azure CLI 버전 2.38.0 이상이 필요합니다. az--version을 실행하여 버전을 찾습니다. 설치 또는 업그레이드해야 하는 경우 Azure CLI 설치를 참조하세요.

리소스 그룹 만들기

az group create 명령을 사용하여 리소스 그룹을 만듭니다. Azure 리소스 그룹은 Azure 리소스가 배포 및 관리되는 논리적 컨테이너입니다. 다음 예제에서는 northeurope 위치에 myResourceGroup 이라는 리소스 그룹을 만듭니다.

참고 항목

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

az group create --name myResourceGroup --location northeurope

플랫폼 관리형 키를 사용하여 기밀 가상 머신 만들기

az vm create 명령을 사용하여 VM을 만듭니다.

다음 예제에서는 myVM이라는 VM을 만들고 azureuser라는 사용자 계정을 추가합니다. --generate-ssh-keys 매개 변수는 SSH 키를 자동으로 생성하고 이를 기본 키 위치(~/.ssh)에 배치하는 데 사용됩니다. 특정 키 집합을 대신 사용하려면 --ssh-key-values 옵션을 사용합니다. size의 경우 기밀 VM 크기를 선택합니다. 자세한 정보는 지원되는 기밀 VM 제품군을 참조하세요.

OS 디스크 기밀 암호화가 없는 경우 VMGuestStateOnly를 선택합니다. 또는 플랫폼 관리형 키를 사용한 OS 디스크 기밀 암호화의 경우 DiskWithVMGuestState를 선택합니다. 보안 부팅은 기본적으로 사용하도록 설정되어 있지만 VMGuestStateOnly. 자세한 내용은 보안 부팅 및 vTPM을 참조하세요을 참조하세요. 호스트의 디스크 암호화 및 암호화에 대한 자세한 내용은 기밀 OS 디스크 암호화호스트에서 암호화를 참조하세요.

az vm create \
  --resource-group myResourceGroup \
  --name myVM \
  --size Standard_DC4es_v5 \
  --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 \
  --encryption-at-host \

VM과 지원 리소스를 만드는 데 몇 분이 걸립니다. 다음 예제 출력은 VM 만들기 작업이 완료되었음을 보여줍니다.

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

나중에 사용할 수 있도록 publicIpAddress를 기록해 둡니다.

고객 관리형 키를 사용하여 기밀 가상 머신 만들기

기밀 디스크 암호화 집합을 만들려면 Azure Key Vault 또는 Azure Key Vault 관리형 HSM(하드웨어 보안 모듈)의 두 옵션을 사용할 수 있습니다. 보안 및 규정 준수 요구 사항에 따라 두 옵션 중 하나를 선택할 수 있습니다. 그러나 표준 SKU는 지원되지 않는다는 점에 유의해야 합니다. 다음 예제에서는 Azure Key Vault Premium을 사용합니다.

  1. 테넌트에 기밀 VM 서비스 주체 Confidential VM Orchestrator 를 부여합니다. 이 단계에서는 전역 관리 되거나 사용자 액세스 관리istrator 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"
  1. az keyvault create 명령을 사용하여 Azure Key Vault를 만듭니다. 가격 책정 계층의 경우 프리미엄(HSM 지원 키에 대한 지원 포함)을 선택합니다. 이 키 자격 증명 모음에 소유자 역할이 있는지 확인합니다.
az keyvault create -n keyVaultName -g myResourceGroup --enabled-for-disk-encryption true --sku premium --enable-purge-protection true
  1. getrelease 키 자격 증명 모음에 Confidential VM Orchestrator 권한을 부여합니다.
$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를 사용하여 키 자격 증명 모음에 키를 만듭니다. 키 형식의 경우 RSA-HSM을 사용합니다.
az keyvault key create --name mykey --vault-name keyVaultName --default-cvm-policy --exportable --kty RSA-HSM
  1. az disk-encryption-set create를 사용하여 디스크 암호화 집합을 만듭니다. 암호화 유형을 ConfidentialVmEncryptedWithCustomerKey로 설정합니다.
$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를 사용하여 키 자격 증명 모음에 대한 디스크 암호화 집합 리소스 액세스 권한을 부여합니다.
$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. 디스크 암호화 집합 ID를 사용하여 VM을 만듭니다.
$diskEncryptionSetID=(az disk-encryption-set show -n diskEncryptionSetName -g myResourceGroup --query [id] -o tsv)
  1. az vm create 명령을 사용하여 VM을 만듭니다. 고객 관리형 키를 사용한 OS 디스크 기밀 암호화의 경우 DiskWithVMGuestState를 선택합니다. 보안 부팅을 사용하도록 설정하는 것은 선택 사항이지만 권장됩니다. 자세한 내용은 보안 부팅 및 vTPM을 참조하세요을 참조하세요. 디스크 암호화에 대한 자세한 내용은 기밀 OS 디스크 암호화를 참조하세요.
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과 지원 리소스를 만드는 데 몇 분이 걸립니다. 다음 예제 출력은 VM 만들기 작업이 완료되었음을 보여줍니다.

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

나중에 사용할 수 있도록 publicIpAddress를 기록해 둡니다.

Microsoft Azure 증명 샘플 앱을 통해 AMD 기반 CVM 커넥트 및 증명

게스트 증명 API와 함께 사용하기 위한 샘플 애플리케이션을 C++에서 사용하려면 다음 단계를 사용합니다. 이 예제에서는 Linux 기밀 가상 머신을 사용합니다. Windows의 경우 Windows 빌드 지침을 참조하세요.

  1. 공용 IP 주소를 사용하여 기밀 VM에 로그인합니다.

  2. 샘플 Linux 애플리케이션을 복제합니다.

  3. build-essential 패키지를 설치합니다. 이 패키지는 샘플 애플리케이션을 컴파일하는 데 필요한 모든 것을 설치합니다.

sudo apt-get install build-essential
  1. 아래에 패키지를 설치합니다.
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. 증명 패키지를 다운로드합니다.

  2. 증명 패키지를 설치합니다. <version>을 다운로드한 버전으로 바꿉니다.

sudo dpkg -i azguestattestation1_<latest-version>_amd64.deb
  1. 위의 패키지가 설치되면 아래 단계를 사용하여 앱을 빌드하고 실행합니다.
cd confidential-computing-cvm-guest-attestation/cvm-attestation-sample-app
sudo cmake . && make
sudo ./AttestationClient -o token
  1. 웹 토큰을 JSON으로 변환하려면 아래 단계를 사용합니다.
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 .

다음 단계