Trivy Operator: ‘Camera an ninh’ quét lỗ hổng 24/7 cho Kubernetes

Security tutorial - IT technology blog
Security tutorial - IT technology blog

Nỗi lo về những lỗ hổng “ngủ quên” trong Cluster

Nhiều anh em triển khai Kubernetes thường có một thói quen: Quét image thật kỹ ở bước CI/CD, thấy xanh (0 lỗi) là tự tin cho lên Production. Nhưng thực tế, bảo mật không phải là trạng thái tĩnh. Một image hôm nay an toàn, nhưng sáng mai có thể dính ngay một mã CVE (Common Vulnerabilities and Exposures) nghiêm trọng vừa được công bố.

Hãy nhớ lại thảm họa Log4j (CVE-2021-44228). Hàng ngàn ứng dụng đang chạy yên ổn bỗng chốc trở thành miếng mồi ngon cho hacker chỉ sau một đêm. Nếu bạn chỉ quét lúc Build, bạn sẽ hoàn toàn “mù” trước những rủi ro phát sinh sau khi ứng dụng đã Deploy. Lúc này, chúng ta cần một cơ chế giám sát liên tục ngay bên trong Cluster.

Tại sao quét bảo mật lúc Build là chưa đủ?

Dựa trên kinh nghiệm vận hành, mình rút ra 3 lý do khiến quy trình CI/CD truyền thống bị hụt hơi:

  • Tốc độ xuất hiện CVE: Trung bình mỗi ngày có hơn 50 lỗ hổng mới được phát hiện. Image của bạn không đổi, nhưng cơ sở dữ liệu lỗi của thế giới thì cập nhật từng giờ.
  • Lỗi cấu hình (Misconfiguration): Image sạch nhưng file YAML lại cho phép privileged: true hoặc chạy quyền root. Đây là con đường ngắn nhất để hacker chiếm quyền điều khiển Node.
  • Shadow IT: Trong một team đông người, đôi khi ai đó “tiện tay” deploy một image từ Docker Hub cá nhân để test mà không qua quy trình kiểm duyệt của công ty.

Thay vì ngồi gõ trivy image [name] cho từng Pod một cách thủ công, chúng ta cần một giải pháp tự động hóa hoàn toàn.

Trivy Operator – Cánh tay nối dài của Aqua Security

Trivy Operator không chỉ là một công cụ quét; nó biến bảo mật thành một thành phần bản địa (native) của Kubernetes. Thay vì chạy theo dạng CLI, nó hoạt động như một Controller ngầm. Nó liên tục theo dõi các tài nguyên trong Cluster và xuất báo cáo dưới dạng Custom Resource Definitions (CRDs).

Hiểu đơn giản: Bạn chỉ cần dùng kubectl get là thấy ngay tình trạng sức khỏe bảo mật của toàn bộ hệ thống, giống như cách bạn kiểm tra Pod hay Service vậy.

Bước 1: Chuẩn bị môi trường

Để bắt đầu, bạn cần chuẩn bị:

  • Một Cluster Kubernetes (v1.20 trở lên).
  • Helm v3 đã được cài đặt.
  • Quyền cluster-admin để cài đặt Operator.

Bước 2: Cài đặt Trivy Operator nhanh gọn

Sử dụng Helm là cách nhanh nhất để quản lý vòng đời của Operator. Trước tiên, hãy thêm repository của Aqua Security:

helm repo add aqua https://aquasecurity.github.io/helm-charts/
helm repo update

Tiếp theo, tiến hành cài đặt. Mình khuyên bạn nên giới hạn mức độ cảnh báo để tránh bị tràn ngập thông tin (alert fatigue):

helm install trivy-operator aqua/trivy-operator \
  --namespace trivy-system \
  --create-namespace \
  --set="trivy.severity=CRITICAL,HIGH"

Tham số trivy.severity=CRITICAL,HIGH giúp Operator chỉ tập trung vào những lỗ hổng thực sự nguy hiểm, giúp team DevOps ưu tiên xử lý đúng chỗ.

Bước 3: Đọc báo cáo lỗ hổng (Vulnerability Reports)

Sau khi cài đặt khoảng 1-2 phút, Operator sẽ tự động kích hoạt các đợt quét. Để xem tổng quan các lỗ hổng đang tồn tại, hãy chạy:

kubectl get vulnerabilityreports --all-namespaces

Nếu muốn soi kỹ một ứng dụng, ví dụ redis-cart, bạn dùng lệnh describe. Kết quả sẽ hiển thị chi tiết mã CVE, thư viện dính lỗi và đặc biệt là Fixed Version. Đây là thông tin cực kỳ giá trị để Dev biết chính xác cần nâng cấp lên phiên bản nào.

Bước 4: Kiểm tra lỗi cấu hình YAML

Đây là tính năng “đáng tiền” nhất. Trivy Operator tự động kiểm tra các file Deployment của bạn xem có vi phạm bảo mật hay không. Thử chạy lệnh này:

kubectl get configauditreports --all-namespaces

Nếu cột DANGER hiện số đỏ, bạn cần kiểm tra ngay. Thông thường đó là các lỗi như: thiếu giới hạn CPU/RAM, chưa cấu hình readOnlyRootFilesystem, hoặc để container chạy với quyền root.

Bước 5: Theo dõi trực quan qua Dashboard

Đừng dừng lại ở dòng lệnh. Bạn nên tích hợp dữ liệu này vào Grafana. Trivy Operator cung cấp sẵn các metrics cho Prometheus. Việc nhìn thấy biểu đồ lỗ hổng giảm dần theo thời gian sẽ mang lại cảm giác an tâm hơn nhiều cho cả team và quản lý.

Kinh nghiệm thực chiến khi vận hành

Qua quá trình triển khai thực tế, mình có vài lưu ý nhỏ giúp hệ thống chạy mượt hơn:

  • Giới hạn tài nguyên: Mặc định, quá trình quét có thể tốn RAM. Hãy set resources.limits cho Operator (ví dụ: 500Mi RAM) để tránh tình trạng nó chiếm dụng tài nguyên của ứng dụng chính.
  • Quản lý Storage: Các bản báo cáo (CRD) lưu trong etcd. Nếu Cluster có hàng ngàn Pod, dung lượng etcd có thể tăng nhanh. Hãy cấu hình dọn dẹp các report cũ định kỳ.
  • Private Registry: Đừng quên tạo imagePullSecrets trong namespace trivy-system để Operator có quyền kéo image từ kho riêng của công ty về quét.

Bảo mật là một quá trình cải tiến liên tục, không phải là việc làm một lần rồi thôi. Với Trivy Operator, bạn đã có một hệ thống giám sát tự động, giúp giảm tải áp lực cho team vận hành và tăng độ an toàn cho sản phẩm lên một tầm cao mới.

Share: