Azure CLI を使用して、ホストでの暗号化を使用したエンドツーエンドの暗号化を有効にする

適用対象: ✔️ Linux VM ✔️ フレキシブル スケール セット

ホストでの暗号化を有効にすると、VM ホスト上の格納データは、保存時に暗号化され、暗号化された状態でストレージ サービスに送られます。 ホストでの暗号化とその他のマネージド ディスクの暗号化の概要については、「ホストでの暗号化 - VM データのエンドツーエンドの暗号化」を参照してください。

制限

  • Ultra Disks はサポートされません。
  • VM または仮想マシン スケール セットで Azure Disk Encryption (bitlocker/DM-Crypt を使用するゲスト VM の暗号化) が有効になっている場合、有効にすることはできません。
  • ホストでの暗号化が有効になっているディスクで Azure Disk Encryption を有効にすることはできません。
  • 既存の仮想マシン スケール セットで暗号化を有効にすることができます。 しかし、暗号化を有効にした後に作成された新しい VM のみが自動的に暗号化されます。
  • 暗号化するには、既存の VM の割り当てを解除して再割り当てする必要があります。
  • エフェメラル OS ディスクをサポートしますが、プラットフォーム マネージド キーを使用した場合のみです。

サポートされる VM のサイズ

サポートされている VM サイズの完全な一覧は、プログラムを使用してプルできます。 プログラムによって取得する方法については、「サポートされている VM のサイズを確認する」セクションを参照してください。 VM サイズをアップグレードすると、新しい VM サイズで EncryptionAtHost 機能がサポートされているかどうかが確認されます。

前提条件

VM または VMSS に対して EncryptionAtHost プロパティを使用する前に、サブスクリプションに対してこの機能を有効にする必要があります。 下の手順に従って、サブスクリプションに対して機能を有効にしてください。

  • 次のコマンドを実行して、お使いのサブスクリプションにこの機能を登録します
az feature register --namespace Microsoft.Compute --name EncryptionAtHost
  • この機能を試す前に、下のコマンドを使用して、登録状態が Registered であることを確認してください (数分かかります)。
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 を使用してマネージド ディスクを暗号化する場合は必須です。

重要

リージョンにキャメル ケースを使用しないでください。キャメル ケースを使用すると、Azure portal のリソースに追加のディスクを割り当てるときに問題が発生することがあります。

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

az account set --subscription $subscriptionId

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
  • DiskEncryptionSet リソースに Key Vault へのアクセス権を付与します。

Note

Azure がお使いの Azure Active Directory にご自分の 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

最後に、DiskEncryptionSet アクセス権を管理対象 HSM に付与します。

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 を作成します。

前に作成した DiskEncryptionSet のリソース URI を使用して、マネージド ディスクを持つ VM を作成し、カスタマー マネージド キーを使用して、OS ディスクとデータ ディスクのキャッシュを暗号化します。 一時ディスクは、プラットフォーム マネージド キーを使用して暗号化されます。

rgName=yourRGName
vmName=yourVMName
location=eastus
vmSize=Standard_DS2_v2
image=UbuntuLTS 
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 を作成します。

ホストでの暗号化が有効な VM を作成し、プラットフォーム マネージド キーを使用して OS/データ ディスクのキャッシュと一時ディスクを暗号化します。

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

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

カスタマー マネージド キーを使用して、ホストでの暗号化が有効な仮想マシン スケール セットを作成します。

前に作成した DiskEncryptionSet のリソース URI を使用して、マネージド ディスクを持つ仮想マシン スケール セットを作成し、カスタマー マネージド キーを使用して、OS ディスクとデータ ディスクのキャッシュを暗号化します。 一時ディスクは、プラットフォーム マネージド キーを使用して暗号化されます。

rgName=yourRGName
vmssName=yourVMSSName
location=westus2
vmSize=Standard_DS3_V2
image=UbuntuLTS 
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 UbuntuLTS \
--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

プラットフォーム マネージド キーを使用して、ホストでの暗号化が有効な仮想マシン スケール セットを作成します。

ホストでの暗号化が有効な仮想マシン スケール セットを作成し、プラットフォーム マネージド キーを使用して OS/データ ディスクのキャッシュと一時ディスクを暗号化します。

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

az vmss create -g $rgName \
-n $vmssName \
--encryption-at-host \
--image UbuntuLTS \
--upgrade-policy automatic \
--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 のサイズはサポートされていません。 サポートされている VM サイズの一覧は、次のいずれかで見つけることができます。

リソースの SKU API を呼び出し、 機能が True に設定されていることを確認しています。

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

または、Get-AzComputeResourceSku PowerShell コマンドレットを呼び出します。

$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 テンプレートのサンプル