0

Amazon Aurora MySQL Bài 35: Bảo mật dữ liệu tầng lưu trữ và mã hóa trong quá trình truyền tải (Encryption at Rest & in Transit)

Trong bối cảnh các tiêu chuẩn bảo mật doanh nghiệp (như PCI-DSS, ISO 27001, GDPR) ngày càng khắt khe, việc bảo vệ dữ liệu khỏi các mối đe dọa rò rỉ (cả khi dữ liệu nằm bất động trên ổ đĩa lẫn khi đang truyền tải qua mạng) là yêu cầu tối quan trọng đối với bất kỳ hệ thống Backend Production nào.

Bài viết này sẽ mổ xẻ cơ chế mã hóa toàn diện trên Amazon Aurora MySQL.

1. Mã hóa dữ liệu lưu trữ (Encryption at Rest)

Mã hóa ở trạng thái nghỉ bảo vệ toàn bộ dữ liệu vật lý khỏi việc bị đánh cắp trực tiếp từ các thiết bị lưu trữ phần cứng.

  • Hoạt động như thế nào trong Aurora?

    • Aurora mã hóa toàn bộ tập dữ liệu, các tệp log (redo logs), bản sao lưu (snapshots), và các tệp tạm (temporary files) nằm trong Aurora Storage Volume.

    • Quá trình mã hóa sử dụng chuẩn mã hóa tiêu chuẩn quân sự AES-256.

  • Tích hợp AWS KMS (Key Management Service):

    • Bạn có thể sử dụng khóa mặc định do AWS quản lý (aws/rds) hoặc tạo và kiểm soát khóa mã hóa riêng của doanh nghiệp thông qua AWS KMS (Customer Managed Keys - CMK). Việc này cho phép bạn chủ động thu hồi quyền truy cập hoặc vô hiệu hóa khóa bất cứ lúc nào nếu phát hiện sự cố bảo mật.
  • Ảnh hưởng đến hiệu năng: Quá trình mã hóa và giải mã được xử lý bằng phần cứng chuyên dụng nằm ngay tại tầng lưu trữ phân tán, gần như không gây ra bất kỳ độ trễ hay sụt giảm hiệu năng tính toán nào đối với Writer/Reader instance.

2. Mã hóa dữ liệu truyền tải (Encryption in Transit)

Mã hóa khi đang truyền tải bảo vệ dữ liệu chống lại các cuộc tấn công nghe lén trên đường truyền mạng (Man-in-the-Middle attacks) giữa ứng dụng backend và cơ sở dữ liệu.

  • Kết nối bảo mật qua TLS/SSL:

    • Aurora MySQL hỗ trợ bắt buộc sử dụng Transport Layer Security (TLS) phiên bản 1.2 hoặc 1.3.

    • Khi ứng dụng backend (Go, PHP, Node.js) kết nối vào Aurora, cấu hình chuỗi kết nối (DSN) cần được bật cờ xác thực SSL/TLS kèm theo chứng chỉ số công khai của AWS (AWS RDS Root CA).

  • Cấu hình bắt buộc TLS trên Aurora:

    • Bạn có thể cấu hình tham số require_secure_transport = ON trong Parameter Group để từ chối mọi kết nối thuần túy không mã hóa từ bên ngoài, ép buộc 100% các client phải đi qua kênh truyền an toàn.

3. Cấu hình Encryption trong Terraform

Trong hạ tầng chuẩn Enterprise, việc bật mã hóa được khai báo trực tiếp khi khởi tạo cụm Aurora:

Terraform

resource "aws_rds_cluster" "secure_aurora_cluster" {
  cluster_identifier     - "hieu-secure-aurora-cluster"
  engine                 - "aurora-mysql"
  engine_version         - "8.0.mysql_aurora.3.04.2"
  database_name          - "hieu_secure_db"
  master_username        - "admin_hieu"
  master_password        - "SuperSecuredPassword123!"
  
  # Bật mã hóa Encryption at Rest
  storage_encrypted      - true
  kms_key_id             - aws_kms_key.rds_custom_key.arn # Sử dụng khóa KMS riêng

  skip_final_snapshot    - true
}

4. Góc nhìn vận hành cho Backend Engineer

  • Lưu ý khi cấu hình Database Driver ở Backend: Khi bật TLS trên Aurora, đảm bảo bạn đã tải và tích hợp tệp chứng chỉ gốc (Global Root CA) của AWS vào mã nguồn ứng dụng (ví dụ trong Go hoặc Node.js). Nếu thiếu chứng chỉ này, ứng dụng sẽ gặp lỗi certificate signed by unknown authority và không thể kết nối được vào database.

  • Không thể bật ngược lại: Hãy nhớ rằng cấu hình storage_encrypted = true phải được bật ngay tại thời điểm khởi tạo tạo mới cụm Aurora. Bạn không thể chuyển đổi một cụm database không mã hóa thành mã hóa trực tiếp mà phải thông qua bước tạo snapshot rồi restore lại với bật mã hóa.


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí