Azure CLI を使用して、マネージド ディスクでカスタマー マネージド キーを使用し、サーバー側の暗号化を有効にする

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

Azure Disk Storage を使用すると、選択した場合は、マネージド ディスクにサーバー側の暗号化 (SSE) を使用しているときに独自のキーを管理できます。 カスタマー マネージド キーを使用する SSE とその他のマネージド ディスクの暗号化の概念については、ディスクの暗号化の記事の「カスタマー マネージド キー」セクションを参照してください。

制限

現在、カスタマー マネージド キーには次の制限があります。

  • 増分スナップショットを含むディスクに対してこの機能が有効になっている場合、そのディスクまたはそのスナップショットでこれを無効にすることはできません。 これを回避するには、カスタマー マネージド キーを使用していないまったく別のマネージド ディスクにすべてのデータをコピーします。 これは Azure CLI または Azure PowerShell モジュールのいずれかで行うことができます。
  • 2,048 ビット、3,072 ビットおよび 4,096 ビットのサイズのソフトウェアと HSM の RSA キーのみがサポートされており、その他のキーまたはサイズはサポートされていません。
    • HSM キーには、premium レベルの Azure Key Vault が必要です。
  • Ultra Disks と Premium SSD v2 ディスクの場合のみ:
    • サーバー側の暗号化とカスタマー マネージド キーで暗号化されたディスクから作成されたスナップショットは、同じカスタマー マネージド キーを使用して暗号化する必要があります。
    • カスタマー マネージド キーで暗号化された Ultra Disks と Premium SSD v2 ディスクに対しては、ユーザー割り当てマネージド ID がサポートされません。
  • お使いのカスタマー マネージド キー (ディスク暗号化セット、VM、ディスク、およびスナップショット) に関連するほとんどのリソースは、同じサブスクリプションとリージョンに存在する必要があります。
    • Azure Key Vault は異なるサブスクリプションから使用できますが、ディスク暗号化セットと同じリージョンに存在する必要があります。 プレビューとして、別の Microsoft Entra テナントから Azure Key Vault を使用できます。
  • カスタマー マネージド キーで暗号化されたディスクは、それらが接続されている VM の割り当てが解除された場合にのみ、別のリソース グループに移動できます。
  • カスタマー マネージド キーで暗号化されたディスク、スナップショット、およびイメージは、サブスクリプション間で移動できません。
  • 現在または以前に Azure Disk Encryption を使用して暗号化されたマネージド ディスクは、カスタマー マネージド キーを使用して暗号化することはできません。
  • サブスクリプションごとに、リージョンに最大で 5000 のディスク暗号化セットのみを作成できます。
  • カスタマー マネージド キーを共有イメージ ギャラリーで使用する方法の詳細については、「プレビュー:イメージの暗号化にカスタマー マネージド キーを使用する」を参照してください。

リソースを作成する

この機能を有効にしたら、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 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
  • DiskEncryptionSet リソースに Key Vault へのアクセス権を付与します。

Note

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

最後に、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

これらのリソースを作成し、構成したので、これらを使用してマネージド ディスクをセキュリティで保護することができます。 次のリンクには、個々のシナリオごとにスクリプトの例が含まれています。これは、マネージド ディスクをセキュリティで保護するために使用できます。

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

重要

カスタマー マネージド キーは、Microsoft Entra ID の 1 つの機能である、Azure リソース用マネージド ID に依存します。 カスタマー マネージド キーを構成すると、内部でマネージド ID がリソースに自動的に割り当てられます。 その後、サブスクリプション、リソース グループ、またはマネージド ディスクを 1 つの Microsoft Entra ディレクトリから別のディレクトリに移動した場合、そのマネージド ディスクに関連付けられているマネージド ID は新しいテナントに転送されないため、カスタマー マネージド キーが機能しなくなることがあります。 詳しくは、「Microsoft Entra ディレクトリ間のサブスクリプションの転送」を参照してください。

次のステップ