Azure CLI를 사용하여 호스트에서 암호화를 사용하는 엔드투엔드 암호화를 사용하도록 설정

적용 대상: ✔️ Linux VM ✔️ 유연한 확장 집합

호스트에서 암호화를 사용하도록 설정하면 VM 호스트에 저장된 데이터는 미사용 및 스토리지 서비스로 암호화된 흐름으로 암호화됩니다. 호스트에서 암호화 및 기타 관리 디스크 암호화 유형에 대한 개념 정보는 호스트에서 암호화 - VM 데이터에 대한 엔드투엔드 암호화를 참조하세요.

제한 사항

  • 4k 섹터 크기의 Ultra Disks 및 프리미엄 SSD v2에 지원됩니다.
  • 2023년 5월 13일 이후에 만들어진 512e 섹터 크기 Ultra Disks 및 프리미엄 SSD v2에서만 지원됩니다.
    • 이 날짜 이전에 만들어진 디스크의 경우 디스크 스냅샷을 생성하고 해당 스냅샷을 사용하여 새 디스크를 만듭니다.
  • 현재 또는 Azure Disk Encryption을 사용하도록 설정한 적이 있는 VM(가상 머신) 또는 가상 머신 확장 집합에서는 사용하도록 설정할 수 없습니다.
  • 호스트에서 암호화가 사용하도록 설정된 디스크에서는 Azure Disk Encryption을 사용하도록 설정할 수 없습니다.
  • 암호화는 기존 가상 머신 확장 집합에서 사용하도록 설정할 수 있습니다. 단, 암호화를 사용하도록 설정한 후 생성된 새 VM만 자동으로 암호화됩니다.
  • 암호화하려면 기존 VM의 할당을 취소하고 다시 할당해야 합니다.

국가별 가용성

호스트 암호화는 모든 지역에서 모든 디스크 유형에 대해 사용할 수 있습니다.

지원되는 VM 크기

지원되는 VM 크기의 전체 목록은 프로그래밍 방식으로 끌어올 수 있습니다. 프로그래밍 방식으로 검색하는 방법을 알아보려면 지원되는 VM 크기 찾기 섹션을 참조하세요. VM 크기를 업그레이드하면 새 VM 크기가 EncryptionAtHost 기능을 지원하는지 확인하기 위해 유효성 검사가 수행됩니다.

필수 조건

VM/VMSS에 대한 EncryptionAtHost 속성을 사용하기 전에 구독에 이 기능을 사용하도록 설정해야 합니다. 다음 단계를 사용하여 구독에 대한 기능을 사용하도록 설정합니다.

  • 다음 명령을 실행하여 구독에 대한 기능 등록
az feature register --namespace Microsoft.Compute --name EncryptionAtHost
  • 기능을 사용해 보기 전에 아래 명령을 사용하여 등록 상태가 등록됨(몇 분 소요)인지 확인합니다.
az feature show --namespace Microsoft.Compute --name EncryptionAtHost

리소스 만들기

참고 항목

이 섹션은 고객 관리형 키를 사용하는 구성에만 적용됩니다. 플랫폼 관리형 키를 사용하는 경우 예제 스크립트 섹션으로 건너뛸 수 있습니다.

이 기능이 사용하도록 설정되면 DiskEncryptionSet와 Azure Key Vault 또는 Azure Key Vault 관리되는 HSM을 설정해야 합니다.

Azure Key Vault

  • 최신 Azure CLI를 설치하고 az login으로 Azure 계정에 로그인합니다.
  • Azure Key Vault 및 암호화 키를 만듭니다.

Key Vault를 만들 때 제거 보호를 사용하도록 설정해야 합니다. 제거 보호를 사용하면 보존 기간이 지날 때까지 삭제된 키를 영구 삭제할 수 없습니다. 이러한 설정은 실수로 삭제하여 데이터가 손실되지 않도록 보호합니다. 이러한 설정은 관리 디스크를 암호화하기 위해 Key Vault를 사용하는 경우 필수입니다.

Important

