演習 - 既存の VM ディスクの暗号化

完了

あなたは、スタートアップ企業の財務管理アプリを開発しているとします。 すべての顧客のデータがセキュリティで保護されていることを確認する必要があります。 そのため、このアプリをホストするサーバー上のすべての OS ディスクとデータ ディスクに Azure Disk Encryption (ADE) を実装することにしました。 コンプライアンス要件の一部として、独自の暗号化キーの管理も自分で行う必要があります。

このユニットでは、既存の仮想マシン (VM) 上のディスクを暗号化し、独自の Azure Key Vault を使用して暗号化キーを管理します。

環境の準備

まず、Azure VM で新しい Windows VM をデプロイします。

Windows VM をデプロイする

新しい Windows VM を作成してデプロイするには、右側の Azure PowerShell ウィンドウを使用します。

  1. 選択された場所を保持するには、PowerShell 変数を定義します。 リソース グループと同じリージョンを使用します。

    $location = (Get-AzResourceGroup -name <rgn>[sandbox Resource Group]</rgn>).location
    

    ヒント

    [コピー] ボタンを使用して、コマンドをクリップボードにコピーできます。 貼り付けるには、Cloud Shell ターミナル内で新しい行を右クリックして [貼り付け] を選択するか、Shift + Insert キーボード ショートカット (macOS では ⌘ + V) を使用します。

  2. 次に、リソース グループと VM の名前を取り込むためのさらに便利な変数をいくつか定義します。 ここでは、事前に作成されたリソース グループを使用しています。 通常は、New-AzResourceGroup を使用して、サブスクリプションに「新しい」リソース グループを作成します。

    $vmName = "fmdata-vm01"
    $rgName = "<rgn>[sandbox Resource Group]</rgn>"
    
  3. 新しい VM を作成するには、New-AzVm を使用します。

    New-AzVm `
        -ResourceGroupName $rgName `
        -Name $vmName `
        -Location $location `
        -OpenPorts 3389
    

    Cloud Shell によりメッセージが表示されたら、VM のユーザー名とパスワードを入力します。 この情報は、VM 用に作成される初期アカウントとして使用されます。

    Note

    多くののオプションを指定しなかったため、このコマンドではいくつかの既定値が使用されます。 具体的に言うと、サイズが Standard_DS1_v2 に設定された Windows 2016 Server イメージが作成されます。 VM サイズを指定する場合、Basic レベルの VM では ADE がサポートされないことにご注意ください。

  4. VM のデプロイの完了後に、変数に VM の詳細を取り込みます。 この変数を使用して、作成内容を確認することができます。

    $vm = Get-AzVM -Name $vmName -ResourceGroupName $rgName
    
  5. 次のコードを使用して、VM に接続されている OS ディスクを確認できます。

    $vm.StorageProfile.OSDisk
    
    OsType                  : Windows
    EncryptionSettings      :
    Name                    : fmdata-vm01_OsDisk_1_6bcf8dcd49794aa785bad45221ec4433
    Vhd                     :
    Image                   :
    Caching                 : ReadWrite
    WriteAcceleratorEnabled :
    CreateOption            : FromImage
    DiskSizeGB              : 127
    ManagedDisk             : Microsoft.Azure.Management.Compute.Models.ManagedDiskP
                              arameters
    
  6. OS ディスク (およびすべてのデータ ディスク) の現在の暗号化の状態を確認します。

    Get-AzVmDiskEncryptionStatus  `
        -ResourceGroupName $rgName `
        -VMName $vmName
    

    ディスクは現在 "暗号化されていない" ことに注目してください。

    OsVolumeEncrypted          : NotEncrypted
    DataVolumesEncrypted       : NotEncrypted
    OsVolumeEncryptionSettings :
    ProgressMessage            : No Encryption extension or metadata found on the VM
    

これを変更してみましょう。

Azure Disk Encryption で VM ディスクを暗号化する

このデータを保護する必要があるため、ディスクを暗号化してみます。 次のようないくつかの手順を行う必要があることを思い出してください。

  1. キー コンテナーを作成します。

  2. ディスク暗号化をサポートするようにキー コンテナーを設定します。

  3. キー コンテナーに格納されているキーを使用して、VM ディスクを暗号化するように Azure に指示します。

ヒント

ここでは手順を個別に見ていきますが、ご自分のサブスクリプションでこのタスクを実行する際は、このモジュールの「まとめ」セクション内でリンクされている便利な PowerShell スクリプトを使用することができます。

キー コンテナーを作成する

Azure Key Vault を作成するには、サブスクリプションでサービスを有効にする必要があります。 サービスを 1 回だけ有効にする必要があります。

