Cấu hình Policy Engine Trivy cho Harbor
Chúng ta sẽ chọn Trivy vì nó nhẹ, hỗ trợ quét cả OS packages và language libraries, và tích hợp sẵn trong Harbor core. Thay vì Clair, Trivy cung cấp tốc độ quét nhanh hơn và ít tài nguyên hơn cho môi trường Kubernetes.
Trước tiên, cần bật tính năng Vulnerability Scanner trong Harbor UI để kích hoạt cơ chế quét.
Đăng nhập vào Harbor Core UI, vào Administration > Configuration. Tìm mục Vulnerability Scan và bật Scanner.
Trong phần Scanner Name, chọn Trivy. Nếu chưa có, Harbor sẽ tự động deploy Trivy scanner vào namespace harbor.
Để đảm bảo Trivy có thể truy cập vào các image, cần cấu hình configmap để Trivy biết đường dẫn đến Harbor.
Chạy lệnh sau trên node master của Kubernetes để tạo configmap cho Trivy:
kubectl create configmap trivy-config --from-literal=trivy.harbor.io.enabled=true -n harbor
Kết quả: Configmap được tạo, Harbor sẽ tự động phát hiện và deploy Trivy scanner nếu chưa tồn tại.
Verify kết quả
Chạy lệnh kubectl get pods -n harbor | grep trivy. Bạn sẽ thấy pod trivy-scanner đang ở trạng thái Running.
Tích hợp Trivy với Harbor Core và Database
Trivy cần truy cập vào database của Harbor để lưu trữ kết quả quét. Harbor sử dụng PostgreSQL hoặc MySQL. Chúng ta sẽ cấu hình biến môi trường trong Deployment của Trivy.
Đầu tiên, chỉnh sửa file values.yaml của Harbor Helm Chart (thường nằm ở /opt/harbor/harbor-chart/values.yaml hoặc thư mục cấu hình của bạn).
Cập nhật phần trivy trong file cấu hình:
cat >> /opt/harbor/harbor-chart/values.yaml
Chạy lệnh redeploy Harbor để áp dụng thay đổi:
helm upgrade harbor harbor -f /opt/harbor/harbor-chart/values.yaml -n harbor
Kết quả: Pod Trivy được cập nhật với resource limit và cấu hình database connection mới.
Verify kết quả
Chạy kubectl describe pod trivy-scanner- -n harbor và kiểm tra phần Environment xem có biến TRIVY_DB_REPOSITORY hay không.
Cấu hình quét tự động (Post-push) và Severity Threshold
Chúng ta cần cấu hình Harbor để tự động quét image ngay sau khi push (Post-push) thay vì chờ pull (Pre-pull) để đảm bảo artifact an toàn trước khi phân phối.
Vào Administration > Project > chọn project mục tiêu (ví dụ: production). Bật Automatic Vulnerability Scanning.
Trong phần Scan on Push, chọn Enabled. Harbor sẽ kích hoạt webhook để gọi Trivy ngay khi image mới được upload.
Bây giờ, định nghĩa chính sách Severity. Chúng ta sẽ chặn các image có lỗi Critical và High.
Chỉnh sửa file cấu hình chính sách quét trong thư mục Harbor core (thường là /etc/core/scan-policy.yaml hoặc cấu hình qua API). Dưới đây là file cấu hình mẫu:
cat > /etc/core/scan-policy.yaml
Tải file này vào container Harbor Core để áp dụng:
docker cp /etc/core/scan-policy.yaml harbor-core:/etc/core/scan-policy.yaml
Khởi động lại service Harbor Core:
docker restart harbor-core
Kết quả: Harbor sẽ áp dụng chính sách mới, bất kỳ image nào có severity >= High sẽ bị đánh dấu và có thể bị chặn tùy cấu hình enforcement (sẽ xử lý ở phần 6).
Verify kết quả
Push một image có lỗ hổng (ví dụ: alpine:3.10) vào Harbor. Vào Project > Repository, xem trạng thái Scan. Nó sẽ chuyển sang Scanning rồi Completed với biểu tượng màu đỏ nếu có lỗi.
Tích hợp cảnh báo qua Slack và Email
Để nhận thông báo ngay khi phát hiện lỗ hổng nghiêm trọng, chúng ta cần cấu hình webhook trong Harbor để gửi dữ liệu về Slack hoặc Email server.
Đầu tiên, tạo một Webhook trong Harbor. Vào Administration > Webhooks > Add Webhook.
Cấu hình sự kiện: Chọn Vulnerability Scan và Result (khi scan xong).
Tạo file cấu hình webhook endpoint (giả sử bạn đã có một service proxy hoặc script để forward về Slack):
cat > /opt/harbor/webhooks/slack-config.yaml
Chạy lệnh để áp dụng cấu hình webhook vào Harbor API (giả sử đã có script helper hoặc dùng kubectl exec vào core để chạy API call):
kubectl exec -it harbor-core -n harbor -- /bin/bash -c "curl -X POST http://localhost:8080/api/v2.0/webhooks -H 'Content-Type: application/json' -d @/opt/harbor/webhooks/slack-config.yaml"
Lưu ý: Để gửi Email, cấu hình tương tự nhưng thay type thành email và cấu hình SMTP trong harbor.yml phần notification.
cat >> /opt/harbor/harbor.yml
Kết quả: Khi scan phát hiện Critical/High, Harbor sẽ gọi webhook gửi tin nhắn vào Slack channel hoặc gửi email cho admin.
Verify kết quả
Push một image có lỗi Critical. Kiểm tra Slack channel hoặc hộp thư Email. Bạn sẽ nhận được thông báo chi tiết về tên image, severity và số lượng lỗ hổng.
Cấu hình Whitelist cho Image nội bộ tin cậy
Đôi khi các image nội bộ (internal images) hoặc base image của công ty có thể bị quét nhầm là có lỗ hổng do chưa cập nhật DB của Trivy. Chúng ta cần tạo danh sách trắng (Whitelist).
Chỉnh sửa file scan-policy.yaml đã tạo ở phần trên để thêm danh sách ignore_exceptions.
cat > /etc/core/scan-policy.yaml
Tải lại file vào container Harbor Core:
docker cp /etc/core/scan-policy.yaml harbor-core:/etc/core/scan-policy.yaml
Khởi động lại Harbor Core:
docker restart harbor-core
Kết quả: Harbor sẽ bỏ qua các image thuộc namespace internal-team hoặc legacy-apps khi áp dụng chính sách chặn, nhưng vẫn hiển thị kết quả quét trên dashboard.
Verify kết quả
Push một image có lỗ hổng Critical vào namespace internal-team. Vào Repository, bạn sẽ thấy trạng thái scan vẫn là Completed nhưng không bị chặn (nếu đã bật enforcement) và không gửi cảnh báo Slack (nếu cấu hình filter đúng).
Điều hướng series:
Mục lục: Series: Series: Xây dựng nền tảng Secure Multi-Cloud Container Registry với Harbor, Notary và Policy Engine để kiểm soát phân phối artifact an toàn
« Phần 4: Tích hợp Notary để ký mã hóa và xác thực nguồn gốc container image
Phần 6: Xây dựng Policy Enforcement để chặn phân phối artifact không an toàn »