Azure CLI를 사용하여 Virtual Machine Scale Set에서 OS 및 연결된 데이터 디스크 암호화

명령줄 또는 스크립트에서 Azure 리소스를 만들고 관리하는 데 Azure CLI가 사용됩니다. 이 빠른 시작에서는 Azure CLI를 사용하여 Virtual Machine Scale Set를 만들고 암호화하는 방법을 보여 줍니다. Virtual Machine Scale Set에 Azure Disk Encryption을 적용하는 방법에 대한 자세한 내용은 Virtual Machine Scale Sets용 Azure Disk Encryption을 참조하세요.

필수 조건

  • 이 문서에는 Azure CLI 버전 2.0.31 이상이 필요합니다. Azure Cloud Shell을 사용하는 경우 최신 버전이 이미 설치되어 있습니다.

확장 집합 만들기

확장 집합을 만들려면 먼저 az group create를 사용하여 리소스 그룹을 만듭니다. 다음 예제에서는 eastus 위치에 myResourceGroup이라는 리소스 그룹을 만듭니다.

az group create --name myResourceGroup --location eastus

이제 az vmss create를 사용하여 가상 머신 확장 집합을 만듭니다. 다음 예제에서는 변경 내용이 적용될 때 자동으로 업데이트하도록 설정된 myScaleSet이라는 확장 집합을 만들고, ~/.ssh/id_rsa에 없는 경우 SSH 키를 생성합니다. 32Gb 데이터 디스크가 각 VM 인스턴스에 연결되며, Azure 사용자 지정 스크립트 확장을 사용하여 az vmss extension set로 데이터 디스크를 준비합니다.

Important

ADE에서 지원되는 운영 체제를 선택해야 합니다. ADE에 지원되는 OS

# Create a scale set with attached data disk
az vmss create \
  --resource-group myResourceGroup \
  --name myScaleSet \
  --orchestration-mode Flexible \
  --image <SKU Linux Image> \
  --admin-username azureuser \
  --generate-ssh-keys \
  --data-disk-sizes-gb 32

# Prepare the data disk for use with the Custom Script Extension
az vmss extension set \
  --publisher Microsoft.Azure.Extensions \
  --version 2.0 \
  --name CustomScript \
  --resource-group myResourceGroup \
  --vmss-name myScaleSet \
  --settings '{"fileUris":["https://raw.githubusercontent.com/Azure-Samples/compute-automation-configurations/master/prepare_vm_disks.sh"],"commandToExecute":"./prepare_vm_disks.sh"}'

확장 집합 리소스와 VM을 모두 만들고 구성하는 데 몇 분 정도 걸립니다.

디스크 암호화가 활성화된 Azure 키 자격 증명 모음 만들기

Azure Key Vault는 애플리케이션 및 서비스에 안전하게 구현할 수 있는 키와 암호를 저장할 수 있습니다. 암호화 키는 소프트웨어 보호를 사용하여 Azure Key Vault에 저장되거나 FIPS 140 유효성이 검사된 표준으로 인증된 HSM(하드웨어 보안 모듈)에서 키를 가져오거나 생성할 수 있습니다. 이러한 암호화 키는 VM에 연결된 가상 디스크를 암호화하고 암호를 해독하는 데 사용됩니다. 이러한 암호화 키에 대한 제어를 유지하고 그 사용을 감사할 수 있습니다.

사용자 고유의 keyvault_name을 정의합니다. 그런 다음, az keyvault create를 사용하여 확장 집합과 동일한 구독 및 영역에 KeyVault를 만들고 --enabled-for-disk-encryption액세스 정책을 설정합니다.

# Provide your own unique Key Vault name
keyvault_name=myuniquekeyvaultname

# Create Key Vault
az keyvault create --resource-group myResourceGroup --name $keyvault_name --enabled-for-disk-encryption

기존 Key Vault 사용

이 단계는 디스크 암호화로 사용하려는 기존 Key Vault가 있는 경우에만 필요합니다. 이전 섹션에서 Key Vault를 만든 경우 이 단계를 건너뜁니다.

사용자 고유의 keyvault_name을 정의합니다. 그런 다음, az keyvault update를 사용하여 KeyVault를 업데이트하고 --enabled-for-disk-encryption 액세스 정책을 설정합니다.

# Provide your own unique Key Vault name
keyvault_name=myuniquekeyvaultname

# Create Key Vault
az keyvault update --name $keyvault_name --enabled-for-disk-encryption

암호화 사용

참고 항목

Virtual Machine Scale Sets를 유연한 오케스트레이션 모드로 사용하는 경우 새 인스턴스만 암호화됩니다. 확장 집합의 기존 인스턴스는 개별적으로 암호화하거나 제거한 후 교체해야 합니다.

확장 집합에서 VM 인스턴스를 암호화하려면 먼저 az keyvault show를 사용하여 Key Vault 리소스 ID에 대한 정보를 얻습니다. 이러한 변수는 az vmss encryption enable로 암호화 프로세스를 시작하는 데 사용됩니다.

# Get the resource ID of the Key Vault
vaultResourceId=$(az keyvault show --resource-group myResourceGroup --name $keyvault_name --query id -o tsv)

# Enable encryption of the data disks in a scale set
az vmss encryption enable \
    --resource-group myResourceGroup \
    --name myScaleSet \
    --disk-encryption-keyvault $vaultResourceId \
    --volume-type DATA

암호화 프로세스를 시작하는 데 1~2분 정도 걸릴 수 있습니다.

확장 집합이 이전 단계에 만든 확장 집합에 대한 업그레이드 정책이며 “자동”으로 설정되어 있으므로 VM 인스턴스가 암호화 프로세스를 자동으로 시작합니다. 업그레이드 정책이 수동으로 설정된 확장 집합의 경우에는 az vmss update-instances를 사용하여 VM 인스턴스에 대해 암호화 정책을 시작합니다.

KEK를 사용하여 암호화를 사용하여 키 래핑

Virtual Machine Scale Set를 암호화할 때 보안을 강화하기 위해 키 암호화 키를 사용할 수도 있습니다.

# Get the resource ID of the Key Vault
vaultResourceId=$(az keyvault show --resource-group myResourceGroup --name $keyvault_name --query id -o tsv)

# Enable encryption of the data disks in a scale set
az vmss encryption enable \
    --resource-group myResourceGroup \
    --name myScaleSet \
    --disk-encryption-keyvault $vaultResourceId \
    --key-encryption-key myKEK \
    --key-encryption-keyvault $vaultResourceId \
    --volume-type DATA

참고 항목

disk-encryption-keyvault 매개 변수의 값에 대한 구문은 전체 식별자 문자열입니다.
/subscriptions/[subscription-id-guid]/resourceGroups/[resource-group-name]/providers/Microsoft.KeyVault/vaults/[keyvault-name]

키 암호화-키 매개 변수의 값에 대한 구문은
https://[keyvault-name].vault.azure.net/keys/[kekname]/[kek-unique-id]에서와 같은 KEK의 전체 URI입니다.

암호화 진행 확인

디스크 암호화의 상태를 확인하려면 az vmss encryption show를 사용합니다.

az vmss encryption show --resource-group myResourceGroup --name myScaleSet

VM 인스턴스가 암호화되어 있으면 다음 예제 출력에 나온 것처럼 “EncryptionState/encrypted”가 보고됩니다.

[
  {
    "disks": [
      {
        "encryptionSettings": null,
        "name": "myScaleSet_myScaleSet_0_disk2_3f39c2019b174218b98b3dfae3424e69",
        "statuses": [
          {
            "additionalProperties": {},
            "code": "EncryptionState/encrypted",
            "displayStatus": "Encryption is enabled on disk",
            "level": "Info",
            "message": null,
            "time": null
          }
        ]
      }
    ],
    "id": "/subscriptions/guid/resourceGroups/MYRESOURCEGROUP/providers/Microsoft.Compute/virtualMachineScaleSets/myScaleSet/virtualMachines/0",
    "resourceGroup": "MYRESOURCEGROUP"
  }
]

암호화 사용 안 함

암호화된 VM 인스턴스 디스크를 더 이상 사용하지 않으려는 경우 다음과 같이 az vmss encryption disable을 사용하여 암호화를 비활성화할 수 있습니다.

az vmss encryption disable --resource-group myResourceGroup --name myScaleSet

다음 단계

  • 이 문서에서는 Azure CLI를 사용하여 Virtual Machine Scale Set를 암호화했습니다. Azure PowerShell 또는 Azure Resource Manager 템플릿을 사용할 수도 있습니다.
  • 다른 확장이 프로비저닝된 후 Azure Disk Encryption을 적용하려는 경우 확장 시퀀싱을 사용할 수 있습니다.
  • Linux 확장 집합 데이터 디스크 암호화에 대한 엔드투엔드 배치 파일 예제는 여기서 찾을 수 있습니다. 이 예제에서는 리소스 그룹, Linux 확장 집합을 만들고, 5GB 데이터 디스크를 탑재하고, Virtual Machine Scale Set를 암호화합니다.