Product Management
Đăng nhập
ESC

Nhập từ khóa để tìm kiếm

↑↓ Di chuyển
Enter Mở
ESC Đóng

Bài 50 — Cloud Security Basics

Đã đọc 0/14 mục · còn khoảng 11 phút
Cách chúng tôi ghi nhận

Một mục được tính là đã đọc khi nó nằm giữa màn hình đủ lâu so với độ dài của nó (bảng và sơ đồ tính một nửa), bạn vẫn đang cuộn hoặc bấm phím, và bạn đã thấy tới cuối mục. Lướt nhanh hoặc để tab mở không được tính. Chúng tôi chỉ lưu thời gian đọc từng mục — không lưu gì khác.

Mở đầu — vì sao bài này quan trọng

Khi bạn đưa hệ thống lên cloud, có một hiểu lầm rất phổ biến mà tôi gặp ở gần như mọi đội kỹ thuật mới bắt đầu: "Dùng AWS/GCP/Azure rồi thì họ lo bảo mật hết cho mình." Đây là một trong những suy nghĩ nguy hiểm nhất trong nghề DevOps. Sự thật là nhà cung cấp cloud chỉ chịu trách nhiệm cho một nửa câu chuyện — nửa còn lại, phần thường gây ra sự cố rò rỉ dữ liệu, hoàn toàn nằm trong tay bạn.

Trong bài này, chúng ta sẽ đi vào nền tảng an toàn cho cloud (cloud security basics). Đây là bài học "xương sống" cho cả khối bảo mật của khóa: bạn sẽ hiểu ranh giới trách nhiệm giữa bạn và nhà cung cấp, những trụ cột cơ bản để bảo vệ một hệ thống cloud, và cách tư duy phòng thủ theo lớp. Các bài sau (Network Security, Encryption, IAM, Secrets Management) sẽ đào sâu từng mảng; bài này giúp bạn có bức tranh tổng thể để không bao giờ bỏ sót một góc nào.

Lý do bài này quan trọng đến vậy rất thực tế: phần lớn các vụ lộ dữ liệu trên cloud không phải do hacker "siêu đẳng" bẻ khóa hệ thống của Amazon, mà do một bucket S3 bị cấu hình công khai, một cụm database mở port ra Internet, hay một access key bị commit nhầm lên GitHub. Nói cách khác, đó là những lỗi cấu hình cơ bản — và đó chính xác là phần trách nhiệm của bạn.

Khái niệm cốt lõi

Mô hình trách nhiệm chia sẻ (Shared Responsibility Model)

Đây là khái niệm nền tảng nhất bạn phải thuộc lòng. Mọi nhà cung cấp cloud lớn đều dùng chung một triết lý: bảo mật của cloud là việc của họ, còn bảo mật trong cloud là việc của bạn.

Phần nhà cung cấp lo:

  • An ninh vật lý: trung tâm dữ liệu, kiểm soát ra vào, camera, phòng cháy, nguồn điện dự phòng.
  • Hạ tầng phần cứng và hypervisor: máy chủ vật lý, lớp ảo hóa cách ly giữa các khách hàng.
  • Vá lỗi các dịch vụ được quản lý (managed service): ví dụ khi bạn dùng RDS, họ vá hệ điều hành và engine database; khi bạn dùng Lambda, họ lo toàn bộ runtime bên dưới.
Phần bạn lo:

  • Dữ liệu: phân loại, mã hóa, sao lưu, quyết định ai được truy cập.
  • IAM (quản lý danh tính và quyền truy cập): ai đăng nhập được, làm được gì.
  • Cấu hình mạng: security group, firewall, có mở port ra Internet hay không.
  • Bảo mật hệ điều hành và ứng dụng khi bạn tự quản (ví dụ EC2 tự cài): vá OS, vá thư viện, cấu hình dịch vụ.
Một điểm tinh tế: ranh giới này dịch chuyển tùy theo loại dịch vụ. Với IaaS (như EC2), bạn phải lo nhiều nhất — tự vá OS, tự cấu hình. Với PaaS/managed service (như RDS, App Engine), nhà cung cấp lo thêm phần OS và engine. Với SaaS thì bạn gần như chỉ lo dữ liệu và quyền người dùng. Càng dùng dịch vụ được quản lý sâu, phần trách nhiệm của bạn càng nhỏ — nhưng không bao giờ về 0, vì dữ liệu và quyền truy cập luôn là của bạn.

