다음을 통해 공유


Azure 기밀 VM에 대한 사용자 지정 이미지를 만드는 방법

적용 대상: ✔️ Linux VM

이 "방법"에서는 Azure CLI(Azure 명령줄 인터페이스)를 사용하여 Azure에서 기밀 VM(기밀 가상 머신)에 대한 사용자 지정 이미지를 만드는 방법을 보여 줍니다. Azure CLI는 명령줄 또는 스크립트를 통해 Azure 리소스를 만들고 관리하는 데 사용됩니다.

사용자 지정 이미지를 만들면 요구 사항을 충족하는 특정 소프트웨어, 설정 및 보안 조치를 사용하여 기밀 VM을 미리 구성할 수 있습니다. 기밀 VM과 호환되지 않는 Ubuntu 이미지를 가져오려면 아래 단계에 따라 이미지에 대한 최소 요구 사항을 확인할 수 있습니다.

사전 요구 사항

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.0.30 이상이 필요합니다. az --version을 실행하여 버전을 찾습니다. 설치 또는 업그레이드해야 하는 경우 Azure CLI 설치를 참조하세요.

리소스 그룹 만들기

az group create 명령을 사용하여 리소스 그룹을 만듭니다. Azure 리소스 그룹은 Azure 리소스가 배포 및 관리되는 논리적 컨테이너입니다.

참고 항목

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

az group create --name $resourceGroupName --location eastus

Azure 기밀 VM에 대한 사용자 지정 이미지 만들기

  1. Azure 지원 이미지 목록에서 선택한 Ubuntu 이미지를 사용하여 가상 머신을 만듭니다.

  2. 커널 버전이 5.15.0-1037-azure 이상인지 확인합니다. VM에 연결한 후 "uname -r"을 사용하여 커널 버전을 확인할 수 있습니다. 여기서는 이미지에 맞는 변경 내용을 추가할 수 있습니다.

  3. 가상 머신의 할당을 취소합니다.

    az vm deallocate --name $vmname --resource-group $resourceGroupName
    
  4. OS 디스크에 대한 SAS 토큰(공유 액세스 토큰)을 만들고 변수에 저장합니다. 이 OS 디스크는 기밀 VM과 동일한 리소스 그룹에 있을 필요가 없습니다.

    disk_name=$(az vm show --name $vmname --resource-group $resourceGroupName | jq -r .storageProfile.osDisk.name)
    disk_url=$(az disk grant-access --duration-in-seconds 3600 --name $disk_name --resource-group $resourceGroupName | jq -r .accessSas)
    

내보낸 디스크를 저장할 스토리지 계정 만들기

  1. 스토리지 계정 만들기
    az storage account create --resource-group ${resourceGroupName} --name ${storageAccountName} --location $region --sku "Standard_LRS"
    
  2. 스토리지 계정 내에 컨테이너를 만듭니다.
    az storage container create --name $storageContainerName --account-name $storageAccountName --resource-group $resourceGroupName
    
  3. 스토리지 컨테이너에 대한 읽기 SAS 토큰(읽기 공유 액세스 토큰)을 생성하고 변수에 저장합니다.
    container_sas=$(az storage container generate-sas --name $storageContainerName --account-name $storageAccountName --auth-mode key --expiry 2024-01-01 --https-only --permissions dlrw -o tsv)
    
  4. azcopy를 사용하여 OS 디스크를 스토리지 컨테이너에 복사합니다.
     blob_url="https://${storageAccountName}.blob.core.windows.net/$storageContainerName/$referenceVHD"
     azcopy copy "$disk_url" "${blob_url}?${container_sas}"
    

기밀 지원 이미지 만들기

  1. Shared Image Gallery를 만듭니다.
    az sig create --resource-group $resourceGroupName --gallery-name $galleryName
    
  2. 지원되는 SIG(공유 이미지 갤러리) 정의 기밀 VM을 만듭니다. 갤러리 이미지 정의, SIG 게시자 및 SKU에 대한 새 이름을 설정합니다.
    az sig image-definition create --resource-group  $resourceGroupName --location $region --gallery-name $galleryName --gallery-image-definition $imageDefinitionName --publisher $sigPublisherName --offer ubuntu --sku $sigSkuName --os-type Linux --os-state specialized --hyper-v-generation V2  --features SecurityType=ConfidentialVMSupported
    
  3. 스토리지 계정 ID를 가져옵니다.
    storageAccountId=$(az storage account show --name $storageAccountName --resource-group $resourceGroupName | jq -r .id)
    
  4. SIG 이미지 버전을 만듭니다.
    az sig image-version create --resource-group $resourceGroupName --gallery-name $galleryName --gallery-image-definition $imageDefinitionName --gallery-image-version $galleryImageVersion --os-vhd-storage-account $storageAccountId --os-vhd-uri $blob_url
    
  5. 이전 단계에서 만든 SIG 이미지 버전의 ID를 저장합니다.
    galleryImageId=$(az sig image-version show --gallery-image-definition $imageDefinitionName --gallery-image-version $galleryImageVersion --gallery-name $galleryName --resource-group $resourceGroupName | jq -r .id)
    

기밀 VM 만들기

  1. az vm create 명령을 사용하여 VM을 만듭니다. 자세한 내용은 보안 부팅 및 vTPM을 참조하세요을 참조하세요. 디스크 암호화에 대한 자세한 내용은 기밀 OS 디스크 암호화를 참조하세요. 현재 기밀 VM은 DC 시리즈EC 시리즈 VM 크기를 지원합니다.
    az vm create \
    --resource-group $resourceGroupName \
    --name $cvmname \
    --size Standard_DC4as_v5 \
    --enable-vtpm true \
    --enable-secure-boot true \
    --image $galleryImageId \
    --public-ip-sku Standard \
    --security-type ConfidentialVM \
    --os-disk-security-encryption-type VMGuestStateOnly \
    --specialized
    

다음 단계