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ơ

0 0 0

Người đăng: Nguyễn Văn Quy

Theo Viblo Asia

"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é! ❤️

Bình luận

Bài viết tương tự

- vừa được xem lúc

Đề thi interview DevOps ở Châu Âu

Well. Chào mọi người, mình là Rice - một DevOps Engineers ở đâu đó tại Châu Âu.

0 0 100

- vừa được xem lúc

In calculus, love also means zero.

Mình nhớ hồi năm 2 đại học, thầy giáo môn calculus, trong một giây phút ngẫu hứng, đã đưa ra cái definition này. Lúc đấy mình cũng không nghĩ gì nhiều.

0 0 70

- vừa được xem lúc

Chuyện thay đổi

Thay đổi là một thứ gì đó luôn luôn đáng sợ. Cách đây vài tháng mình có duyên đi làm cho một banking solution tên là X.

0 0 55

- vừa được xem lúc

Pet vs Cattle - Thú cưng và gia súc

Khái niệm. Pets vs Cattle là một khái niệm cơ bản của DevOps. Bài viết này sẽ nói về sự phát triển của các mô hình dịch vụ từ cốt lõi Pets and Cattle. 1.

0 0 42

- vừa được xem lúc

Git workflow được Google và Facebook sử dụng có gì hay ho

Với developer thì Git hẳn là công cụ rất quen thuộc và không thể thiếu rồi. Thế nhưng có mấy ai thực sự hiểu được Git.

0 0 94

- vừa được xem lúc

Kubernetes - Học cách sử dụng Kubernetes Namespace cơ bản

Namespace trong Kubernetes là gì. Tại sao nên sử dụng namespace.

0 0 123