KMS (Key Management Service)

5 phút đọcSeries: NoteBook: AWS Certified Solutions Architect Associate SAA-C031 lượt xem

AWS KMS (Key Management Service)

  • Bất cứ khi nào bạn nghe thấy từ “encryption” (mã hoá) trong một dịch vụ AWS, thì rất có thể nó đang sử dụng KMS.
  • AWS quản lý encryption keys (khóa mã hóa) cho chúng ta.
  • Tích hợp hoàn toàn với IAM để phân quyền truy cập (authorization).
  • Cung cấp một cách đơn giản để kiểm soát truy cập đến dữ liệu của bạn.
  • Có thể audit việc sử dụng KMS Key thông qua CloudTrail.
  • Tích hợp mượt mà vào hầu hết các dịch vụ AWS (như EBS, S3, RDS, SSM…).
  • Không bao giờ lưu trữ secret dưới dạng plaintext, đặc biệt là trong source code!
    • KMS Key Encryption cũng có thể được sử dụng thông qua API (SDK, CLI).
    • Các encrypted secret có thể được lưu trong code hoặc biến môi trường (environment variables).

Các loại KMS Keys

KMS Key là tên gọi mới thay thế cho KMS Customer Master Key (CMK).

Symmetric (khóa đối xứng – AES-256)

  • Sử dụng một khóa duy nhất để thực hiện cả Encrypt và Decrypt.
  • Các dịch vụ AWS khi tích hợp với KMS thường sử dụng Symmetric CMKs.
  • Bạn không bao giờ truy cập trực tiếp được khóa này ở dạng raw/plaintext, mà bắt buộc phải gọi thông qua KMS API để sử dụng.

Asymmetric (khóa bất đối xứng – RSA & ECC key pairs)

  • Gồm một cặp Public Key (dùng để Encrypt) và Private Key (dùng để Decrypt).
  • Dùng cho cả mục đích Encrypt/Decrypt hoặc Sign/Verify.
  • Public Key có thể tải xuống, nhưng Private Key không thể truy cập ở dạng raw/plaintext.
  • Use case điển hình: dùng để mã hóa dữ liệu ngoài AWS, ví dụ như bên phía client, nơi không thể trực tiếp gọi KMS API.

Các loại KMS Key:

  • AWS Owned Keys (miễn phí):
    → Được dùng mặc định cho các dịch vụ như SSE-S3, SSE-SQS, SSE-DDB.
  • AWS Managed Key (miễn phí):
    → Dạng khóa do AWS quản lý nhưng theo từng service cụ thể, có alias như aws/rds hoặc aws/ebs.
  • Customer Managed Keys (CMK – bạn tự tạo):
    • Khóa bạn tự tạo trong KMS: $1 / tháng mỗi key.
    • Khóa bạn import từ hệ thống ngoài vào KMS: $1 / tháng mỗi key.
  • Chi phí khi gọi API đến KMS:
    → $0.03 / 10.000 lần gọi
  • Cơ chế Key Rotation
    • AWS-managed KMS Key:
      → Tự động xoay vòng mỗi 1 năm.
    • Customer-managed KMS Key:
      → Có thể thiết lập tự động hoặc theo yêu cầu (phải enable thủ công).
    • Imported KMS Key (khóa bạn tự import):
      → Chỉ có thể xoay vòng thủ công, thông qua alias (bí danh).

Copying Snapshots Across Regions

  • Region eu-west-2
    • EBS Volume được mã hóa bằng KMS (Khóa A).
    • Snapshot EBS được tạo từ volume này cũng được mã hóa bằng KMS Key A.
  • Region ap-southeast-2
    • Snapshot được copy sang region mới, nhưng khi tới đây, nó sẽ được re-encrypt lại bằng KMS Key B (của region đích).
    • EBS Volume được tạo lại từ snapshot cũng sẽ sử dụng KMS Key B để mã hóa.
  • Ghi chú bên dưới sơ đồ:
    → KMS ReEncrypt with KMS Key B – tức là quá trình chuyển snapshot giữa regions bao gồm bước decrypt bằng key cũ và encrypt lại bằng key mới (KMS Key B).

KMS Key Policies

  • Kiểm soát quyền truy cập tới các KMS key, tương tự như S3 bucket policy
  • Khác biệt quan trọng: bạn không thể kiểm soát quyền truy cập nếu không có key policy
  • Default KMS Key Policy (Chính sách mặc định của KMS key)
    • Được tạo ra nếu bạn không cung cấp key policy cụ thể
    • Toàn quyền truy cập key sẽ thuộc về root user, tức là toàn bộ AWS account
  • Custom KMS Key Policy (Chính sách do người dùng định nghĩa)
    • Cho phép bạn chỉ định user hoặc IAM role nào được phép truy cập key
    • Xác định rõ ai có quyền quản trị (admin) key
    • Hữu ích trong các trường hợp truy cập cross-account (giữa các AWS account khác nhau)

Copying Snapshots across accounts

  • Tạo một snapshot, được mã hóa bởi KMS Key riêng của bạn (Customer Managed Key)
  • Gắn KMS Key Policy để cho phép truy cập cross-account
  • Chia sẻ snapshot đã được mã hóa
  • (Ở tài khoản đích) Tạo bản sao của snapshot, mã hóa nó bằng CMK (Customer Master Key) trong tài khoản đích
  • Tạo một volume từ snapshot đó

KMS Multi-Region Keys

  • Các khóa KMS giống hệt nhau được triển khai ở các AWS Region khác nhau và có thể dùng thay thế lẫn nhau.
  • Khóa đa vùng (Multi-Region key) có cùng key ID, cùng key material và hỗ trợ tự động xoay vòng (automatic rotation)...
  • Có thể mã hóa (encrypt) ở một Region và giải mã (decrypt) ở Region khác.
  • Không cần mã hóa lại hay gọi API xuyên vùng (cross-Region API).
  • KMS Multi-Region không phải là global key – mà là mô hình Primary + Replica(s).
  • Mỗi khóa Multi-Region đều được quản lý một cách độc lập.
  • Use cases (tình huống sử dụng):
  • Mã hóa phía client toàn cầu (global client-side encryption)
  • Mã hóa dữ liệu trên các dịch vụ như Global DynamoDB, Global Aurora.

Lưu ý về S3 Replication Encryption

  • Unencrypted objects và objects được encrypt bằng SSE-S3 (Server-Side Encryption with Amazon S3-managed keys) sẽ được replication theo mặc định.
  • Objects được encrypt bằng SSE-C (Server-Side Encryption with Customer-provided keys) vẫn có thể replication.
  • Đối với objects được encrypt bằng SSE-KMS (Server-Side Encryption with AWS KMS keys), bạn cần bật tùy chọn:
    • Chỉ định rõ KMS Key để encrypt các objects trong target bucket.
    • Điều chỉnh KMS Key Policy cho phù hợp với target key.
    • IAM Role cần có quyền kms:Decrypt với source KMS Key và kms:Encrypt với target KMS Key.
    • Có thể gặp lỗi KMS throttling, lúc này bạn có thể yêu cầu tăng hạn mức qua Service Quotas.
  • Vấn đề với Multi-Region Key:
    • Mặc dù Multi-Region KMS Key có cùng key material, Amazon S3 vẫn xem chúng là 2 key khác nhau khi replication diễn ra.
    • Vì vậy, S3 sẽ giải mã (decrypt) dữ liệu ở region nguồn và mã hóa lại (encrypt) bằng key ở region đích, thay vì sử dụng shared key material như bạn mong đợi.
Bạn thấy bài này thế nào?