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

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

Azure Cloud Shell

Azure는 브라우저를 통해 사용할 수 있는 대화형 셸 환경인 Azure Cloud Shell을 호스트합니다. Cloud Shell에서 Bash 또는 PowerShell을 사용하여 Azure 서비스 작업을 수행할 수 있습니다. 로컬 환경에 아무 것도 설치할 필요 없이 Azure Cloud Shell의 미리 설치된 명령을 사용하여 이 문서의 코드를 실행할 수 있습니다.

Azure Cloud Shell을 시작하려면 다음을 수행합니다.

옵션 예제/링크
코드 또는 명령 블록의 오른쪽 상단에서 시도를 선택합니다. 시도를 선택해도 코드 또는 명령이 Cloud Shell에 자동으로 복사되지 않습니다. Screenshot that shows an example of Try It for Azure Cloud Shell.
https://shell.azure.com으로 이동하거나 Cloud Shell 시작 단추를 선택하여 브라우저에서 Cloud Shell을 엽니다. Button to launch Azure Cloud Shell.
Azure Portal의 오른쪽 위에 있는 메뉴 모음에서 Cloud Shell 단추를 선택합니다. Screenshot that shows the Cloud Shell button in the Azure portal

Azure Cloud Shell을 사용하려면:

  1. Cloud Shell을 시작합니다.

  2. 코드 블록(또는 명령 블록)에서 복사 단추를 선택하여 코드 또는 명령을 복사합니다.

  3. Windows 및 Linux에서 Ctrl+Shift+V를 선택하거나 macOS에서 Cmd+Shift+V를 선택하여 코드 또는 명령을 Cloud Shell 세션에 붙여넣습니다.

  4. Enter를 선택하여 코드 또는 명령을 실행합니다.

디스크 암호화가 활성화된 Azure Key Vault 만들기

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

New-AzKeyVault를 사용하여 Key Vault를 만듭니다. Key Vault를 디스크 암호화에 사용할 수 있도록 허용하려면 EnabledForDiskEncryption 매개 변수를 설정합니다. 또한 다음 예제에서는 리소스 그룹 이름, Key Vault 이름 및 위치에 대한 변수를 정의합니다. 사용자 고유의 Key Vault 이름을 제공합니다.

$rgName="myResourceGroup"
$vaultName="myuniquekeyvault"
$location = "EastUS"

New-AzResourceGroup -Name $rgName -Location $location
New-AzKeyVault -VaultName $vaultName -ResourceGroupName $rgName -Location $location -EnabledForDiskEncryption

기존 Key Vault 사용

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

Set-AzKeyVaultAccessPolicy를 사용하여 확장 집합과 동일한 구독 및 지역에 있는 기존의 Key Vault에서 디스크 암호화를 사용하도록 설정할 수 있습니다. 다음과 같이 $vaultName 변수에서 기존 Key Vault의 이름을 정의합니다.

$vaultName="myexistingkeyvault"
Set-AzKeyVaultAccessPolicy -VaultName $vaultName -EnabledForDiskEncryption

확장 집합 만들기

Important

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

먼저 Get-Credential을 사용하여 VM 인스턴스에 대한 관리자 사용자 이름과 암호를 설정합니다.

$cred = Get-Credential

이제 New-AzVmss를 사용하여 가상 머신 확장 집합을 만듭니다. 트래픽을 개별 VM 인스턴스로 배포하기 위해 부하 분산 장치도 생성됩니다. 부하 분산 장치는 TCP 포트 80에서 트래픽을 분산할 뿐만 아니라 TCP 포트 3389의 원격 데스크톱 트래픽 및 TCP 포트 5985의 PowerShell 원격을 허용하는 규칙을 포함합니다.

$vmssName="myScaleSet"

