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