VMware vSphereでNative Key ProviderとVM Encryptionを設定する方法

VMware tutorial - IT technology blog
VMware tutorial - IT technology blog

仮想マシンの暗号化が必要な理由——なぜ今なのか?

コンサルタントとして何度も経験してきた状況がある。顧客はVMware vSphereを使い、データストアをSAN上に置き、ファイアウォールで囲まれているから安全だと思い込んでいる。ある日、ハードディスクが故障して保証修理に出した——そのディスク上には仮想マシンのデータが丸ごと入っていて、暗号化も保護も何もない。ベンダーの技術者が.vmdkファイルを読もうと思えば、いつでも読めてしまう。

VM Encryptionはまさにこの痛点を解決する。データはハイパーバイザーレイヤーでXTS-AES-256により暗号化され、ストレージに書き込まれる前に処理される。物理的に.vmdkファイルを手に入れても、キーがなければ見えるのはランダムなデータだけだ。

従来の最大の障壁は、外部のKMS(Key Management Server)が必要だったことだ——HyTrust、Thales、IBM SKLMといった製品を別途購入しなければならなかった。コストも手間もかかる。vSphere 7.0 Update 2から、VMwareはNative Key Providerを導入した。vCenterに組み込まれたキープロバイダーで、外部KMSが不要になった。今回はこの機能について詳しく解説する。

Native Key Providerの仕組み

Native Key Provider(NKP)は名前の通り、vCenter Serverに直接統合されており、暗号化キーを自動生成・管理する。追加のサーバーをデプロイする必要も、別途ライセンスも不要だ。

ただし、使い始める前に把握しておくべき点がいくつかある:

  • キーのバックアップは手動で行う——キーバックアップファイルをエクスポートして外部に保存する必要がある。バックアップなしにvCenterがクラッシュした場合、暗号化されたVMは起動できなくなる。
  • NKPはVM EncryptionとvTPMのみをサポートする。vSANの暗号化が必要な場合は、Standard Key Provider(外部KMS)を引き続き使用する必要がある。
  • 最小要件はvSphere 7.0 U2——vCenterとESXiホストの両方が対象となる。

個人ラボでProxmoxに移行したとき、この違いがより明確になった。ProxmoxにはハイパーバイザーレイヤーでのVM暗号化機能がなく、ゲストOSレイヤーで自分で処理するか、ストレージにLUKSを使う必要がある。VMwareはこの処理を透過的に行ってくれるため、数十台のVMを管理する場合は特に便利だ。

vCenterへのNative Key Providerのセットアップ

すべての操作はvSphere Client(Web UI)から行う。このステップではSSHもPowerCLIも不要だ。

ステップ1:Native Key Providerの追加

  1. vSphere Clientにログイン→インベントリでvCenter Serverを選択する。
  2. Configureタブ→SecurityKey Providersに移動する。
  3. Addをクリック→Add Native Key Providerを選択する。
  4. 名前を設定し(例:NKP-Production)、Add Key Providerをクリックする。

作成直後、ステータスは“Not backed up”と表示され、黄色の警告色になる。次のステップを絶対に省略しないこと。

ステップ2:Key Providerのバックアップ(必須)

このステップが最も重要であり、最も見落とされやすい。バックアップファイルなしにvCenterが壊れた場合、すべての暗号化済みVMが起動できなくなる。データは完全に失われる。

  1. 作成したNKPを選択→Back Upをクリックする。
  2. バックアップファイルを保護するパスワードを設定する(このパスワードは必ず記憶すること——復元する方法はない)。
  3. .p12ファイルをローカルマシンにダウンロードする(数KBの小さなファイルだが、他のどのバックアップよりも重要だ)。
  4. 最低2カ所以上の異なる場所に保存する——オフラインUSB、専用クラウドストレージ、または物理金庫など。

バックアップ完了後、ステータスは緑色の“Active”に変わる。

# PowerCLIでNKPのステータスを確認する(オプション)
Connect-VIServer -Server vcenter.lab.local -User [email protected] -Password 'P@ssw0rd'

# キープロバイダーの一覧を取得する
Get-KeyManagementServer

仮想マシンの暗号化設定

vSphereのVM Encryptionの仕組みはシンプルだ。すべてはVM Storage Policyを通じて処理される。暗号化を含むポリシーを作成してVMに適用するだけで完了する。各VMの設定を個別に変更する必要はない。

VM Encryption Storage Policyの作成

  1. vSphere ClientでMenuPolicies and ProfilesVM Storage Policiesに移動する。
  2. Createをクリックする。
  3. ポリシー名を設定する:VM-Encryption-Policy
  4. Policy structureセクションでEnable host based rulesを有効にする。
  5. Host based servicesタブ→Encryptionセクション→Use storage policy componentを選択する。
  6. コンポーネントVM Encryption Policyを選択する。
  7. ウィザードを完了する→Review and Finish