Nguyên tắc đặc quyền tối thiểu (Least Privilege)

Đây là kim chỉ nam của mọi thiết kế bảo mật cloud: mỗi người, mỗi dịch vụ, mỗi ứng dụng chỉ được cấp đúng những quyền tối thiểu cần thiết để làm việc, không thừa một chút nào. Một hàm Lambda chỉ cần đọc từ một bucket thì đừng cấp quyền s3:* cho toàn bộ tài khoản. Một nhân viên phân tích chỉ cần xem báo cáo thì đừng cho quyền admin.

Least privilege giới hạn "bán kính vụ nổ" (blast radius): nếu một credential bị lộ, kẻ tấn công chỉ làm được đúng những gì credential đó cho phép, thay vì chiếm trọn hệ thống.

Phòng thủ theo lớp (Defense in Depth)

Đừng bao giờ đặt cược vào một lớp bảo vệ duy nhất. Hãy hình dung nhiều vòng thành: nếu tường ngoài thủng, vẫn còn tường trong. Trên cloud, các lớp điển hình gồm:

  • Lớp mạng: VPC, subnet riêng tư, security group, WAF chặn tấn công web.
  • Lớp danh tính: IAM, bật xác thực đa yếu tố (MFA), phân quyền chặt.
  • Lớp dữ liệu: mã hóa khi lưu (at-rest) và khi truyền (in-transit).
  • Lớp giám sát: log, cảnh báo, phát hiện bất thường để phản ứng kịp.
Mỗi lớp không hoàn hảo, nhưng cộng lại chúng khiến việc tấn công tốn công gấp nhiều lần.

Bốn trụ cột thực hành

Để dễ nhớ, tôi thường gói gọn nền tảng an toàn cloud vào bốn trụ cột: Identity (ai được vào), Network (đi qua đường nào), Data (dữ liệu được bảo vệ ra sao), Detection (làm sao biết khi có chuyện). Mọi biện pháp cụ thể — MFA, security group, mã hóa, CloudTrail — đều rơi vào một trong bốn nhóm này.

Tình huống thực tế

Tình huống 1: Bucket S3 công khai của một startup fintech tại TP.HCM

Một startup ví điện tử ở Việt Nam lưu ảnh CCCD và giấy tờ định danh của khách hàng trên một bucket S3 để phục vụ eKYC. Trong lúc phát triển nhanh, một kỹ sư đặt bucket ở chế độ public để "test cho tiện", rồi quên chuyển lại. Khoảng 40.000 file ảnh giấy tờ tùy thân nằm phơi ra Internet trong nhiều tuần, ai có đường link đều tải được.

Diễn giải: Đây thuần túy là lỗi thuộc phần trách nhiệm của khách hàng trong Shared Responsibility Model. AWS đảm bảo hạ tầng S3 an toàn tuyệt đối, nhưng cấu hình quyền truy cập bucket là việc của startup. Không có hacker nào bị "hack" ở đây cả — chỉ là một switch cấu hình sai.

Bài học rút ra: Luôn bật "Block Public Access" ở cấp tài khoản để chặn mọi bucket công khai theo mặc định, và chỉ mở ngoại lệ có kiểm soát. Với dữ liệu định danh cá nhân (thuộc phạm vi Nghị định 13/2023 về bảo vệ dữ liệu cá nhân của Việt Nam), rò rỉ như vậy có thể dẫn tới phạt hành chính và mất niềm tin không thể cứu vãn.

Tình huống 2: Access key bị commit lên GitHub tại một công ty gia công phần mềm

Một công ty outsourcing ở Đà Nẵng với khoảng 150 kỹ sư có một lập trình viên vô tình commit file chứa AWS_ACCESS_KEY_ID và AWS_SECRET_ACCESS_KEY lên repo GitHub public. Các bot dò quét key tự động tìm thấy trong vòng chưa đầy 10 phút. Kẻ tấn công dùng key này khởi tạo hàng chục instance EC2 loại lớn để đào tiền mã hóa. Hóa đơn AWS tháng đó nhảy vọt từ khoảng 800 USD lên hơn 22.000 USD chỉ sau 3 ngày.

