Hướng dẫn cấu hình Native Key Provider và mã hóa máy ảo (VM Encryption) trên VMware vSphere

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

Tại sao cần mã hóa máy ảo — và tại sao bây giờ?

Có một tình huống mình gặp khá nhiều lần khi làm tư vấn: khách hàng dùng VMware vSphere, datastore để trên SAN, tưởng là an toàn vì có tường lửa bao quanh. Rồi một ngày ổ cứng hỏng, gửi đi bảo hành — và toàn bộ dữ liệu máy ảo nằm trên đó, không mã hóa, không bảo vệ gì cả. Kỹ thuật viên của nhà cung cấp hoàn toàn có thể đọc được file .vmdk nếu muốn.

VM Encryption giải quyết đúng chỗ đau đó. Dữ liệu mã hóa bằng XTS-AES-256 ngay tại tầng hypervisor — trước khi xuống storage. Ai lấy được file .vmdk vật lý mà không có key, cũng chỉ thấy rác.

Trở ngại lớn nhất trước đây là bạn cần một KMS (Key Management Server) bên ngoài — tức là phải mua thêm sản phẩm như HyTrust, Thales, hay IBM SKLM. Tốn kém và phức tạp. Từ vSphere 7.0 Update 2, VMware giới thiệu Native Key Provider — key provider tích hợp sẵn trong vCenter, không cần KMS ngoài nữa. Đây là thứ mình muốn nói đến hôm nay.

Native Key Provider hoạt động như thế nào?

Native Key Provider (NKP) — như tên gọi — tích hợp trực tiếp vào vCenter Server, tự sinh và quản lý key mã hóa. Không cần deploy thêm server nào, không cần license riêng.

Nhưng có mấy điểm cần nắm rõ trước khi bật lên dùng:

  • Key được backup thủ công — bạn cần export và lưu file backup key ra ngoài. Nếu vCenter crash mà không có backup, VM mã hóa sẽ không thể khởi động.
  • NKP chỉ support VM Encryption và vTPM. Cần mã hóa vSAN? Vẫn phải dùng Standard Key Provider (KMS bên ngoài).
  • Yêu cầu tối thiểu: vSphere 7.0 U2 — cả vCenter lẫn ESXi host.

Khi mình migrate sang Proxmox cho lab cá nhân, điều này càng rõ hơn. Proxmox chưa có tính năng tương đương ở tầng hypervisor — muốn encrypt VM thì phải tự xử lý tầng guest OS hoặc dùng LUKS cho storage. VMware làm điều này transparent hơn nhiều, đặc biệt khi quản lý vài chục VM.

Cài đặt Native Key Provider trên vCenter

Toàn bộ thao tác thực hiện qua vSphere Client (Web UI). Không cần SSH hay PowerCLI cho bước này.

Bước 1: Thêm Native Key Provider

  1. Đăng nhập vSphere Client → chọn vCenter Server trong inventory.
  2. Vào tab ConfigureSecurityKey Providers.
  3. Click Add → chọn Add Native Key Provider.
  4. Đặt tên (ví dụ: NKP-Production), click Add Key Provider.

Ngay sau khi tạo, status sẽ hiển thị “Not backed up” — màu vàng cảnh báo. Đừng bỏ qua bước tiếp theo.

Bước 2: Backup Key Provider (BẮT BUỘC)

Bước này quan trọng nhất — và cũng hay bị bỏ qua nhất. Nếu vCenter hỏng mà không có file backup, toàn bộ VM đã mã hóa sẽ không khởi động được. Mất trắng.

  1. Chọn NKP vừa tạo → click Back Up.
  2. Đặt password bảo vệ file backup (nhớ password này — không có cách recover).
  3. Download file .p12 về máy local (file nhỏ, chỉ vài KB, nhưng quan trọng hơn mọi backup khác).
  4. Lưu ở ít nhất 2 nơi khác nhau — USB offline, cloud storage riêng, hoặc két sắt vật lý.

Sau khi backup xong, status chuyển sang “Active” màu xanh lá.

# Kiểm tra NKP status bằng PowerCLI (optional)
Connect-VIServer -Server vcenter.lab.local -User [email protected] -Password 'P@ssw0rd'

# Lấy danh sách key providers
Get-KeyManagementServer

Cấu hình mã hóa máy ảo

Cơ chế của VM Encryption trong vSphere khá thú vị: mọi thứ đi qua VM Storage Policy. Tạo một policy có encryption, áp lên VM — xong. Không cần đụng vào từng VM config.

Tạo VM Encryption Storage Policy

  1. Trong vSphere Client, vào MenuPolicies and ProfilesVM Storage Policies.
  2. Click Create.
  3. Đặt tên policy: VM-Encryption-Policy.
  4. Ở phần Policy structure, bật Enable host based rules.
  5. Tab Host based services → phần Encryption → chọn Use storage policy component.
  6. Chọn component VM Encryption Policy.
  7. Hoàn tất wizard → Review and Finish.