지역을 카멜식 대/소문자로 구분하지 마세요. 그렇게 하면 Azure Portal의 리소스에 추가 디스크를 할당할 때 문제가 발생할 수 있습니다.

subscriptionId=yourSubscriptionID
rgName=yourResourceGroupName
location=westcentralus
keyVaultName=yourKeyVaultName
keyName=yourKeyName
diskEncryptionSetName=yourDiskEncryptionSetName
diskName=yourDiskName

az account set --subscription $subscriptionId

az group create --resource-group $rgName --location $location

az keyvault create -n $keyVaultName \
-g $rgName \
-l $location \
--enable-purge-protection true 

az keyvault key create --vault-name $keyVaultName \
-n $keyName \
--protection software
  • DiskEncryptionSet을 만듭니다. enable-auto-key-rotation을 true로 설정하여 키의 자동 순환을 사용하도록 설정할 수 있습니다. 자동 순환을 사용하는 경우 시스템은 디스크 암호화 집합을 참조하는 모든 관리 디스크, 스냅샷, 이미지가 1시간 이내에 새 버전의 키를 사용하도록 자동으로 업데이트합니다.
keyVaultKeyUrl=$(az keyvault key show --vault-name $keyVaultName --name $keyName --query [key.kid] -o tsv)

az disk-encryption-set create -n $diskEncryptionSetName \
-l $location \
-g $rgName \
--key-url $keyVaultKeyUrl \
--enable-auto-key-rotation false
  • Key Vault에 대해 DiskEncryptionSet 리소스 액세스 권한을 부여합니다.

참고 항목

Azure가 Microsoft Entra ID에 DiskEncryptionSet의 ID를 만드는 데 몇 분 정도 걸릴 수 있습니다. 다음 명령을 실행할 때 "Active Directory 개체를 찾을 수 없습니다"와 같은 오류가 발생하면 몇 분 정도 기다린 후 다시 시도하세요.

desIdentity=$(az disk-encryption-set show -n $diskEncryptionSetName -g $rgName --query [identity.principalId] -o tsv)

az keyvault set-policy -n $keyVaultName \
-g $rgName \
--object-id $desIdentity \
--key-permissions wrapkey unwrapkey get

Azure Key Vault 관리형 HSM

또는 관리되는 HSM을 사용하여 키를 처리할 수 있습니다.

이렇게 하려면 다음 필수 조건을 완료해야 합니다.

구성

관리되는 HSM을 만들고 권한을 추가했으면 삭제 방지를 사용하도록 설정하고 암호화 키를 만듭니다.

subscriptionId=yourSubscriptionID
rgName=yourResourceGroupName
location=westcentralus
keyVaultName=yourKeyVaultName
keyName=yourKeyName
diskEncryptionSetName=yourDiskEncryptionSetName
diskName=yourDiskName
    
az account set --subscription $subscriptionId
    
az keyvault update-hsm --subscription $subscriptionId -g $rgName --hsm-name $keyVaultName --enable-purge-protection true
    
az keyvault key create --hsm-name  $keyVaultName --name $keyName --ops wrapKey unwrapKey --kty RSA-HSM --size 2048

그런 다음, DiskEncryptionSet를 만듭니다.

keyVaultKeyUrl=$(az keyvault key show --vault-name $keyVaultName --name $keyName --query [key.kid] -o tsv)
    
az disk-encryption-set create -n $diskEncryptionSetName \
-l $location \
-g $rgName \
--key-url $keyVaultKeyUrl \
--enable-auto-key-rotation false

마지막으로 Managed HSM에 대한 DiskEncryptionSet 액세스 권한을 부여합니다.

desIdentity=$(az disk-encryption-set show -n $diskEncryptionSetName -g $rgName --query [identity.principalId] -o tsv)
    
az keyvault role assignment create --hsm-name $keyVaultName --role "Managed HSM Crypto Service Encryption User" --assignee $desIdentity --scope /keys

예제 스크립트

호스트에서 고객 관리형 키로 암호화를 사용하도록 설정된 VM 생성

고객 관리형 키로 OS 및 데이터 디스크의 캐시를 암호화하기 위해 이전에 만든 DiskEncryptionSet의 리소스 URI를 사용하여 관리 디스크가 있는 VM을 만듭니다. 임시 디스크는 플랫폼 관리형 키를 사용하여 암호화됩니다.

rgName=yourRGName
vmName=yourVMName
location=eastus
vmSize=Standard_DS2_v2
image=LinuxImageURN
diskEncryptionSetName=yourDiskEncryptionSetName

diskEncryptionSetId=$(az disk-encryption-set show -n $diskEncryptionSetName -g $rgName --query [id] -o tsv)

az vm create -g $rgName \
-n $vmName \
-l $location \
--encryption-at-host \
--image $image \
--size $vmSize \
--generate-ssh-keys \
--os-disk-encryption-set $diskEncryptionSetId \
--data-disk-sizes-gb 128 128 \
--data-disk-encryption-sets $diskEncryptionSetId $diskEncryptionSetId

호스트에서 플랫폼 관리형 키로 암호화를 사용하도록 설정된 VM 생성

플랫폼 관리형 키를 사용하여 OS/데이터 디스크 및 임시 디스크의 캐시를 암호화하려면 호스트에서 암호화가 설정된 VM을 만듭니다.

rgName=yourRGName
vmName=yourVMName
location=eastus
vmSize=Standard_DS2_v2
image=LinuxImageURN

az vm create -g $rgName \
-n $vmName \
-l $location \
--encryption-at-host \
--image $image \
--size $vmSize \
--generate-ssh-keys \
--data-disk-sizes-gb 128 128 \

호스트에서 암호화를 사용하도록 VM 업데이트

rgName=yourRGName
vmName=yourVMName

az vm update -n $vmName \
-g $rgName \
--set securityProfile.encryptionAtHost=true

호스트에서 VM에 대한 암호화 상태를 확인합니다.

rgName=yourRGName
vmName=yourVMName

az vm show -n $vmName \
-g $rgName \
--query [securityProfile.encryptionAtHost] -o tsv

호스트에서 암호화를 사용하지 않도록 VM 업데이트

호스트에서 암호화를 사용하지 않도록 설정하려면 먼저 VM 할당을 취소해야 합니다.

rgName=yourRGName
vmName=yourVMName

az vm update -n $vmName \
-g $rgName \
--set securityProfile.encryptionAtHost=false

호스트에서 고객 관리형 키로 암호화를 사용하도록 설정된 가상 머신 확장 집합을 만듭니다.

고객 관리형 키로 OS 및 데이터 디스크의 캐시를 암호화하기 위해 앞서 만든 DiskEncryptionSet의 리소스 URI를 사용해 관리 디스크로 가상 머신 확장 집합을 만듭니다. 임시 디스크는 플랫폼 관리형 키를 사용하여 암호화됩니다.

Important

2023년 11월부터 PowerShell 및 Azure CLI를 사용하여 만들어진 VM Scale Sets는 오케스트레이션 모드가 지정되지 않은 경우 기본적으로 유연한 오케스트레이션 모드로 설정됩니다. 이 변경 내용과 취해야 할 작업에 대한 자세한 내용은 VMSS PowerShell/CLI 고객을 위한 호환성이 손상되는 변경 - Microsoft 커뮤니티 허브를 참조하세요.

rgName=yourRGName
vmssName=yourVMSSName
location=westus2
vmSize=Standard_DS3_V2
image=Ubuntu2204
diskEncryptionSetName=yourDiskEncryptionSetName

diskEncryptionSetId=$(az disk-encryption-set show -n $diskEncryptionSetName -g $rgName --query [id] -o tsv)

az vmss create -g $rgName \
-n $vmssName \
--encryption-at-host \
--image $image \
--orchestration-mode flexible \
--admin-username azureuser \
--generate-ssh-keys \
--os-disk-encryption-set $diskEncryptionSetId \
--data-disk-sizes-gb 64 128 \
--data-disk-encryption-sets $diskEncryptionSetId $diskEncryptionSetId

호스트에서 플랫폼 관리형 키를 사용하여 암호화를 사용하도록 설정된 가상 머신 확장 집합을 만듭니다.

