Bỏ qua

17.EBS Encryption

image image image

🔒 Hiểu chuẩn quy trình EBS Encryption với KMS – Script thực tế, tổng hợp chi tiết nhất


1. Các khái niệm nền tảng

  • CMK (Customer Master Key): Khóa gốc do KMS quản lý, có thể là AWS managed key hoặc tự tạo. Khóa này không bao giờ rời khỏi KMS.
  • DEK (Data Encryption Key): Khóa con sinh từ CMK, dùng trực tiếp để mã hóa/giải mã block dữ liệu trên EBS volume.
  • Envelope Encryption: Cơ chế AWS kết hợp CMK & DEK:
    • KMS sinh DEK → trả về 2 bản:
      • Plaintext DEK: Dùng ngay cho encrypt/decrypt trên host.
      • Encrypted DEK: Được mã hóa bằng CMK, lưu trong metadata của volume/snapshot.

2. Quy trình chi tiết từng bước

A. Tạo volume mới

  1. EBS gọi KMS để sinh DEK dựa trên CMK chỉ định.
  2. KMS trả về:
    • Plaintext DEK (chỉ lưu trong RAM host EC2/EBS, dùng trực tiếp cho encrypt/decrypt).
    • Encrypted DEK (lưu kèm metadata volume/snapshot, không bao giờ bị lộ ra ngoài).
  3. EBS chỉ giữ plaintext DEK trong RAM host đang attach volume.
  4. Encrypted DEK dùng lại cho các lần attach sau này, hoặc khi tạo snapshot từ volume.

B. Ghi dữ liệu vào EBS volume

  • Ứng dụng/OS gửi data → EC2 host/EBS dùng plaintext DEK để mã hóa block-level trước khi ghi xuống disk.
  • Không cần gọi lại KMS mỗi lần ghi, chỉ dùng plaintext DEK đã sinh.

C. Đọc dữ liệu từ EBS volume

  • EC2 host/EBS lấy block đã mã hóa từ disk.
  • Plaintext DEK dùng để giải mã ngay trên host, trả dữ liệu cho app/OS.
  • Không cần gọi lại KMS mỗi lần đọc.

D. Reboot/attach volume sang host khác

  • Nếu host không còn plaintext DEK trong RAM:
    1. EBS lấy encrypted DEK từ metadata volume.
    2. Gửi encrypted DEK lên KMS để nhờ giải mã bằng CMK.
    3. KMS trả về plaintext DEK mới cho host đó.
    4. Host giữ plaintext DEK trong RAM để tiếp tục encrypt/decrypt.

3. Quy trình snapshot và tạo volume mới từ snapshot

  • Snapshot từ volume encrypted:
    • Lưu encrypted DEK của volume gốc kèm snapshot.
  • Tạo volume mới từ snapshot:
    • DEK của snapshot được dùng lại cho volume mới (volume mới vẫn được mã hóa bằng DEK đó).
    • Chỉ sinh DEK mới khi tạo volume mới hoàn toàn (không từ snapshot).

4. Đặc điểm bảo mật & vận hành

  • Plaintext DEK chỉ tồn tại trong RAM trên host EC2/EBS, không ghi ra disk.
  • Encrypted DEK luôn lưu cùng metadata volume/snapshot, dùng lại khi cần.
  • CMK không bao giờ rời khỏi KMS.
  • KMS chỉ bị gọi khi tạo volume hoặc cần giải mã lại DEK (attach, reboot), KHÔNG mỗi lần IO (đọc/ghi).
  • Mọi dữ liệu lưu trên EBS disk hoặc snapshot đều là encrypted-at-rest bằng DEK (không lộ plaintext ra ngoài host).
  • OS/app chỉ nhìn thấy plain text, không biết phía dưới đang mã hóa.
  • Không thể “gỡ mã hóa”/un-encrypt volume/snapshot trực tiếp, chỉ có thể copy data sang volume mới không mã hóa (OS-level).

5. Sơ đồ flowchart minh họa tổng thể

flowchart TD
    A[Tạo Volume] --> B{KMS sinh DEK}
    B --> C[DEK plaintext (RAM host)]
    B --> D[DEK encrypted (metadata volume/snapshot)]
    C --> E[Ghi/đọc data: dùng DEK plaintext RAM]
    D --> F{Reboot/attach host mới?}
    F -->|Có| G[Lấy encrypted DEK, gọi KMS để giải mã]
    G --> C
    F -->|Không| E
    D --> H[Tạo snapshot]
    H --> I[Snapshot lưu encrypted DEK]
    I --> J[Tạo volume mới từ snapshot dùng lại DEK snapshot]

6. Các mẹo exam, phỏng vấn, thực tế

  • DEK plaintext chỉ tồn tại trong RAM host EC2/EBS, không ghi ra disk.
  • Encrypted DEK lưu kèm metadata volume/snapshot, dùng lại khi attach/reboot.
  • CMK luôn ở trong KMS, không lộ ra ngoài.
  • KMS chỉ được gọi khi tạo volume hoặc cần giải mã lại DEK, không mỗi IO.
  • Snapshot/volume mới từ snapshot dùng lại encrypted DEK gốc, không sinh DEK mới.
  • Muốn “gỡ mã hóa” phải copy data ra volume mới không encrypted (OS-level).
  • Không có phí thêm, không giảm hiệu năng khi dùng EBS encryption.

7. Script thao tác thực tế (AWS CLI)

# Tạo volume encrypted với CMK cụ thể
aws ec2 create-volume --size 10 --region us-east-1 --availability-zone us-east-1a --volume-type gp3 --encrypted --kms-key-id <your-kms-key-id>

# Tạo snapshot từ volume encrypted
aws ec2 create-snapshot --volume-id <volume-id> --description "Encrypted backup"

# Tạo volume mới từ snapshot encrypted (volume sẽ luôn encrypted)
aws ec2 create-volume --snapshot-id <snapshot-id> --availability-zone us-east-1a --volume-type gp3

# Kiểm tra trạng thái encryption của volume
aws ec2 describe-volumes --volume-ids <volume-id> --query "Volumes[*].Encrypted"

8. Tổng kết dễ nhớ

  • EBS encryption = envelope encryption với KMS, DEK plaintext chỉ RAM, encrypted DEK lưu metadata, CMK luôn nằm ở KMS.
  • Chỉ cần KMS khi tạo volume hoặc attach/reboot, không mỗi lần IO.
  • Snapshot và volume mới từ snapshot dùng lại DEK gốc.
  • Không thể “un-encrypt” trực tiếp, chỉ copy data ra volume mới (OS-level).