New-AzVmss `
    -ResourceGroupName $rgName `
    -VMScaleSetName $vmssName `
    -OrchestrationMode "flexible" `
    -Location $location `
    -VirtualNetworkName "myVnet" `
    -SubnetName "mySubnet" `
    -PublicIpAddressName "myPublicIPAddress" `
    -LoadBalancerName "myLoadBalancer" `
    -Credential $cred

암호화 사용

확장 집합에서 VM 인스턴스를 암호화하려면 먼저 Get-AzKeyVault를 사용하여 Key Vault URI 및 리소스 ID에 대한 정보를 얻습니다. 이러한 변수는 Set-AzVmssDiskEncryptionExtension으로 암호화 프로세스를 시작하는 데 사용됩니다.

$diskEncryptionKeyVaultUrl=(Get-AzKeyVault -ResourceGroupName $rgName -Name $vaultName).VaultUri
$keyVaultResourceId=(Get-AzKeyVault -ResourceGroupName $rgName -Name $vaultName).ResourceId

Set-AzVmssDiskEncryptionExtension -ResourceGroupName $rgName -VMScaleSetName $vmssName `
    -DiskEncryptionKeyVaultUrl $diskEncryptionKeyVaultUrl -DiskEncryptionKeyVaultId $keyVaultResourceId -VolumeType "All"

메시지가 나타나면 y를 입력하여 확장 집합 VM 인스턴스에서 디스크 암호화 프로세스를 계속합니다.

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

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

$diskEncryptionKeyVaultUrl=(Get-AzKeyVault -ResourceGroupName $rgName -Name $vaultName).VaultUri
$keyVaultResourceId=(Get-AzKeyVault -ResourceGroupName $rgName -Name $vaultName).ResourceId
$keyEncryptionKeyUrl = (Get-AzKeyVaultKey -VaultName $vaultName -Name $keyEncryptionKeyName).Key.kid;

Set-AzVmssDiskEncryptionExtension -ResourceGroupName $rgName -VMScaleSetName $vmssName `
    -DiskEncryptionKeyVaultUrl $diskEncryptionKeyVaultUrl -DiskEncryptionKeyVaultId $keyVaultResourceId `
    -KeyEncryptionKeyUrl $keyEncryptionKeyUrl -KeyEncryptionKeyVaultId $keyVaultResourceId -VolumeType "All"

참고 항목

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입니다.

암호화 진행 확인

디스크 암호화의 상태를 확인하려면 Get-AzVmssDiskEncryption을 사용합니다.

Get-AzVmssDiskEncryption -ResourceGroupName $rgName -VMScaleSetName $vmssName

VM 인스턴스가 암호화될 때 EncryptionSummary 코드는 다음 예제 출력에 표시된 대로 ProvisioningState/succeeded를 보고합니다.

ResourceGroupName            : myResourceGroup
VmScaleSetName               : myScaleSet
EncryptionSettings           :
  KeyVaultURL                : https://myuniquekeyvault.vault.azure.net/
  KeyEncryptionKeyURL        :
  KeyVaultResourceId         : /subscriptions/guid/resourceGroups/myResourceGroup/providers/Microsoft.KeyVault/vaults/myuniquekeyvault
  KekVaultResourceId         :
  KeyEncryptionAlgorithm     :
  VolumeType                 : All
  EncryptionOperation        : EnableEncryption
EncryptionSummary[0]         :
  Code                       : ProvisioningState/succeeded
  Count                      : 2
EncryptionEnabled            : True
EncryptionExtensionInstalled : True

암호화 사용 안 함

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

Disable-AzVmssDiskEncryption -ResourceGroupName $rgName -VMScaleSetName $vmssName

다음 단계

  • 이 문서에서는 Virtual Machine Scale Set를 암호화하는 데 Azure PowerShell을 사용했습니다. Azure CLI 또는 Azure Resource Manager 템플릿도 사용할 수 있습니다.
  • 다른 확장이 프로비저닝된 후 Azure Disk Encryption을 적용하려는 경우 확장 시퀀싱을 사용할 수 있습니다.