빠른 시작: ARM 템플릿을 사용하여 기밀 VM 배포
ARM 템플릿(Azure Resource Manager 템플릿)을 사용하여 Azure 기밀 VM을 빠르게 만들 수 있습니다. 기밀 VM은 AMD SEV-SNP가 지원하는 AMD 프로세서와 Intel TDX에서 지원하는 Intel 프로세서 모두에서 실행되어 VM 메모리 암호화 및 격리를 달성합니다. 자세한 내용은 기밀 VM 개요를 참조하세요.
이 자습서에서는 사용자 지정 구성을 사용하여 기밀 VM을 배포하는 방법을 설명합니다.
필수 구성 요소
- Azure 구독 평가판 계정은 이 자습서에 사용된 VM에 액세스할 수 없습니다. 한 가지 옵션은 종량제 구독을 사용하는 것입니다.
- Azure CLI에서 배포하려면 PowerShell을 설치하고 Azure CLI를 설치합니다.
Azure CLI를 사용하여 기밀 VM 템플릿 배포
플랫폼 관리형 키를 통해 선택적 OS 디스크 기밀 암호화가 있는 기밀 VM 템플릿을 배포할 수 있습니다.
Azure CLI를 통해 ARM 템플릿을 사용하여 기밀 VM을 만들고 배포하려면 다음을 수행합니다.
Azure CLI에서 Azure 계정에 로그인합니다.
az login
Azure 구독을 설정합니다.
<subscription-id>
를 사용자의 구독 식별자로 바꿉니다. 사전 요구 사항을 충족하는 구독을 사용해야 합니다.az account set --subscription <subscription-id>
기밀 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
사용자 지정 매개 변수 파일 및 템플릿 파일이 있는 ARM 템플릿을 사용하여 Azure에 VM을 배포합니다.
az deployment group create ` -g $resourceGroup ` -n $deployName ` -u "<json-template-file-path>" ` -p "<json-parameter-file-path>" ` -p vmLocation=$region ` vmName=$vmName
사용자 지정 매개 변수 파일 정의
Azure CLI(Azure 명령줄 인터페이스)를 통해 기밀 VM을 만들 때 사용자 지정 매개 변수 파일을 정의해야 합니다. 사용자 지정 JSON 매개 변수 파일을 만들려면 다음을 수행합니다.
Azure CLI를 통해 Azure 계정에 로그인합니다.
JSON 매개 변수 파일을 만듭니다. 예:
azuredeploy.parameters.json
.사용 중인 OS 이미지에 따라 Windows 매개 변수 파일 예 또는 Linux 매개 변수 파일 예를 매개 변수 파일에 복사합니다.
필요에 따라 매개 변수 파일에서 JSON 코드를 편집합니다. 예를 들어, OS 이미지 이름(
osImageName
) 또는 관리자 사용자 이름(adminUsername
)을 업데이트합니다.보안 형식 설정을 구성합니다(
securityType
). OS 디스크 기밀 암호화를 사용하지 않으려면VMGuestStateOnly
를 선택합니다. 또는 플랫폼 관리형 키를 사용한 OS 디스크 기밀 암호화의 경우DiskWithVMGuestState
를 선택합니다. Intel TDX SKU 및 Linux 기반 이미지의 경우에만 고객은 임시 vTPM을 사용하여 배포할NonPersistedTPM
보안 유형을 선택할 수 있습니다.NonPersistedTPM
보안 형식의 경우 템플릿 파일의Microsoft.Compute/virtualMachines
아래에서 최소 "apiVersion": "2023-09-01"을 사용합니다.매개 변수 파일을 저장합니다.
예제 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 템플릿 배포
Azure CLI를 통해 Azure 계정에 로그인합니다.
az login
Azure 구독을 설정합니다.
<subscription-id>
를 사용자의 구독 식별자로 바꿉니다. 사전 요구 사항을 충족하는 구독을 사용해야 합니다.az account set --subscription <subscription-id>
테넌트에게 기밀 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"
Azure Key Vault 설정. 대신 Azure Key Vault 관리되는 HSM을 사용하는 방법은 다음 단계를 참조하세요.
키 자격 증명 모음에 대한 리소스 그룹을 만듭니다. 키 자격 증명 모음 인스턴스와 기밀 VM은 동일한 Azure 지역에 있어야 합니다.
$resourceGroup = <key vault resource group> $region = <Azure region> az group create --name $resourceGroup --location $region
프리미엄 SKU를 사용하여 키 자격 증명 모음 인스턴스를 만들고 원하는 지역을 선택합니다. 표준 SKU는 지원되지 않습니다.
$KeyVault = <name of key vault> az keyvault create --name $KeyVault --resource-group $resourceGroup --location $region --sku Premium --enable-purge-protection
이 키 자격 증명 모음에 소유자 역할이 있는지 확인합니다.
키 자격 증명 모음
get
및release
에Confidential 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
(선택 사항) Azure Key Vault를 사용하지 않으려면 대신 Azure Key Vault 관리되는 HSM을 만들 수 있습니다.
빠른 시작에 따라 Azure Key Vault 관리되는 HSM 만들기에 따라 Azure Key Vault 관리되는 HSM을 프로비전하고 활성화합니다.
Azure Managed HSM에서 제거 보호를 사용하도록 설정합니다. 이 단계는 키 릴리스를 사용하도록 설정하는 데 필요합니다.
az keyvault update-hsm --subscription $subscriptionId -g $resourceGroup --hsm-name $hsm --enable-purge-protection true
관리되는 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
Azure Key Vault를 사용하여 새 키를 만듭니다. 대신 Azure 관리되는 HSM을 사용하는 방법은 다음 단계를 참조하세요.
키 릴리스 정책을 준비하고 로컬 디스크에 다운로드합니다.
새 키 만들기.
$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"
만든 키에 대한 정보를 가져옵니다.
$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
DES ARM 템플릿()을 사용하여 DES(
deployDES.json
디스크 암호화 집합)를 배포합니다.$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
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
(선택 사항) Azure 관리되는 HSM에서 새 키를 만듭니다.
키 릴리스 정책을 준비하고 로컬 디스크에 다운로드합니다.
새 키 만들기.
$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"
만든 키에 대한 정보를 가져옵니다.
$encryptionKeyURL = ((az keyvault key show --hsm-name $hsm --name $KeyName) | ConvertFrom-Json).key.kid
DES를 배포합니다.
$desName = <name of DES> az disk-encryption-set create -n $desName ` -g $resourceGroup ` --key-url $encryptionKeyURL
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
고객 관리형 키를 사용하여 기밀 VM을 배포합니다.
DES의 리소스 ID를 가져옵니다.
$desID = (az disk-encryption-set show -n $desName -g $resourceGroup --query [id] -o tsv)
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
기밀 VM에 연결하여 성공적으로 만들어졌는지 확인합니다.