Encrypt máy ảo mới

Khi tạo VM mới, ở bước Customize hardware → chọn VM Storage Policy → chọn VM-Encryption-Policy vừa tạo. Tất cả disk của VM sẽ được mã hóa tự động.

Encrypt máy ảo đang chạy (Encrypt existing VM)

Thao tác này không cần tắt VM — nhưng sẽ có một khoảng downtime ngắn trong lúc reconfigure, thường dưới 30 giây với VM nhỏ.

  1. Chuột phải vào VM → VM PoliciesEdit VM Storage Policies.
  2. Đổi policy sang VM-Encryption-Policy → click Apply to all.
  3. Confirm và chờ task hoàn thành.

Hoặc dùng PowerCLI để batch encrypt nhiều VM cùng lúc — cách này tiết kiệm thời gian hơn nhiều khi có chục VM cần xử lý:

# Kết nối vCenter
Connect-VIServer -Server vcenter.lab.local -User [email protected] -Password 'P@ssw0rd'

# Lấy encryption storage policy
$encPolicy = Get-SpbmStoragePolicy -Name "VM-Encryption-Policy"

# Áp policy cho tất cả VM trong một folder
$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."

Encrypt chỉ một số disk (không phải toàn bộ VM)

Nếu VM có nhiều VMDK và bạn chỉ muốn mã hóa disk chứa data nhạy cảm:

  1. Vào VM Settings → chọn Hard Disk cần mã hóa.
  2. Ở phần VM Storage Policy của disk đó → chọn VM-Encryption-Policy.
  3. Disk còn lại giữ nguyên policy cũ.

Lưu ý thực tế: File .vmx (cấu hình VM) và .nvram cũng bị mã hóa khi bạn encrypt VM — không chỉ riêng .vmdk. Khá nhiều người bỏ sót điều này khi đọc tài liệu.

Kiểm tra & Monitoring

Kiểm tra trạng thái mã hóa của VM

Sau khi áp policy, vào VM → tab Summary → phần VM Storage Policies. Thấy “Compliant” là thành công.

Kiểm tra nhanh bằng PowerCLI:

# Kiểm tra compliance của tất cả VM
Get-VM | Get-SpbmEntityConfiguration | Select-Object Entity, StoragePolicy, ComplianceStatus

# Lọc chỉ những VM đã được mã hóa
Get-VM | Get-SpbmEntityConfiguration | Where-Object { $_.StoragePolicy.Name -eq "VM-Encryption-Policy" }

Verify mã hóa hoạt động đúng

Test thực tế nhất: copy file .vmdk ra ngoài và thử mount trực tiếp — bạn sẽ không đọc được gì. Hoặc dùng lệnh sau từ ESXi host để xem encryption status:

# SSH vào ESXi host
# Xem thông tin encryption của VM
vim-cmd vmsvc/get.config <vmid> | grep -i encrypt

# Hoặc kiểm tra từ vmx file
cat /vmfs/volumes/<datastore>/<vm-folder>/<vm-name>.vmx | grep encryption

Monitoring và Alert

Đừng quên thiết lập alarm trong vCenter để phát hiện sớm vấn đề về key — lúc VM không chịu boot mới cuống thì đã muộn:

  • Alarm: “Key Provider not available” — khi NKP bị lỗi, VM mã hóa sẽ không khởi động được.
  • Re-export sau mỗi lần update vCenter: Key có thể thay đổi sau major update — nên export lại file backup NKP mỗi lần nâng cấp.
  • vCenter HA: Nếu dùng vCenter HA, NKP tự đồng bộ giữa các node — không cần làm gì thêm.

Một vài điểm cần biết trước khi production

  • vMotion vẫn hoạt động bình thường với VM đã encrypt — key được truyền an toàn giữa các host qua encrypted channel.
  • Snapshot của encrypted VM cũng được mã hóa tự động.
  • Cold migration sang host không thuộc cùng vCenter sẽ cần export/import key thủ công.
  • Hiệu năng: overhead mã hóa AES-256 trên CPU hiện đại (có AES-NI) gần như không đáng kể — dưới 2% trong hầu hết workload.

Với môi trường có yêu cầu compliance như PCI-DSS, HIPAA hay ISO 27001, đây là cách đơn giản nhất để tick vào ô “data at rest encryption”. Không cần mua thêm license KMS, không cần deploy server phụ. Điều mình thích nhất: toàn bộ quy trình từ setup đến encrypt xong VM đầu tiên chỉ mất khoảng 30 phút — so với ngày xưa phải deploy HyTrust hay Thales riêng, đây là bước tiến rất lớn.

Share: