Azure CLI를 사용하여 관리 디스크에 대한 고객 관리형 키로 서버 쪽 암호화를 사용하도록 설정

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

Azure Disk Storage를 사용하면 관리 디스크에 대해 SSE(서버 쪽 암호화)를 사용하도록 선택하는 경우 자체 키를 관리할 수 있습니다. 고객 관리형 키와 기타 관리 디스크 암호화 유형을 사용하는 SSE에 대한 개념 정보는 디스크 암호화 문서의 고객 관리형 키 섹션을 참조하세요.

제한 사항

현재, 고객 관리형 키에는 다음과 같은 제한 사항이 있습니다.

  • 증분 스냅샷이 있는 디스크에 대해 이 기능이 사용하도록 설정된 경우 해당 디스크 또는 해당 스냅샷에서 사용하지 않도록 설정할 수 없습니다. 이 문제를 해결하려면 고객 관리형 키를 사용하지 않는 완전히 다른 관리 디스크로 모든 데이터를 복사합니다. Azure CLI 또는 Azure PowerShell 모듈을 사용하여 이 작업을 수행할 수 있습니다.
  • 2,048비트, 3,072비트 및 4,096비트 크기의 소프트웨어 및 HSM RSA 키만 지원되며 다른 키 또는 크기는 지원되지 않습니다.
    • HSM 키에는 Azure 키 자격 증명 모음의 프리미엄 계층이 필요합니다.
  • Ultra Disks 및 Premium SSD v2 디스크의 경우에만 다음을 수행합니다.
    • 서버 쪽 암호화 및 고객 관리형 키로 암호화된 디스크에서 만든 스냅샷은 동일한 고객 관리형 키로 암호화되어야 합니다.
    • 사용자 할당 관리 ID는 고객 관리형 키로 암호화된 Ultra Disks 및 Premium SSD v2 디스크에 대해 지원되지 않습니다.
  • 고객 관리형 키와 관련된 대부분의 리소스(디스크 암호화 집합, VM, 디스크 및 스냅샷)는 동일한 구독 및 지역에 있어야 합니다.
    • Azure Key Vault는 다른 구독에서 사용할 수 있지만 디스크 암호화 집합과 동일한 지역에 있어야 합니다. 미리 보기로 다른 Microsoft Entra 테넌트의 Azure Key Vault를 사용할 수 있습니다.
  • 고객 관리형 키로 암호화된 디스크는 연결된 VM의 할당이 취소된 경우에만 다른 리소스 그룹으로 이동할 수 있습니다.
  • 고객 관리형 키를 사용하여 암호화된 디스크, 스냅샷 및 이미지는 다른 구독으로 이동할 수 없습니다.
  • 현재 또는 이전에 Azure Disk Encryption을 통해 암호화된 관리 디스크는 고객 관리형 키를 사용하여 암호화할 수 없습니다.
  • 구독당 지역당 최대 5,000개의 디스크 암호화 집합을 만들 수 있습니다.
  • 공유 이미지 갤러리에서 고객 관리형 키를 사용하는 방법에 대한 자세한 내용은 미리 보기: 이미지 암호화를 위해 고객 관리형 키 사용을 참조하세요.

리소스 만들기

기능이 사용하도록 설정되면 DiskEncryptionSet와 Azure Key Vault 또는 Azure Key Vault Managed 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

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

예제

Marketplace 이미지를 사용하여 VM 만들기, 고객 관리형 키로 OS 및 데이터 디스크 암호화

rgName=yourResourceGroupName
vmName=yourVMName
location=westcentralus
vmSize=Standard_DS3_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 --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에 해당 디스크가 연결되어 있지 않아야 합니다.

rgName=yourResourceGroupName
diskName=yourDiskName
diskEncryptionSetName=yourDiskEncryptionSetName

az disk update -n $diskName -g $rgName --encryption-type EncryptionAtRestWithCustomerKey --disk-encryption-set $diskEncryptionSetId

Marketplace 이미지를 사용하여 가상 머신 확장 집합을 만들고 고객 관리형 키를 사용하여 OS 및 데이터 디스크를 암호화합니다.

rgName=yourResourceGroupName
vmssName=yourVMSSName
location=westcentralus
vmSize=Standard_DS3_V2
image=LinuxImageURN
diskEncryptionSetName=yourDiskencryptionSetName

diskEncryptionSetId=$(az disk-encryption-set show -n $diskEncryptionSetName -g $rgName --query [id] -o tsv)
az vmss create -g $rgName -n $vmssName --image $image --upgrade-policy automatic --admin-username azureuser --generate-ssh-keys --os-disk-encryption-set $diskEncryptionSetId --data-disk-sizes-gb 64 128 --data-disk-encryption-sets $diskEncryptionSetId $diskEncryptionSetId

고객 관리형 키로 서버 쪽 암호화를 사용하여 암호화된 빈 디스크를 만들고 VM에 연결합니다.

vmName=yourVMName
rgName=yourResourceGroupName
diskName=yourDiskName
diskSkuName=Premium_LRS
diskSizeinGiB=30
location=westcentralus
diskLUN=2
diskEncryptionSetName=yourDiskEncryptionSetName


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

az disk create -n $diskName -g $rgName -l $location --encryption-type EncryptionAtRestWithCustomerKey --disk-encryption-set $diskEncryptionSetId --size-gb $diskSizeinGiB --sku $diskSkuName

diskId=$(az disk show -n $diskName -g $rgName --query [id] -o tsv)

az vm disk attach --vm-name $vmName --lun $diskLUN --ids $diskId

DiskEncryptionSet의 키를 변경하여 DiskEncryptionSet를 참조하는 모든 리소스에 대한 키를 회전합니다.


rgName=yourResourceGroupName
keyVaultName=yourKeyVaultName
keyName=yourKeyName
diskEncryptionSetName=yourDiskEncryptionSetName


keyVaultId=$(az keyvault show --name $keyVaultName--query [id] -o tsv)

keyVaultKeyUrl=$(az keyvault key show --vault-name $keyVaultName --name $keyName --query [key.kid] -o tsv)

az disk-encryption-set update -n keyrotationdes -g keyrotationtesting --key-url $keyVaultKeyUrl --source-vault $keyVaultId

디스크의 서버 쪽 암호화 상태 찾기

az disk show -g yourResourceGroupName -n yourDiskName --query [encryption.type] -o tsv

Important

고객 관리형 키는 Microsoft Entra ID의 기능 중 하나인 Azure 리소스에 대한 관리 ID를 사용합니다. 고객 관리형 키를 구성하는 경우 관리 ID가 내부적으로 리소스에 자동으로 할당됩니다. 이후에 구독, 리소스 그룹 또는 관리 디스크를 Microsoft Entra 디렉터리 간에 이동하는 경우 관리 디스크와 연결된 관리 ID는 새로운 테넌트로 전송되지 않으므로 고객 관리형 키가 더 이상 작동하지 않을 수 있습니다. 자세한 내용은 Microsoft Entra 디렉터리 간에 구독 전송을 참조하세요.

다음 단계