Giám sát trên môi trường K8S – Phần 3

Tiếp tục với những kiến thức cơ bản trong series về Falco, ở 2 phần trước, chúng ta đã nắm được cách thức để cấu hình Falco cũng như cách viết và tùy chỉnh rule để phù hợp với từng hệ thống thông qua các ví dụ đi kèm. Với những test case trong quá trình kiểm tra việc viết rule, chúng ta nhận thấy sau khi các events trigger rule các cảnh báo đang được ghi dưới dạng standard output. Vậy ngoài standard output, Falco còn hỗ trợ những định dạng outputs nào khác nữa không? Chúng ta sẽ làm rõ hơn trong phần này

Falco hỗ trợ lưu các cảnh báo thông qua nhiều hình thức thông qua việc tùy chỉnh thay đổi cấu hình trong file falco.yaml, các hình thức này bao gồm:

  • Standard Output
  • File
  • Syslog
  • Chương trình, ứng dụng
  • HTTP/HTTPS endpoint
  • gRPC API

Falco cũng cho phép tích hợp để chuyển tiếp các cảnh báo đến các hệ thống của bên thứ ba ví dụ như SIEM,databae hoặc Faas. Bản thân Falco cũng cung cấp một công cụ có tên Falcosidekick, cho phép tích hợp với hơn 50 hệ thống khác nhau. Falco có thể hoạt động đồng thời nhiều định dạng outputs, người dùng không cần thiết phải disable những cấu hình đã tồn tại (ví dụ như stdout và syslog) để enable những định dạng outputs khác.

Output Channels

stdout

Theo mặc đinh, quá trình cài đặt và triển khai, Falco sẽ sử dụng standard output để ghi lại những cảnh báo từ Falco, với format mỗi dòng hiển thị một cảnh báo. Cách thức này khá phù hợp khi kết hợp với Fluentd và Logstach để thu thập logs từ containers. Các cảnh báo có thể lưu trong Elasticsearch

Với các alert trong stdout, ở dưới cùng, bạn đọc có thể thấy một số thông tin hữu ích như sau:

Số lượng các sự kiện bị bỏ qua (Syscall events dropped)

Số lượng các sự kiện mà Falco phát hiện (Events detected)

Số lượng các rule đếm theo mức độ cảnh báo (Rule counts by severity)

Số lượng các rules được trigger theo tên rule (Triggered rules by rule name)

Làm rõ hơn về thông tin “Event drop“, đôi khi, do số lượng các sự kiện và Falco phát hiện quá lớn, khiến một số sự kiện có thể bị drop (bỏ qua). Để khắc phục điều này, Falco có thể phát hiện ra việc drop events này và cho phép người dùng cấu hình với syscall_event_drops. Bạn đọc có thể tìm hiểu chi tiết hơn tại đây: https://falco.org/docs/event-sources/kernel/dropped-events/

syslogs

Để lưu các cảnh báo trong syslog, chúng ta sẽ thay đổi cấu hình trong falco.yaml với việc đặt giá trị trong syslog_output: enabledtrue. Các cảnh báo có thể hiển thị thông qua việc thực hiện câu lệnh sau:

tail /var/log/syslog | grep “host falco”

File Output

Falco cũng hỗ trợ ghi các cảnh báo ra một file bất kỳ, bằng cách chỉnh sửa cấu hình trong file falco.yaml và enable các giá trị trong trường file_output và tùy chỉnh tên file trong filename như cấu hình trong hình ảnh ví dụ dưới đây (theo mặc định giá trị enabledkeep_alive đang cấu hình là false):

Ví dụ cấu hình trên lưu các cảnh báo trong file falco_alerts_file.txt trong đường dẫn /root

Program Output

Falco hỗ trợ chuyển các cảnh báo thông qua cấu hình các ứng dụng, ví dụ như mail, Webhook của slack hay đơn giản như thông qua netcat, v.v…Trong ví dụ này, thay vì sử dụng mail và cấu hình SMTP server, Falco sẽ ghi các cảnh báo vào ElasticSearch (ES) endpoint theo định dạng JSON. Để thực hiện, chúng ta chỉnh sửa cấu hình trong file falco.yaml, enable JSON format trong trường json_output và các trường bên trong program_output

json_output: true

# (…)

program_output:
enabled: true
keep_alive: false
program: “curl -s -H ‘Content-Type: application/json’ -d @- -X POST http://localhost:9200/falco/_doc”

Ngoài ra còn một số định dang outputs khác bạn đọc có thể thử cấu hình thêm, chi tiết tại đây: https://falco.org/docs/outputs/channels/

Falco-sidekick-ui

Falco-sidekick là thành phần có sẵn trong Falco, một deamon giúp Falco kết nối với đạ dạng các công cụ và giao thức khác nhau. Falco-sidekick sẽ nhận stream các events và chuyển tiếp tới đa dạng các outputs. Falco-sidekick cũng hỗ trợ giao diện dưới dạng portal web để hiển thị các cảnh báo, tuy nhiên giao diện này sẽ không được enable theo mặc định. Chúng ta có thể cấu hình thông qua helm như sau

helm upgrade falco -n falco –set tty=true falcosecurity/falco \
# 2 new arguments to enable UI
–set falcosidekick.enabled=true \
–set falcosidekick.webui.enabled=true

Sau khi thực hiện cập nhật lại Falco, bạn đọc có thể xem thông tin về port mà falco-falcosidekick-ui đang sử dụng. Theo mặc định vì lý do bảo mật, Falco không cung cấp quyền truy cập vào giao diện cho người dùng từ bên ngoài, chúng ta cần sử dụng cách thức port-fowarding để truy cập vào giao diện này sử dụng câu lệnh sau:

kubectl port-forward svc/falco-falcosidekick-ui \ -n falco –address 0.0.0.0 2802 &> /dev/null &

Bạn đọc thực hiện đăng nhập vào portal với tài khoản mặc định admin/admin (tài khoản truy cập vào portal cũng có thể được thay đổi khi cấu hình thông qua helm với option falcosidekick.webui.user=user:password), giao diện của Falcosidekick hiển thị như hình ảnh dưới đây:

 

Phần 3 kết thúc các phần nội dung tương đối cơ bản về Falco, bên cạnh những kiến thức đã mô tả ở 3 phần, Falco cũng có những kiến thức khác được mô tả chi tiết hơn trên trang chủ. Trong quá trình viết bài không thể tránh khỏi các thiếu sót, rất mong sự đóng góp từ bạn đọc.

 

Author: Purple Team