ヒント

サブスクリプションによっては、Register-AzResourceProvider コマンドレットを使用して Microsoft.KeyVault プロバイダーを有効にする必要がある場合があります。 Azure サンドボックス サブスクリプションではこれは必要ありません。

  1. 新しいキー コンテナーの名前を決めます。 これは一意である必要があります。数字、文字、ダッシュで構成された 3 から 24 文字の範囲で指定できます。 末尾に乱数をいくつか追加して、以下の 1234 を置き換えてみてください。

    $keyVaultName = "mvmdsk-kv-1234"
    
  2. New-AzKeyVault を使用して Azure キー コンテナーを作成します。

    • ご自身の VM と同じリソース グループ "および" 場所に配置されていることを確認します。
    • ディスクの暗号化で使用するためにキー コンテナーを有効にします。
    • 一意のキー コンテナー名を指定します。
    New-AzKeyVault -VaultName $keyVaultName `
        -Location $location `
        -ResourceGroupName $rgName `
        -EnabledForDiskEncryption
    

    このコマンドから、アクセス権を持つユーザーがいないことを示す警告が表示されます。

    WARNING: Access policy is not set. No user or app have access permission to use this vault. This warning can occur if the vault was created by a service principal. To set access policies, use Set-AzKeyVaultAccessPolicy.
    

    この警告は VM 用の暗号化キーを格納するコンテナーを使用するだけで、ユーザーがこのデータにアクセスする必要はないため、問題はありません。

ディスクを暗号化する

ディスクを暗号化する準備はほとんどできています。 作業を行う前に、バックアップの作成に関する警告が表示されます。

重要

運用システムを使用している場合は、Azure Backup を使用するか、スナップショットを作成して、マネージド ディスクのバックアップを作成する必要があります。 スナップショットは Azure portal 内でまたはコマンドラインを使用して作成することができます。 PowerShell の場合は、New-AzSnapshot コマンドレットを使用します。 これはシンプルな演習であり、完了時にこのデータを破棄するため、この手順はスキップします。

  1. キー コンテナーの情報を保持するには、変数を定義します。

    $keyVault = Get-AzKeyVault `
        -VaultName $keyVaultName `
        -ResourceGroupName $rgName
    
  2. 次に、VM ディスクを暗号化するために、Set-AzVmDiskEncryptionExtension コマンドレットを実行します

    • VolumeType パラメーターを使用して、暗号化するディスク ([すべて] | [OS] | [データ]) を指定できます。 既定値は All です。 Linux の場合、データ ディスクを暗号化できるのは一部のディストリビューションのみとなります。
    • スナップショットがない場合、マネージド ディスクに SkipVmBackup フラグを指定できます。
    Set-AzVmDiskEncryptionExtension `
        -ResourceGroupName $rgName `
        -VMName $vmName `
        -VolumeType All `
        -DiskEncryptionKeyVaultId $keyVault.ResourceId `
        -DiskEncryptionKeyVaultUrl $keyVault.VaultUri `
        -SkipVmBackup
    
  3. このコマンドレットでは、VM をオフラインにする必要があることと、タスクが完了するまで数分かかる場合があることを示す警告が表示されます。 先に進んで、作業を続行します。

    Enable AzureDiskEncryption on the VM
    This cmdlet prepares the VM and enables encryption which may reboot the machine and takes 10-15 minutes to
    finish. Please save your work on the VM before confirming. Do you want to continue?
    [Y] Yes  [N] No  [S] Suspend  [?] Help (default is "Y"): Y
    
  4. コマンドレットの実行が完了したら、暗号化の状態をもう一度確認します。

    Get-AzVmDiskEncryptionStatus  -ResourceGroupName $rgName -VMName $vmName
    

    これで OS ディスクが暗号化されるはずです。 Windows に表示される、接続されたデータ ディスクもすべて暗号化されます。

    OsVolumeEncrypted          : Encrypted
    DataVolumesEncrypted       : NoDiskFound
    OsVolumeEncryptionSettings : Microsoft.Azure.Management.Compute.Models.DiskEncryptionSettings
    ProgressMessage            : Provisioning succeeded
    

Note

暗号化後に追加された新しいディスクは、自動的に暗号化されませんSet-AzVMDiskEncryptionExtension コマンドレットを再実行して、新しいディスクを暗号化することができます。 既にディスクが暗号化されている VM にディスクを追加する場合は、必ず、新しいシーケンス番号を指定してください。 また、オペレーティング システムに表示されないディスクは暗号化されません。 BitLocker 拡張機能でディスクを表示するには、ディスクを適切にパーティション分割、フォーマット、マウントする必要があります。