Diễn giải: Credential tĩnh (long-lived key) là một trong những rủi ro lớn nhất. Vì key không tự hết hạn, nó cứ nằm đó chờ bị lộ. Đây vừa là lỗi least privilege (key có quyền quá rộng, tạo được EC2), vừa là lỗi quản lý bí mật.

Bài học rút ra: Hạn chế tối đa access key tĩnh — hãy dùng IAM Role và credential tạm thời (STS) cho ứng dụng chạy trên cloud. Bật cảnh báo ngân sách (billing alert) để phát hiện chi phí bất thường sớm. Cài công cụ quét bí mật (như git-secrets, gitleaks) trong pipeline để chặn commit lộ key ngay từ đầu. May mắn là AWS thường tự phát hiện key public và gửi cảnh báo, nhưng bạn không nên phụ thuộc vào đó.

Tình huống 3: Cụm database mở port ra Internet của một sàn thương mại điện tử

Một sàn TMĐT tầm trung ở khu vực Đông Nam Á triển khai một database MongoDB tự quản trên VM cloud để chạy nhanh cho kịp mùa sale. Để "kết nối cho dễ", đội vận hành mở security group cho phép truy cập cổng 27017 từ 0.0.0.0/0 (mọi địa chỉ Internet) và không đặt mật khẩu mạnh. Chỉ vài ngày sau, database bị quét, dữ liệu bị xóa và để lại thư đòi tiền chuộc Bitcoin.

Diễn giải: Vi phạm cùng lúc nhiều lớp phòng thủ — lớp mạng (mở port bừa bãi) và lớp danh tính (không xác thực chặt). Đây là kiểu tấn công "ransom database" tự động, không nhắm vào riêng ai, chỉ đơn giản quét toàn Internet tìm database hớ hênh.

Bài học rút ra: Database không bao giờ nên phơi trực tiếp ra Internet. Đặt nó trong subnet riêng tư (private subnet), chỉ cho phép truy cập từ dải IP nội bộ của ứng dụng qua security group, và luôn bật xác thực mạnh. Nguyên tắc defense in depth ở đây rất rõ: dù có ai đoán được mật khẩu, họ cũng không tới được database nếu lớp mạng đã chặn.

Hướng dẫn từng bước

Dưới đây là quy trình thiết lập nền tảng an toàn cho một tài khoản cloud mới, áp dụng được cho AWS/GCP/Azure với tên gọi tương đương:

  • Khóa tài khoản gốc (root account): Bật MFA cho tài khoản root, tạo mật khẩu mạnh, và không dùng root cho công việc hằng ngày. Root chỉ dùng cho vài thao tác cực hiếm.
  • Tạo người dùng và vai trò theo least privilege: Không ai dùng chung tài khoản. Tạo IAM user/role riêng, gán quyền theo nhóm công việc. Bắt đầu từ quyền hẹp, mở rộng khi thật sự cần.
  • Bật MFA cho mọi tài khoản có quyền quan trọng: Xác thực đa yếu tố là biện pháp rẻ nhất nhưng hiệu quả nhất chống chiếm tài khoản.
  • Ưu tiên credential tạm thời: Cho ứng dụng chạy trên cloud, dùng IAM Role gắn vào tài nguyên (instance profile, workload identity) thay vì nhúng access key tĩnh vào code.
  • Thiết kế mạng an toàn từ đầu: Đặt tài nguyên không cần lộ ra ngoài (database, cache, backend) vào private subnet. Cấu hình security group theo nguyên tắc "chặn tất, chỉ mở đúng cái cần".
  • Bật mã hóa mặc định: Bật mã hóa at-rest cho storage và database (thường chỉ là một tùy chọn tick chọn), và bắt buộc HTTPS/TLS cho mọi kết nối.
  • Chặn công khai storage theo mặc định: Bật "Block Public Access" cho object storage ở cấp tài khoản.
  • Bật logging và giám sát: Bật audit log (CloudTrail / Cloud Audit Logs / Azure Activity Log) để ghi lại mọi hành động. Đặt cảnh báo cho các sự kiện nhạy cảm và cho chi phí bất thường.
  • Rà soát định kỳ: Dùng công cụ đánh giá tư thế bảo mật (như AWS Security Hub, GCP Security Command Center) để phát hiện cấu hình sai và quét lại quyền hạn hằng quý.

