Kiến trúc hệ thống Bảo mật DevOps

Docker Security: 8 Quy tắc vàng bảo vệ Container trong Production

Thứ hai, 31 Th08 2026 7 phút đọc 16 lượt xem

Docker Security: 8 Quy tắc vàng bảo vệ Container trong Production

Trong quá trình phát triển ứng dụng, Docker giúp đơn giản hóa việc đóng gói và triển khai. Tuy nhiên, nếu đưa Docker Container lên môi trường Production mà thiếu đi các cấu hình bảo mật, hệ thống của bạn có thể trở thành mục tiêu tấn công dễ dàng.

Trong bài viết này, chúng ta sẽ tìm hiểu 8 quy tắc quan trọng giúp tăng cường bảo mật cho Docker Container và bảo vệ dữ liệu trên môi trường Production.

1. Không chạy Container bằng quyền Root

Mặc định, Docker sẽ chạy container dưới quyền root nếu bạn không khai báo user cụ thể. Nếu hacker chiếm được quyền kiểm soát ứng dụng bên trong container, họ có thể khai thác lỗ hổng để chiếm quyền root của máy chủ (Host).

Cách khắc phục trong Dockerfile:

FROM node:24-alpine WORKDIR /app COPY . . RUN addgroup -S appgroup && adduser -S appuser -G appgroup USER appuser CMD ["node", "server.js"]

Việc giới hạn quyền hạn giúp giảm thiểu rủi ro khi container bị tấn công.

2. Quét lỗ hổng bảo mật Image

Các Base Image trên Docker Hub có thể chứa các package cũ mang lỗ hổng bảo mật (CVE) đã được công bố.

Để khắc phục, bạn nên quét Image trước khi push lên Registry:

trivy image my-app:latest

Ngoài Trivy, bạn cũng có thể sử dụng các công cụ khác như Grype hoặc Docker Scout để chủ động phát hiện lỗ hổng.

3. Chỉ sử dụng Trusted Base Image

Việc tải và sử dụng các Base Image không rõ nguồn gốc trên Docker Hub tiềm ẩn nguy cơ chứa mã độc hoặc bị chèn sẵn backdoor.

Giải pháp:

  • Chỉ chọn các Official Image hoặc nhà cung cấp đã được xác thực (Verified Publisher).
  • Ưu tiên các Image tối giản như alpine, distroless hoặc các phiên bản slim để giảm bề mặt ứng dụng bị tấn công (attack surface).

4. Quản lý Secret an toàn

Tuyệt đối không hardcode thông tin nhạy cảm như Database Password, API Key vào Dockerfile hoặc file .env rồi push lên Git repository.

Thay vì sử dụng lệnh ENV để lưu thông tin nhạy cảm trong Image, bạn nên áp dụng các giải pháp quản lý Secret chuyên dụng:

  • Sử dụng Docker Secrets hoặc Kubernetes Secrets.
  • Sử dụng công cụ quản lý tập trung như HashiCorp Vault hoặc AWS Secrets Manager.

5. Giới hạn tài nguyên hệ thống (Resource Limits)

Một container bị lỗi vô hạn lặp hoặc bị tấn công DDoS có thể chiếm dụng toàn bộ CPU và RAM của máy chủ, làm sập các dịch vụ khác xung quanh.

Bạn có thể giới hạn tài nguyên khi chạy lệnh docker run:

docker run -d --memory="512m" --cpus="1.5" my-app:latest

Hoặc cấu hình trực tiếp trong file docker-compose.yml:

services: web: image: my-app:latest deploy: resources: limits: cpus: '1.5' memory: 512M

6. Đặt hệ thống file ở chế độ Read-Only

Hầu hết các container ứng dụng không cần ghi dữ liệu trực tiếp vào hệ thống file nội bộ ngoại trừ các thư mục lưu file tạm hoặc log.

