+4

Bảo mật ứng dụng trên Kubernetes: Hệ điều hành mây không dành cho người mộng mơ

"Tưởng deploy xong là xong, ai ngờ có thằng chạy container coin trong cluster mình suốt 3 tháng." — Một DevOps từng mất niềm tin vào loài người

Kubernetes có thể được coi là "hệ điều hành của đám mây". Nó giúp chúng ta điều phối container, cân bằng tải, tự phục hồi, tự động mở rộng... nhưng chính vì sức mạnh đó mà nó cũng trở thành miếng mồi ngon cho hacker.

Điểm đáng lo nhất: Kubernetes không bảo mật mặc định. Nếu bạn không chủ động cấu hình, cluster của bạn sẽ có thể:

  • Container chạy quyền root thoải mái như ở nhà
  • Người dùng sở hữu quyền cluster-admin để làm "chuyện lớn"
  • Secrets lưu trần trụi trong etcd, không mã hóa, không giám sát
  • Network mở như ruộng bắp: Pod nào cũng ping được pod khác
  • API server mở port lung tung, không kiểm soát IP
  • Log thì không bật, audit trail không có, Prometheus báo động không gắn ai vào nhận
  • Dev: "Tao chỉ test một tí thôi mà"
  • K8s: Cấp quyền root toàn cluster
  • Hacker: Cảm ơn nhé, giờ là giờ đào coin

Triển khai ứng dụng trên Kubernetes giúp:

  • Dễ dàng mở rộng (scaling)
  • Tự động hóa deploy và rollout
  • Tăng tính sẵn sàng (HA)

Nhưng... đi kèm với sự tiện lợi đó là nhiều lỗ hổng bảo mật tiềm tàng nếu không có quy trình kiểm soát chuẩn:

K8s không bảo mật mặc định. Muốn an toàn, bạn phải xây dựng hệ sinh thái bảo vệ cho nó — từ CI/CD, image, RBAC, network cho tới logging và runtime protection.

Việc bảo mật trên Kubernetes không chỉ là cài SSL hay dựng firewall, mà là một chuỗi các lớp bảo vệ:

  • Từ base image → build pipeline → container → pod
  • Đến cluster role → service account → ingress → network
  • Và cả audit, logging, monitoring, policy engine

Những sai lầm thường gặp

❌ Chạy container với quyền root

securityContext:
  runAsUser: 0  # Ơ kìa?

Hacker chỉ cần 1 shell là đủ làm chủ node.

❌ Cho app quyền cluster-admin

roleRef:
  kind: ClusterRole
  name: cluster-admin

Dev xin "cho nhanh", xong để nguyên 2 năm 🙃

❌ Không giới hạn traffic nội bộ

Mọi pod ping được nhau → khó kiểm soát lateral movement

❌ Để secrets như để tiền dưới gối

apiVersion: v1
kind: Secret
...base64 encoded password...

Base64 ≠ encryption. Là mã hóa "cho có vẻ chuyên nghiệp".

Những cách bảo vệ cụ thể

✅ Không chạy container với quyền root

securityContext:
  runAsUser: 1000
  runAsGroup: 3000
  allowPrivilegeEscalation: false

✅ Giới hạn quyền truy cập bằng RBAC

apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  name: read-only
rules:
- apiGroups: [""]
  resources: ["pods"]
  verbs: ["get", "list"]

✅ NetworkPolicy chặn traffic linh tinh

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: deny-all
spec:
  podSelector: {}
  policyTypes:
  - Ingress
  - Egress

✅ Dùng PodSecurityContext và PSP (hoặc PSA từ v1.25+)

securityContext:
  seccompProfile:
    type: RuntimeDefault
  capabilities:
    drop:
      - ALL

✅ Không hardcode secret, dùng external secret manager

  • HashiCorp Vault
  • AWS Secrets Manager
  • Sealed Secrets, External Secrets Operator

Công cụ hỗ trợ bảo mật K8s

Cluster & Node Security

Công cụ Chức năng
Kube-Bench Kiểm tra cluster theo chuẩn bảo mật CIS Benchmark
Kube-Hunter Quét lỗ hổng bảo mật trong cluster từ góc nhìn attacker
Lynis Audit bảo mật cho hệ điều hành máy chủ chạy K8s
Falco Phát hiện hành vi bất thường theo thời gian thực (runtime security)

Pod & Container Security

Công cụ Chức năng
Trivy Quét lỗ hổng bảo mật trong image (CVEs), cấu hình sai
Dockle Kiểm tra best practices khi build Docker image
OPA Gatekeeper / Kyverno Áp chính sách bảo mật như không cho chạy container với quyền root, mount volume lạ, v.v.
PodSecurityAdmission Cơ chế tích hợp trong K8s 1.25+ để áp chính sách như restricted, baseline, privileged

Network Security

Công cụ Chức năng
Cilium / Calico NetworkPolicy nâng cao, bảo vệ traffic giữa pod
Istio / Linkerd (Service Mesh) Áp TLS, auth, kiểm soát traffic service-to-service
KubeArmor Chặn truy cập file/network bất thường ở layer OS, hỗ trợ eBPF

Audit & Compliance

Công cụ Chức năng
Audit Logs (K8s built-in) Ghi lại hành động API – rất cần để phát hiện và điều tra
Kubescape Đánh giá bảo mật toàn cụm theo chuẩn NSA/CISA, MITRE ATT&CK
KubeAudit Phân tích YAML manifest xem có lỗ hổng hoặc cấu hình yếu không

Secrets Management

Công cụ Chức năng
Sealed Secrets (Bitnami) Mã hóa secrets, lưu an toàn trong Git (GitOps-friendly)
Vault by HashiCorp Quản lý secrets động, tích hợp với RBAC và rotation tự động
External Secrets Operator Đồng bộ secrets từ AWS, GCP, Vault vào K8s secrets

Có thể triển khai ứng dụng của bạn với:

✅ Quét image → Trivy, Dockle

✅ Runtime theo dõi → Falco

✅ Chính sách an toàn → Kyverno hoặc OPA Gatekeeper

✅ Quản lý secrets tốt hơn → Vault hoặc Sealed Secrets

✅ Kiểm tra cụm định kỳ → Kube-Bench, Kubescape, Kube-Hunter

Tổng kết

Kubernetes không phải thần thánh. Nó giống như một ngôi nhà thông minh: bạn phải khóa cửa, hạn chế quyền, giám sát camera và đừng tin ai cả.

"DevOps giỏi không phải là người deploy được 100 microservice. Là người deploy xong mà không ai đào coin giùm."

Nếu bạn thấy hay, hãy để lại bình luận xem team bạn đã từng gặp case nào tương tự nhé! ❤️


All Rights Reserved

Viblo
Let's register a Viblo Account to get more interesting posts.