Lỗi thường gặp & mẹo

  • Nhầm rằng "dùng cloud là an toàn": Đây là hiểu lầm nền tảng. Hãy luôn tự hỏi "phần này thuộc trách nhiệm của tôi hay của nhà cung cấp?" trước mỗi quyết định.
  • Cấp quyền quá rộng cho tiện: Gán : hay AdministratorAccess cho mọi thứ vì "để khỏi lỗi permission". Đây là cách nhanh nhất biến một sự cố nhỏ thành thảm họa. Hãy kiên nhẫn cấp quyền hẹp.
  • Dùng access key tĩnh khắp nơi: Key không hết hạn là quả bom hẹn giờ. Ưu tiên role và credential tạm thời.
  • Mở 0.0.0.0/0 cho port quản trị: SSH (22), RDP (3389), port database không bao giờ nên mở ra toàn Internet. Dùng bastion host, VPN, hoặc dịch vụ truy cập có kiểm soát.
  • Quên bật MFA: Một mật khẩu bị lộ mà có MFA thì kẻ tấn công vẫn bị chặn.
  • Không bật log, đến khi có sự cố mới hối hận: Không có audit log thì bạn không thể điều tra chuyện gì đã xảy ra. Bật log ngay từ ngày đầu.
  • Mẹo — tư duy "an toàn theo mặc định" (secure by default): Thiết lập môi trường sao cho lựa chọn dễ nhất cũng là lựa chọn an toàn nhất. Chặn public mặc định, mã hóa mặc định, quyền hẹp mặc định — người dùng phải chủ động xin thêm quyền, thay vì phải nhớ đi khóa lại.
  • Mẹo — dùng Infrastructure as Code: Định nghĩa hạ tầng bằng Terraform giúp cấu hình bảo mật nhất quán, review được qua code, và tránh những "click nhầm" trên giao diện web.

Bài tập thực hành

  • Vẽ bảng trách nhiệm: Với ba tình huống — (a) chạy website trên EC2 tự cài Nginx, (b) dùng RDS làm database, (c) dùng dịch vụ gửi email SaaS — hãy liệt kê phần nào nhà cung cấp lo, phần nào bạn lo. So sánh sự dịch chuyển ranh giới giữa ba loại.
  • Rà soát một tài khoản cloud thật (hoặc free tier): Tạo tài khoản AWS/GCP miễn phí. Kiểm tra: root đã bật MFA chưa? Có bucket nào public không? Có access key tĩnh nào không cần thiết không? Ghi lại và khắc phục từng điểm.
  • Thiết kế theo least privilege: Viết mô tả (bằng lời, hoặc IAM policy JSON) cho một hàm serverless chỉ cần đọc từ một bucket cụ thể và ghi log. Cố gắng làm policy hẹp nhất có thể.
  • Phân tích sự cố: Đọc lại Tình huống 2 (lộ access key). Liệt kê 4 biện pháp phòng ngừa ở 4 lớp khác nhau (danh tính, phát hiện, quy trình, công cụ) để sự cố này không xảy ra hoặc được chặn sớm.

Tóm tắt

Nền tảng an toàn cloud không bắt đầu từ những công cụ phức tạp, mà từ tư duy đúng. Điều quan trọng nhất cần nhớ: Shared Responsibility Model — nhà cung cấp lo hạ tầng, bạn lo dữ liệu, danh tính và cấu hình; và ranh giới này dịch chuyển tùy loại dịch vụ nhưng phần dữ liệu luôn là của bạn. Trên nền đó, ba nguyên tắc dẫn đường là least privilege (chỉ cấp quyền tối thiểu), defense in depth (nhiều lớp phòng thủ), và secure by default (an toàn là lựa chọn mặc định).

Bốn trụ cột thực hành — Identity, Network, Data, Detection — cho bạn danh mục để không bỏ sót góc nào. Và như ba tình huống thực tế cho thấy, đa số sự cố lớn đều bắt nguồn từ lỗi cấu hình cơ bản: bucket công khai, key tĩnh bị lộ, database mở ra Internet. Làm chủ những điều cơ bản này đã giúp bạn tránh được phần lớn rủi ro. Các bài tiếp theo sẽ đào sâu từng lớp — nhưng bức tranh tổng thể bạn vừa nắm chính là la bàn để đi tiếp.

Học xong bài này rồi? Tạo tài khoản miễn phí để lưu lại — lần sau vào là biết ngay đang dở ở đâu, và học hết khóa thì có chứng chỉ. Lưu tiến độ của tôi