Khởi chạy container ở chế độ chỉ đọc giúp chặn kẻ tấn công ghi đè mã độc vào hệ thống file:

docker run -d --read-only --tmpfs /tmp my-app:latest

Lệnh trên giúp container chạy ở chế độ Read-Only nhưng vẫn cho phép ghi dữ liệu tạm vào thư mục /tmp trong bộ nhớ RAM.

7. Cấu hình Docker Daemon an toàn

Docker Daemon giao tiếp qua Unix socket /var/run/docker.sock. Nếu socket này bị gắn (mount) vào bên trong một container không an toàn, hacker có thể chiếm quyền kiểm soát toàn bộ máy chủ.

Lưu ý quan trọng:

  • Không mount file /var/run/docker.sock vào trong các container không thực sự cần thiết.
  • Nếu quản lý Docker từ xa qua mạng, luôn bật xác thực chứng chỉ TLS (Docker HTTPS socket).

8. Thường xuyên cập nhật Docker và Base Image

Các lỗ hổng mới liên tục được phát hiện mỗi ngày. Giữ cho Docker Engine và các Base Image luôn ở phiên bản mới nhất là phương pháp phòng thủ hiệu quả nhất.

Bạn nên thiết lập pipeline CI/CD tự động rebuild Image định kỳ để liên tục cập nhật các bản vá bảo mật mới nhất từ nhà cung cấp.

9. Checklist bảo mật Docker Container

  • Đã chuyển sang dùng Non-root user (USER appuser).
  • Đã quét lỗ hổng bằng Trivy hoặc Docker Scout.
  • Đã loại bỏ hoàn toàn Secret và API Key khỏi Dockerfile.
  • Đã cấu hình giới hạn CPU và Memory.
  • Đã bật chế độ Read-Only File System cho container.
  • Không chia sẻ Docker Socket (/var/run/docker.sock).
  • Cập nhật Base Image định kỳ.

Kết luận

Bảo mật Docker là một quy trình liên tục đòi hỏi sự chú ý từ khâu viết Dockerfile cho đến khi vận hành trên môi trường Production.

Việc áp dụng tốt các quy tắc như chạy bằng user thường, giới hạn tài nguyên, quản lý secret an toàn và quét lỗ hổng định kỳ sẽ giúp hệ thống của bạn vận hành ổn định, an toàn và hạn chế tối đa nguy cơ bị rò rỉ dữ liệu.

Sẵn sàng chuyển đổi doanh nghiệp?

Hãy thảo luận về cách chúng tôi có thể giúp bạn tận dụng AI và chuyển đổi số.

Câu hỏi thường gặp

Sự khác biệt giữa Docker Image Scan và Container Runtime Security là gì?
Docker Image Scan (dùng Trivy, Docker Scout) giúp tự động phát hiện các lỗ hổng bảo mật ẩn trong gói phần mềm trước khi triển khai. Trong khi đó, Container Runtime Security (như Falco) giám sát và cảnh báo các hành vi bất thường khi container đang chạy trên máy chủ. Kết hợp cả hai giải pháp giúp bạn bảo mật hệ thống toàn diện từ khâu xây dựng đến vận hành.
Làm thế nào để kiểm tra xem Container của tôi có đang chạy bằng quyền Root hay không?
Bạn chỉ cần mở terminal và chạy lệnh docker exec -it <container_name> whoami. Nếu kết quả trả về là root, nghĩa là container chưa được phân quyền an toàn. Để khắc phục, hãy tạo một user mới hạn chế quyền và khai báo lệnh USER tương ứng ngay bên trong file Dockerfile trước khi tiến hành build lại image.

Người viết

Đội ngũ VAON

VAON là đối tác công nghệ đáng tin cậy, cung cấp các giải pháp web, đám mây và kỹ thuật chuyên dụng có khả năng mở rộng để thúc đẩy tăng trưởng kinh doanh thực tế.

Chia sẻ bài viết