新規仮想マシンの暗号化

新規VMを作成する際、Customize hardwareのステップでVM Storage Policyを選択し、作成したVM-Encryption-Policyを指定する。VMのすべてのディスクが自動的に暗号化される。

実行中の仮想マシンへの暗号化適用(既存VM)

この操作はVMをシャットダウンする必要はない——ただし再設定中に短いダウンタイムが発生する。小規模なVMであれば通常30秒以内で完了する。

  1. VMを右クリック→VM PoliciesEdit VM Storage Policies
  2. ポリシーをVM-Encryption-Policyに変更→Apply to allをクリックする。
  3. 確認してタスクが完了するまで待つ。

複数のVMをまとめて暗号化する場合はPowerCLIを使う方が効率的だ——数十台のVMを処理する際に特に時間の節約になる:

# vCenterに接続する
Connect-VIServer -Server vcenter.lab.local -User [email protected] -Password 'P@ssw0rd'

# 暗号化ストレージポリシーを取得する
$encPolicy = Get-SpbmStoragePolicy -Name "VM-Encryption-Policy"

# フォルダ内のすべてのVMにポリシーを適用する
$vms = Get-VM -Location (Get-Folder -Name "Production-VMs")

foreach ($vm in $vms) {
    Write-Host "Encrypting $($vm.Name)..."
    Set-SpbmEntityConfiguration -Configuration (Get-SpbmEntityConfiguration $vm) -StoragePolicy $encPolicy
}

Write-Host "Done. Check Compliance status in vSphere Client."

特定のディスクのみを暗号化する(VM全体ではなく)

VMに複数のVMDKがあり、機密データを含むディスクのみを暗号化したい場合:

  1. VM Settings→暗号化するHard Diskを選択する。
  2. そのディスクのVM Storage Policyセクション→VM-Encryption-Policyを選択する。
  3. 残りのディスクは既存のポリシーをそのままにする。

実際の注意点:VMを暗号化すると、.vmdkだけでなく.vmx(VM設定ファイル)と.nvramも暗号化される。ドキュメントを読む際にこの点を見落とす人が多い。

確認とモニタリング

VMの暗号化ステータスの確認

ポリシーを適用した後、VM→Summaryタブ→VM Storage Policiesセクションに移動する。“Compliant”と表示されていれば成功だ。

PowerCLIで素早く確認する:

# すべてのVMのコンプライアンスを確認する
Get-VM | Get-SpbmEntityConfiguration | Select-Object Entity, StoragePolicy, ComplianceStatus

# 暗号化済みのVMのみをフィルタリングする
Get-VM | Get-SpbmEntityConfiguration | Where-Object { $_.StoragePolicy.Name -eq "VM-Encryption-Policy" }

暗号化が正常に機能しているかの検証

最も実用的なテスト方法:.vmdkファイルをコピーして直接マウントしてみる——何も読めないはずだ。または、ESXiホストから次のコマンドで暗号化ステータスを確認できる:

# ESXiホストにSSH接続する
# VMの暗号化情報を確認する
vim-cmd vmsvc/get.config <vmid> | grep -i encrypt

# またはvmxファイルから確認する
cat /vmfs/volumes/<datastore>/<vm-folder>/<vm-name>.vmx | grep encryption

モニタリングとアラート

VMが起動しなくなってから慌てても遅い——vCenterでアラームを設定してキーの問題を早期に検出することを忘れないようにしよう:

  • アラーム:”Key Provider not available”——NKPに障害が発生すると、暗号化されたVMが起動できなくなる。
  • vCenter更新後に再エクスポートする:メジャーアップデート後にキーが変更される可能性がある——アップグレードのたびにNKPバックアップファイルを再エクスポートすることを推奨する。
  • vCenter HA:vCenter HAを使用している場合、NKPはノード間で自動的に同期される——追加の作業は不要だ。

本番環境導入前に知っておくべきこと

  • vMotionは暗号化済みVMでも正常に動作する——キーは暗号化されたチャネルを通じてホスト間で安全に転送される。
  • 暗号化済みVMのスナップショットも自動的に暗号化される。
  • コールドマイグレーションで同一vCenter外のホストに移行する場合、キーを手動でエクスポート/インポートする必要がある。
  • パフォーマンス:AES-NI対応の最新CPU上でのAES-256暗号化のオーバーヘッドはほぼ無視できる水準——ほとんどのワークロードで2%未満だ。

PCI-DSS、HIPAA、ISO 27001といったコンプライアンス要件がある環境では、「data at rest encryption」の項目を満たす最もシンプルな方法だ。KMSライセンスの追加購入も、補助サーバーのデプロイも不要だ。個人的に最も気に入っている点は、セットアップから最初のVMの暗号化完了まで約30分しかかからないことだ——かつてHyTrustやThalesを別途デプロイしていた頃と比べると、これは大きな進歩だと言える。

Share: