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

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

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

制限

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

  • この機能がディスクで有効になっている場合、無効にすることはできません。 これを回避する必要がある場合は、カスタマー マネージド キーを使用していないまったく別のマネージド ディスクにすべてのデータをコピーする必要があります。
  • 2,048 ビット、3,072 ビットおよび 4,096 ビットのサイズのソフトウェアと HSM の RSA キーのみがサポートされており、その他のキーまたはサイズはサポートされていません。
    • HSM キーには、premium レベルの Azure Key Vault が必要です。
  • サーバー側の暗号化とカスタマー マネージド キーを使用して暗号化されたカスタム イメージから作成されたディスクは、同じカスタマー マネージド キーを使用して暗号化する必要があります。 ディスクとそのイメージは同じサブスクリプションに存在する必要があります。ディスクの暗号化に使用されるキーは別のサブスクリプションに配置できます。
  • サーバー側の暗号化とカスタマー マネージド キーで暗号化されたディスクから作成されたスナップショットは、同じカスタマー マネージド キーを使用して暗号化する必要があります。
  • お使いのカスタマー マネージド キー (ディスク暗号化セット、VM、ディスク、およびスナップショット) に関連するほとんどのリソースは、同じサブスクリプションとリージョンに存在する必要があります。
    • Azure Key Vault は異なるサブスクリプションから使用できますが、ディスク暗号化セットと同じリージョンに存在する必要があります。 プレビューとして、さまざまな Azure Active Directory テナントから 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 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

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

Marketplace イメージを使用して VM を作成し、カスタマー マネージド キーで OS とデータ ディスクを暗号化する

rgName=yourResourceGroupName
vmName=yourVMName
location=westcentralus
vmSize=Standard_DS3_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 --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=UbuntuLTS 
diskEncryptionSetName=yourDiskencryptionSetName

diskEncryptionSetId=$(az disk-encryption-set show -n $diskEncryptionSetName -g $rgName --query [id] -o tsv)
az vmss create -g $rgName -n $vmssName --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

カスタマー マネージド キーを使用したサーバー側の暗号化で暗号化された空のディスクを作成し、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

重要

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

次のステップ