호스트에서 플랫폼 관리형 키를 사용하여 OS/데이터 디스크 및 임시 디스크의 캐시를 암호화하는 데 사용할 수 있는 암호화를 사용하여 가상 머신 확장 집합을 만듭니다.

Important

2023년 11월부터 PowerShell 및 Azure CLI를 사용하여 만들어진 VM Scale Sets는 오케스트레이션 모드가 지정되지 않은 경우 기본적으로 유연한 오케스트레이션 모드로 설정됩니다. 이 변경 내용과 취해야 할 작업에 대한 자세한 내용은 VMSS PowerShell/CLI 고객을 위한 호환성이 손상되는 변경 - Microsoft 커뮤니티 허브를 참조하세요.

rgName=yourRGName
vmssName=yourVMSSName
location=westus2
vmSize=Standard_DS3_V2
image=Ubuntu2204

az vmss create -g $rgName \
-n $vmssName \
--encryption-at-host \
--image $image \
--orchestration-mode flexible \
--admin-username azureuser \
--generate-ssh-keys \
--data-disk-sizes-gb 64 128 \

호스트에서 암호화를 사용하도록 가상 머신 확장 집합 업데이트

rgName=yourRGName
vmssName=yourVMName

az vmss update -n $vmssName \
-g $rgName \
--set virtualMachineProfile.securityProfile.encryptionAtHost=true

호스트에서 가상 머신 확장 집합에 대한 암호화 상태 확인

rgName=yourRGName
vmssName=yourVMName

az vmss show -n $vmssName \
-g $rgName \
--query [virtualMachineProfile.securityProfile.encryptionAtHost] -o tsv

호스트에서 암호화를 사용하지 않도록 가상 머신 확장 집합 업데이트

가상 머신 확장 집합의 호스트에서 암호화를 사용하지 않도록 설정할 수 있지만 이 설정은 호스트에서 암호화를 사용하지 않도록 설정한 후에 생성된 VM에만 영향을 줍니다. 기존 VM의 경우 VM 할당을 취소하고, 해당 개별 VM의 호스트에서 암호화를 사용하지 않도록 설정한 다음, VM을 다시 할당해야 합니다.

rgName=yourRGName
vmssName=yourVMName

az vmss update -n $vmssName \
-g $rgName \
--set virtualMachineProfile.securityProfile.encryptionAtHost=false

지원되는 VM 크기 찾기

레거시 VM 크기는 지원되지 않습니다. 리소스 SKU API 또는 Azure PowerShell 모듈을 사용하여 지원되는 VM 크기 목록을 찾을 수 있습니다. CLI를 사용하여 지원되는 크기를 찾을 수 없습니다.

리소스 SKU API를 호출할 때 EncryptionAtHostSupported 기능이 True로 설정되었는지 확인합니다.

    {
        "resourceType": "virtualMachines",
        "name": "Standard_DS1_v2",
        "tier": "Standard",
        "size": "DS1_v2",
        "family": "standardDSv2Family",
        "locations": [
        "CentralUSEUAP"
        ],
        "capabilities": [
        {
            "name": "EncryptionAtHostSupported",
            "value": "True"
        }
        ]
    }

Azure PowerShell 모듈의 경우 Get-AzComputeResourceSku cmdlet을 사용합니다.

$vmSizes=Get-AzComputeResourceSku | where{$_.ResourceType -eq 'virtualMachines' -and $_.Locations.Contains('CentralUSEUAP')}

foreach($vmSize in $vmSizes)
{
    foreach($capability in $vmSize.capabilities)
    {
        if($capability.Name -eq 'EncryptionAtHostSupported' -and $capability.Value -eq 'true')
        {
            $vmSize

        }

    }
}

다음 단계

이제 리소스를 만들고 구성했으므로 해당 리소스를 사용하여 관리 디스크를 보호할 수 있습니다. 다음 링크에는 관리 디스크를 보호하는 데 사용할 수 있는 개별 시나리오를 포함하는 예제 스크립트가 포함되어 있습니다.

Azure Resource Manager 템플릿 샘플