Triển khai Falco Agent và Falco Server trên Kubernetes
Để bắt đầu giám sát an ninh, ta cần triển khai Falco dưới dạng DaemonSet để agent chạy trên mọi node, và Falco Server (API) để quản lý rule và xuất cảnh báo.
Mục đích là thiết lập kênh truyền thông nội bộ giữa Agent và Server, đảm bảo không bị tắc nghẽn khi số lượng container tăng cao trong môi trường Multi-Tenant.
Kết quả mong đợi là Falco Agent khởi động thành công trên tất cả node, và Falco Server lắng nghe ở cổng 5066.
Tạo file cấu hình Falco Server với địa chỉ IP động hoặc service name để agent connect.
cat
Falco Server ConfigMap được tạo trong namespace 'security' với cấu hình mặc định tối ưu cho JSON output.
Triển khai Falco Server Deployment để xử lý rule và route cảnh báo.
cat
Falco Server chạy với quyền privileged để truy cập kernel modules, lắng nghe cổng 5066.
Triển khai Falco Agent dưới dạng DaemonSet, cấu hình để kết nối tới Falco Server thay vì chạy độc lập.
cat
Falco Agent được deploy trên mọi node, kết nối về Falco Server qua service name, đảm bảo giám sát toàn bộ cluster.
Verify kết quả: Kiểm tra trạng thái pod và logs để đảm bảo agent đã connect thành công.
kubectl get pods -n security -l app=falco-agent
Tất cả pods trong list phải có trạng thái "Running".
kubectl logs -n security -l app=falco-server --tail=20
Logs hiển thị thông báo "Falco Server started" và "Falco Agent connected".
Viết và tùy chỉnh Rule phát hiện hành vi độc hại
Falco sử dụng file YAML để định nghĩa rule. Ta cần viết các rule riêng biệt để phát hiện truy cập file nhạy cảm (như /etc/shadow) hoặc thay đổi cấu hình container (chạy với privileged).
Mục tiêu là tạo một file rule tùy chỉnh và mount vào container Falco mà không ghi đè lên rule mặc định.
Kết quả mong đợi là Falco sẽ in ra cảnh báo ngay khi có hành vi vi phạm rule được định nghĩa.
Tạo file ConfigMap chứa các custom rules cho môi trường Multi-Tenant.
cat
ConfigMap 'falco-custom-rules' được tạo với 3 rule: truy cập file nhạy cảm, container privileged, và chạy sudo.
Cập nhật Deployment Falco Server để load thêm custom rules từ ConfigMap mới tạo.
cat
Deployment Falco Server được cập nhật để mount file custom rules vào thư mục rules.d, nơi Falco tự động scan.
Khởi động lại Falco Server để áp dụng rule mới.
kubectl rollout restart deployment/falco-server -n security
Pod Falco Server sẽ restart và load lại các rule từ file custom_rules.yaml.
Verify kết quả: Kích hoạt một hành vi vi phạm (ví dụ: truy cập file /etc/shadow) trong một container test.
kubectl run test-pod --image=alpine --rm -it -- cat /etc/shadow
Ngay khi chạy lệnh cat /etc/shadow, logs của Falco Server sẽ xuất hiện dòng cảnh báo "Sensitive file accessed" với mức độ CRITICAL.
Cấu hình Falco để lọc cảnh báo theo Namespace (Tenant-specific)
Trong môi trường Multi-Tenant, cảnh báo cần được gắn thẻ (tag) namespace của tenant để SIEM có thể lọc và phân quyền xem ai được xem cảnh báo của ai.
Mục đích là sử dụng biến %container.namespace trong output của rule để tự động thêm thông tin tenant vào mỗi cảnh báo.
Kết quả mong đợi là mỗi dòng log cảnh báo đều chứa trường "namespace" xác định tenant nào vi phạm.
Cập nhật ConfigMap custom rules để đảm bảo output string luôn chứa namespace của container.
cat
File rule đã được cập nhật, thêm prefix "[TENANT=...]" vào output để dễ dàng parse và lọc theo tenant.
Tái khởi động Falco Server để áp dụng format output mới.
kubectl rollout restart deployment/falco-server -n security
Falco Server restart và áp dụng format output mới chứa thông tin tenant.
Verify kết quả: Tạo một pod trong namespace tenant cụ thể và thực hiện hành vi vi phạm.
kubectl run tenant-a-pod -n tenant-a --image=alpine --rm -it -- cat /etc/shadow
Kiểm tra logs Falco Server, bạn sẽ thấy cảnh báo bắt đầu bằng "ALERT [TENANT=tenant-a]", xác nhận việc lọc theo namespace hoạt động chính xác.
Tích hợp Falco với SIEM (ELK Stack) để tập trung cảnh báo
Để lưu trữ và phân tích cảnh báo dài hạn, Falco cần gửi log về hệ thống tập trung như Elasticsearch (trong stack ELK). Ta sẽ cấu hình Falco gửi log qua file log local, sau đó dùng Filebeat hoặc Fluentd để thu thập.
Tuy nhiên, cách trực tiếp nhất là cấu hình Falco xuất log ra stdout (khi đã cấu hình filebeat lấy log từ container) hoặc dùng output file. Ở đây ta dùng file log để Filebeat dễ scrape.
Kết quả mong đợi là cảnh báo Falco xuất hiện trong Kibana với các trường JSON đã được parse.
Cập nhật ConfigMap Falco Server để xuất log ra file JSON thay vì stdout/syslog.
cat
Falco Server được cấu hình ghi log vào file /var/log/falco/falco.json dưới định dạng JSON, chuẩn bị cho Filebeat.
Triển khai Filebeat (hoặc Fluentd) để đọc file log Falco và đẩy về Elasticsearch. Dưới đây là ví dụ với Filebeat DaemonSet.
cat
Filebeat DaemonSet được deploy để scan thư mục /var/log/falco trên host, đọc file falco.json và gửi về Elasticsearch.
Tạo ConfigMap cho Filebeat với cấu hình output vào Elasticsearch (giả sử ES service name là elasticsearch-logs).
cat
Filebeat được cấu hình để parse JSON, đặt keys vào root object để Kibana dễ hiển thị, và gửi vào index 'falco-alerts'.
Verify kết quả: Thực hiện hành vi vi phạm và kiểm tra trong Kibana.
kubectl run tenant-b-test -n tenant-b --image=alpine --rm -it -- cat /etc/passwd
Đợi 5-10 giây, vào Kibana Dev Tools hoặc Discover, query "index: falco-alerts-* AND output: 'Sensitive file accessed'", bạn sẽ thấy log của tenant-b hiện ra với đầy đủ trường namespace và priority.
Điều hướng series:
Mục lục: Series: Series: Xây dựng nền tảng Secure Multi-Tenant Data Platform với Kubernetes, Falco, OPA và Apache Iceberg để bảo vệ dữ liệu doanh nghiệp trong môi trường chia sẻ tài nguyên
« Phần 4: Áp dụng OPA Gatekeeper để thực thi chính sách bảo mật và tuân thủ
Phần 6: Mật mã hóa dữ liệu: Từ trong lưu trữ đến truyền tải trong nền tảng »