Học để thi CKS trong 45 ngày

Ngày 1:

  • Nội dung: Network Policies cơ bản, cấu trúc, cách áp dụng các rule (ingress, egress) cho pod, namespace.

  • Bài tập:

    1. Tạo Network Policy cho phép pod trong namespace A truy cập pod trong namespace B.

    2. Tạo Network Policy chặn tất cả traffic đến pod trong namespace C.

    3. Tạo Network Policy cho phép pod trong namespace D chỉ truy cập được internet.

    4. Tạo Network Policy chỉ cho phép pod có label "app=frontend" truy cập pod có label "app=backend".

    5. Tạo Network Policy phức tạp hơn, kết hợp nhiều rule để kiểm soát traffic giữa các microservice.

Ngày 2:

  • Nội dung: Tìm hiểu CIS Benchmark cho Kubernetes, cài đặt kube-bench, chạy scan và phân tích kết quả.

  • Bài tập:

    1. Cài đặt kube-bench trên cluster Kubernetes của bạn.

    2. Chạy kube-bench scan và xem kết quả.

    3. Phân tích các cảnh báo và đưa ra giải pháp khắc phục.

    4. Tìm hiểu các best practice để cải thiện điểm số CIS Benchmark.

    5. Tự tạo một bộ kiểm tra CIS Benchmark đơn giản cho riêng mình.

Ngày 3:

  • Nội dung: Ingress Controller (Nginx, Traefik), cấu hình Ingress cho các ứng dụng, sử dụng TLS.

  • Bài tập:

    1. Cài đặt Nginx Ingress Controller trên cluster Kubernetes.

    2. Cấu hình Ingress cho một ứng dụng đơn giản.

    3. Cấu hình Ingress sử dụng TLS để mã hóa traffic.

    4. Cấu hình Ingress với nhiều path và backend khác nhau.

    5. Sử dụng Traefik Ingress Controller để thay thế Nginx và so sánh.

Ngày 4:

  • Nội dung: Các kiểu Ingress (LoadBalancer, NodePort), cấu hình nâng cao (rewrite, sticky session). Bảo vệ node metadata (kubelet --protect-server), giới hạn truy cập vào endpoint (Network Policies).

  • Bài tập:

    1. Cấu hình Ingress sử dụng LoadBalancer để expose ứng dụng ra bên ngoài.

    2. Cấu hình Ingress sử dụng NodePort để expose ứng dụng ra bên ngoài.

    3. Sử dụng rewrite rule để thay đổi đường dẫn của request.

    4. Sử dụng sticky session để đảm bảo các request từ cùng một client được gửi đến cùng một pod.

    5. Tìm hiểu và cấu hình các tính năng bảo mật khác của Ingress Controller.

Ngày 5:

  • Nội dung: Tìm hiểu các GUI của Kubernetes (Dashboard, Lens, Octant), đánh giá rủi ro khi sử dụng.

  • Bài tập:

    1. Cài đặt và sử dụng Kubernetes Dashboard.

    2. Cài đặt và sử dụng Lens.

    3. Cài đặt và sử dụng Octant.

    4. So sánh ưu nhược điểm của các GUI khác nhau.

    5. Đánh giá rủi ro bảo mật khi sử dụng GUI và đưa ra các biện pháp giảm thiểu.

Ngày 6:

  • Nội dung: Kiểm tra tính toàn vẹn của các binary Kubernetes trước khi deploy (checksum, signature).

  • Bài tập:

    1. Tải xuống các binary Kubernetes từ trang chủ chính thức.

    2. Kiểm tra checksum của các binary đã tải xuống.

    3. Kiểm tra signature của các binary đã tải xuống.

    4. Tìm hiểu cách tạo checksum và signature cho các binary của riêng bạn.

    5. Tìm hiểu các công cụ khác nhau để kiểm tra tính toàn vẹn của binary.

Ngày 7:

  • Nội dung: Giới hạn truy cập vào Kubernetes API: Authentication (token, certificate), Authorization (RBAC, ABAC).

  • Bài tập:

    1. Tạo một user mới và cấp token để truy cập Kubernetes API.

    2. Tạo một certificate và sử dụng nó để xác thực khi truy cập Kubernetes API.

    3. Sử dụng RBAC để phân quyền cho user mới tạo, chỉ cho phép thực hiện các hành động nhất định.

    4. Sử dụng ABAC để phân quyền chi tiết hơn, dựa trên các thuộc tính của request.

    5. Tìm hiểu các cách khác nhau để bảo mật Kubernetes API.

Ngày 8:

  • Nội dung: RBAC cơ bản (Role, ClusterRole, RoleBinding, ClusterRoleBinding), cấu hình quyền cho user, group.

  • Bài tập:

    1. Tạo một Role cho phép đọc các pod trong namespace "default".

    2. Tạo một ClusterRole cho phép đọc các node trong cluster.

    3. Tạo một RoleBinding để gán Role cho một user cụ thể.

    4. Tạo một ClusterRoleBinding để gán ClusterRole cho một group cụ thể.

    5. Thực hành phân quyền cho các resource khác nhau (Deployment, Service, ConfigMap,...)

Ngày 9:

  • Nội dung: RBAC nâng cao: phân quyền chi tiết cho từng resource, verb, sử dụng aggregate roles.

  • Bài tập:

    1. Tạo một Role cho phép đọc, tạo và xóa pod trong namespace "dev".

    2. Tạo một ClusterRole cho phép đọc và liệt kê các node, nhưng không cho phép sửa đổi.

    3. Sử dụng aggregate roles để kết hợp nhiều Role và ClusterRole lại với nhau.

    4. Sử dụng các điều kiện (conditions) để phân quyền chi tiết hơn dựa trên các thuộc tính của resource.

    5. Tìm hiểu các best practice khi sử dụng RBAC.

Ngày 10:

  • Nội dung: Service Account, Best Practices: không sử dụng default SA, phân quyền tối thiểu cho SA mới.

  • Bài tập:

    1. Tạo một Service Account mới và gán quyền cho nó.

    2. Sử dụng Service Account để chạy một pod và kiểm tra quyền truy cập của pod.

    3. Tạo một pod sử dụng default Service Account và xem xét các quyền mặc định của nó.

    4. Tìm hiểu cách vô hiệu hóa default Service Account.

    5. Thực hành phân quyền tối thiểu cho Service Account mới tạo.

Ngày 11:

  • Nội dung: Quy trình update Kubernetes, sử dụng các công cụ (kubeadm, kops), rollback khi cần.

  • Bài tập:

    1. Tìm hiểu các bước cơ bản để update Kubernetes.

    2. Sử dụng kubeadm để update một cluster Kubernetes.

    3. Sử dụng kops để update một cluster Kubernetes.

    4. Thực hành rollback khi update gặp sự cố.

    5. Tìm hiểu các công cụ khác để update Kubernetes (helm, kubectl apply).

Ngày 12:

  • Nội dung: Các version Kubernetes, chọn phiên bản phù hợp, theo dõi changelog để biết các thay đổi.

  • Bài tập:

    1. Tìm hiểu các version Kubernetes hiện tại và các tính năng mới của chúng.

    2. So sánh các version Kubernetes khác nhau và chọn phiên bản phù hợp cho môi trường của bạn.

    3. Đọc changelog của các phiên bản Kubernetes để biết các thay đổi và cập nhật mới.

    4. Tìm hiểu các khuyến nghị về việc nâng cấp lên các phiên bản Kubernetes mới.

    5. Thực hành nâng cấp một cluster Kubernetes lên phiên bản mới.

Ngày 13:

  • Nội dung: Tối ưu host OS: loại bỏ các package không cần thiết, disable các service không dùng, update thường xuyên.

  • Bài tập:

    1. Kiểm tra các package đã cài đặt trên node Kubernetes và loại bỏ những package không cần thiết.

    2. Liệt kê các service đang chạy trên node Kubernetes và disable những service không sử dụng.

    3. Cấu hình automatic update cho hệ điều hành trên node Kubernetes.

    4. Sử dụng các công cụ như Lynis hoặc CIS-CAT để kiểm tra và đánh giá cấu hình bảo mật của hệ điều hành.

    5. Tìm hiểu các best practice về bảo mật hệ điều hành cho node Kubernetes.

Ngày 14:

  • Nội dung: IAM Roles trong Kubernetes, tích hợp với các cloud provider (AWS, GCP, Azure).

  • Bài tập:

    1. Tạo một IAM Role trên AWS, GCP hoặc Azure và gán các quyền cần thiết cho Kubernetes.

    2. Tích hợp IAM Role với Kubernetes để cho phép các pod truy cập các dịch vụ của cloud provider.

    3. Sử dụng Kubernetes Service Account để liên kết với IAM Role.

    4. Thực hành sử dụng IAM Role để truy cập các dịch vụ của cloud provider từ trong pod.

    5. Tìm hiểu các best practice về quản lý IAM Role trong Kubernetes.

Ngày 15:

  • Nội dung: Giới hạn quyền của IAM Role, sử dụng least privilege principle, kiểm tra thường xuyên.

  • Bài tập:

    1. Xem xét các quyền của IAM Role đã tạo và loại bỏ các quyền không cần thiết.

    2. Áp dụng least privilege principle để chỉ cấp cho IAM Role các quyền tối thiểu cần thiết.

    3. Thực hiện kiểm tra định kỳ để đảm bảo rằng IAM Role không có các quyền không cần thiết.

    4. Sử dụng các công cụ như Cloud Custodian hoặc AWS IAM Access Analyzer để kiểm tra và đánh giá các quyền của IAM Role.

    5. Tìm hiểu các cách khác nhau để giới hạn quyền của IAM Role trong Kubernetes.

Ngày 16:

  • Nội dung: Các cách hạn chế truy cập từ bên ngoài vào cluster: firewall, Network Policies, VPN.

  • Bài tập:

    1. Cấu hình firewall để chỉ cho phép các traffic cần thiết vào cluster Kubernetes.

    2. Sử dụng Network Policies để giới hạn traffic giữa các pod trong cluster.

    3. Cài đặt và cấu hình VPN để tạo một đường truyền an toàn vào cluster Kubernetes.

    4. Tìm hiểu các cách khác nhau để bảo mật truy cập từ bên ngoài vào cluster Kubernetes.

    5. Thực hành kết hợp các biện pháp bảo mật khác nhau để đảm bảo an toàn cho cluster Kubernetes.

Ngày 17:

  • Nội dung: AppArmor profile, cách tạo và áp dụng cho container, kiểm tra log để phát hiện các vi phạm.

  • Bài tập:

    1. Tìm hiểu về AppArmor và cách nó hoạt động trong Kubernetes.

    2. Tạo một AppArmor profile đơn giản để giới hạn các hành động của container.

    3. Áp dụng AppArmor profile cho một pod và kiểm tra xem nó có hoạt động đúng không.

    4. Kiểm tra log của AppArmor để phát hiện các vi phạm.

    5. Tìm hiểu các AppArmor profile có sẵn và cách tùy chỉnh chúng cho phù hợp với ứng dụng của bạn.

Ngày 18:

  • Nội dung: Seccomp profile, cấu hình các syscall được phép, chặn các syscall nguy hiểm.

  • Bài tập:

    1. Tìm hiểu về Seccomp và cách nó hoạt động trong Kubernetes.

    2. Tạo một Seccomp profile đơn giản để chỉ cho phép các syscall cần thiết.

    3. Áp dụng Seccomp profile cho một pod và kiểm tra xem nó có hoạt động đúng không.

    4. Sử dụng các công cụ như strace hoặc auditctl để kiểm tra các syscall được thực hiện bởi container.

    5. Tìm hiểu các Seccomp profile có sẵn và cách tùy chỉnh chúng cho phù hợp với ứng dụng của bạn.

Ngày 19:

  • Nội dung: Sử dụng các công cụ để kiểm tra và debug AppArmor, Seccomp (aa-status, aa-logprof, seccomp-tools).

  • Bài tập:

    1. Sử dụng aa-status để kiểm tra trạng thái của AppArmor trên node Kubernetes.

    2. Sử dụng aa-logprof để phân tích log của AppArmor và tìm ra các vi phạm.

    3. Sử dụng seccomp-tools để kiểm tra và debug Seccomp profile.

    4. Tìm hiểu các công cụ khác như bane hoặc tracee để kiểm tra và debug AppArmor và Seccomp.

    5. Thực hành kết hợp các công cụ để giải quyết các vấn đề liên quan đến AppArmor và Seccomp.

Ngày 20:

  • Nội dung: Các cơ chế cô lập tài nguyên của OS (namespace, cgroup), áp dụng cho container.

  • Bài tập:

    1. Tìm hiểu về namespace và cgroup trong Linux và cách chúng được sử dụng để cô lập tài nguyên.

    2. Sử dụng các lệnh như lsns, ps, cgexec để xem và quản lý namespace và cgroup.

    3. Tìm hiểu cách Kubernetes sử dụng namespace và cgroup để cô lập tài nguyên cho các container.

    4. Thực hành cấu hình namespace và cgroup cho các pod trong Kubernetes.

    5. Tìm hiểu các vấn đề thường gặp khi sử dụng namespace và cgroup và cách giải quyết chúng.

Ngày 21:

  • Nội dung: Kubernetes Secrets: tạo, sử dụng, bảo vệ (encryption at rest, hạn chế truy cập).

  • Bài tập:

    1. Tạo một Kubernetes Secret để lưu trữ thông tin nhạy cảm như mật khẩu hoặc khóa API.

    2. Sử dụng Kubernetes Secret trong pod để truy cập thông tin nhạy cảm.

    3. Kích hoạt tính năng encryption at rest để bảo vệ Kubernetes Secret.

    4. Sử dụng RBAC để hạn chế truy cập vào Kubernetes Secret.

    5. Tìm hiểu các cách khác nhau để quản lý và bảo vệ Kubernetes Secret.

Ngày 22:

  • Nội dung: Các giải pháp quản lý secrets nâng cao (HashiCorp Vault, AWS Secrets Manager).

  • Bài tập:

    1. Cài đặt và cấu hình HashiCorp Vault để quản lý secrets.

    2. Tích hợp HashiCorp Vault với Kubernetes để sử dụng secrets trong pod.

    3. Sử dụng AWS Secrets Manager để quản lý secrets trên AWS.

    4. Tích hợp AWS Secrets Manager với Kubernetes để sử dụng secrets trong pod.

    5. So sánh các giải pháp quản lý secrets khác nhau và lựa chọn giải pháp phù hợp cho môi trường của bạn.

Ngày 23:

  • Nội dung: Tìm hiểu gVisor, Kata Containers: cách hoạt động, ưu nhược điểm, cách sử dụng trong Kubernetes.

  • Bài tập:

    1. Cài đặt và cấu hình gVisor trên một cluster Kubernetes.

    2. Chạy một pod sử dụng gVisor và kiểm tra hoạt động của nó.

    3. So sánh hiệu năng của pod chạy với gVisor và pod chạy với Docker runtime.

    4. Cài đặt và cấu hình Kata Containers trên một cluster Kubernetes.

    5. So sánh ưu nhược điểm của gVisor và Kata Containers.

Ngày 24:

  • Nội dung: Cấu hình mTLS cho communication giữa các pod, sử dụng các công cụ (Istio, Linkerd).

  • Bài tập:

    1. Cài đặt và cấu hình Istio trên một cluster Kubernetes.

    2. Kích hoạt mTLS cho communication giữa các pod trong một namespace.

    3. Kiểm tra hoạt động của mTLS bằng cách sử dụng các công cụ như openssl.

    4. Cài đặt và cấu hình Linkerd trên một cluster Kubernetes.

    5. So sánh Istio và Linkerd về tính năng và hiệu năng.

Ngày 25:

  • Nội dung: Các vấn đề thường gặp khi sử dụng container runtime sandboxes và mTLS, cách khắc phục.

  • Bài tập:

    1. Tìm hiểu các vấn đề thường gặp khi sử dụng gVisor và Kata Containers, như hiệu năng giảm hoặc không tương thích với một số ứng dụng.

    2. Tìm hiểu các vấn đề thường gặp khi cấu hình mTLS, như certificate hết hạn hoặc cấu hình sai.

    3. Thực hành khắc phục các vấn đề thường gặp bằng cách sử dụng các công cụ và tài liệu hướng dẫn.

    4. Tìm hiểu các best practice để tránh gặp phải các vấn đề thường gặp khi sử dụng container runtime sandboxes và mTLS.

    5. Thực hành cấu hình gVisor, Kata Containers và mTLS trên một cluster Kubernetes phức tạp hơn.

Ngày 26:

  • Nội dung: Tối ưu image: chọn base image nhỏ gọn, loại bỏ các layer không cần thiết, sử dụng multi-stage builds.

  • Bài tập:

    1. Tìm hiểu các base image phổ biến và so sánh kích thước của chúng.

    2. Sử dụng các công cụ như dive để phân tích và tối ưu các layer trong image.

    3. Sử dụng multi-stage builds để tạo ra image nhỏ gọn hơn.

    4. Thực hành tối ưu image cho một ứng dụng đơn giản.

    5. Tìm hiểu các best practice về tối ưu image và áp dụng chúng vào thực tế.

Ngày 27:

  • Nội dung: Static analysis: sử dụng các công cụ (kube-score, conftest) để kiểm tra Kubernetes resources, Dockerfile.

  • Bài tập:

    1. Cài đặt và sử dụng kube-score để kiểm tra các Kubernetes resource.

    2. Phân tích kết quả của kube-score và đưa ra các cải tiến cho resource.

    3. Cài đặt và sử dụng conftest để kiểm tra Dockerfile.

    4. Viết các test case cho conftest để kiểm tra các quy tắc bảo mật trong Dockerfile.

    5. Tìm hiểu các công cụ static analysis khác và so sánh chúng với kube-score và conftest.

Ngày 28:

  • Nội dung: Bảo vệ supply chain: whitelist image registry, sign và verify image, sử dụng các công cụ (Notary, cosign).

  • Bài tập:

    1. Cấu hình whitelist image registry trong Kubernetes để chỉ cho phép pull image từ các registry đáng tin cậy.

    2. Sử dụng Notary để sign và verify image trước khi deploy lên Kubernetes.

    3. Sử dụng cosign để sign và verify image một cách đơn giản hơn.

    4. Tìm hiểu các công cụ khác như in-toto hoặc Clair để bảo vệ supply chain.

    5. Thực hành xây dựng một quy trình CI/CD để tự động sign và verify image trước khi deploy.

Ngày 29:

  • Nội dung: Các công cụ behavioral analytics (Falco, Sysdig), cài đặt, cấu hình rule, phân tích log.

  • Bài tập:

    1. Cài đặt Falco trên một cluster Kubernetes.

    2. Cấu hình các rule của Falco để phát hiện các hành vi bất thường trong cluster.

    3. Phân tích log của Falco để tìm ra các sự kiện đáng ngờ.

    4. Cài đặt Sysdig trên một cluster Kubernetes.

    5. Sử dụng Sysdig để giám sát hoạt động của cluster và phát hiện các mối đe dọa.

Ngày 30:

  • Nội dung: Các kỹ thuật phát hiện tấn công: signature-based, anomaly-based, behavior-based.

  • Bài tập:

    1. Tìm hiểu về các kỹ thuật phát hiện tấn công khác nhau và so sánh ưu nhược điểm của chúng.

    2. Sử dụng các công cụ như Falco hoặc Sysdig để thực hiện phát hiện tấn công dựa trên signature.

    3. Sử dụng các công cụ như Prometheus hoặc Grafana để thực hiện phát hiện tấn công dựa trên anomaly.

    4. Tìm hiểu các mô hình tấn công phổ biến và cách phát hiện chúng bằng các kỹ thuật khác nhau.

    5. Thực hành xây dựng một hệ thống phát hiện tấn công đơn giản cho một ứng dụng cụ thể.

Ngày 31:

  • Nội dung: Xây dựng hệ thống threat detection: thu thập log, phân tích, cảnh báo, response.

  • Bài tập:

    1. Xác định các nguồn log cần thu thập để phát hiện các mối đe dọa trong Kubernetes.

    2. Sử dụng các công cụ như Fluentd hoặc Logstash để thu thập và chuyển log đến một hệ thống tập trung.

    3. Sử dụng các công cụ như Elasticsearch hoặc Splunk để phân tích log và tìm ra các sự kiện đáng ngờ.

    4. Cấu hình các cảnh báo để thông báo cho quản trị viên khi phát hiện ra các mối đe dọa.

    5. Xây dựng quy trình response để xử lý các sự cố bảo mật.

Ngày 32:

  • Nội dung: Đảm bảo tính bất biến của container: sử dụng security context (readOnlyRootFilesystem), image scan.

  • Bài tập:

    1. Cấu hình readOnlyRootFilesystem trong security context để ngăn chặn các container ghi vào hệ thống file.

    2. Sử dụng các công cụ như Trivy hoặc Clair để scan image và phát hiện các lỗ hổng bảo mật.

    3. Tích hợp image scan vào quy trình CI/CD để đảm bảo chỉ các image an toàn mới được deploy.

    4. Tìm hiểu các biện pháp khác để đảm bảo tính bất biến của container, như sử dụng distroless image hoặc seccomp.

    5. Thực hành xây dựng một image bất biến và deploy nó lên Kubernetes.

Ngày 33:

  • Nội dung: Audit Logs trong Kubernetes: bật audit log, cấu hình các event cần ghi, phân tích log.

  • Bài tập:

    1. Kích hoạt audit log trên cluster Kubernetes.

    2. Cấu hình audit policy để ghi lại các event quan trọng như tạo, sửa, xóa resource, truy cập API.

    3. Sử dụng các công cụ như kubectl logs hoặc stern để xem audit log.

    4. Phân tích audit log để tìm ra các hoạt động bất thường hoặc vi phạm chính sách.

    5. Tìm hiểu cách lưu trữ và quản lý audit log một cách hiệu quả.

Ngày 34:

  • Nội dung: Sử dụng các công cụ để phân tích audit log (Elasticsearch, Kibana), xây dựng dashboard.

  • Bài tập:

    1. Cài đặt Elasticsearch và Kibana trên một máy chủ riêng hoặc sử dụng dịch vụ Elasticsearch trên cloud.

    2. Cấu hình Fluentd hoặc Filebeat để gửi audit log đến Elasticsearch.

    3. Sử dụng Kibana để phân tích audit log và tạo các dashboard trực quan.

    4. Tạo các visualization và dashboard để theo dõi các hoạt động quan trọng trong cluster.

    5. Tìm hiểu các cách khác nhau để phân tích audit log và xây dựng dashboard.

Ngày 35:

  • Nội dung: Ôn tập các kiến thức về Network Policies, Ingress, RBAC, Security Context, Pod Security Standards.

  • Bài tập:

    1. Tạo một Network Policy phức tạp để kiểm soát traffic giữa các namespace và các loại pod khác nhau.

    2. Cấu hình Ingress với các tính năng nâng cao như authentication, rate limiting, và load balancing.

    3. Thiết kế một hệ thống RBAC phân quyền chi tiết cho các thành viên trong nhóm.

    4. Sử dụng Pod Security Standards để áp dụng các chính sách bảo mật cho pod.

    5. Xem lại các khái niệm và kiến thức đã học về bảo mật mạng và kiểm soát truy cập trong Kubernetes.

Ngày 36:

  • Nội dung: Ôn tập các kiến thức về Secret Management, Image Security, Container Runtime, Audit Logs.

  • Bài tập:

    1. Tạo và quản lý các Secret trong Kubernetes, sử dụng các công cụ như Sealed Secrets hoặc Vault.

    2. Đánh giá và cải thiện tính bảo mật của image, sử dụng các công cụ như Trivy hoặc Clair.

    3. Tìm hiểu và sử dụng các container runtime khác nhau như gVisor hoặc Kata Containers.

    4. Phân tích audit log để tìm ra các hoạt động đáng ngờ và các lỗ hổng bảo mật.

    5. Xem lại các khái niệm và kiến thức đã học về bảo mật ứng dụng và dữ liệu trong Kubernetes.

Ngày 37:

  • Nội dung: Ôn tập các kiến thức về Threat Detection, Incident Response, Cluster Hardening.

  • Bài tập:

    1. Sử dụng các công cụ như Falco hoặc Sysdig để phát hiện các mối đe dọa trong Kubernetes.

    2. Xây dựng quy trình xử lý sự cố bảo mật cho Kubernetes.

    3. Áp dụng các biện pháp hardening cho cluster Kubernetes để giảm thiểu rủi ro tấn công.

    4. Tìm hiểu các phương pháp phòng thủ chiều sâu để bảo vệ cluster Kubernetes.

    5. Xem lại các khái niệm và kiến thức đã học về phát hiện và xử lý sự cố bảo mật trong Kubernetes.

Ngày 38: Network Policies và Ingress

  1. Tạo một NetworkPolicy để chỉ cho phép traffic từ namespace "frontend" đến namespace "backend".

  2. Tạo một NetworkPolicy để chặn tất cả traffic từ bên ngoài vào namespace "restricted".

  3. Tạo một Ingress để expose service "my-app" với path "/api" và cấu hình SSL/TLS.

  4. Cấu hình Ingress để chỉ cho phép traffic từ một dải IP cụ thể.

  5. Tạo một Ingress với multiple paths để expose các service khác nhau.

  6. Cấu hình Ingress để sử dụng basic authentication.

  7. Tạo một Ingress với sticky sessions.

  8. Cấu hình Ingress để sử dụng client certificate authentication.

  9. Tạo một Ingress với custom error pages.

  10. Cấu hình Ingress để sử dụng rate limiting.

  11. Tạo một Ingress với whitelisting IP.

  12. Cấu hình Ingress để sử dụng JWT authentication.

  13. Tạo một Ingress với multiple hosts.

  14. Cấu hình Ingress để sử dụng external authentication provider.

  15. Tạo một Ingress với custom headers.

  16. Cấu hình Ingress để sử dụng session affinity.

  17. Tạo một Ingress với IP whitelist và blacklist.

  18. Cấu hình Ingress để sử dụng mTLS giữa client và ingress controller.

  19. Tạo một Ingress với custom timeout cho connections.

  20. Cấu hình Ingress để sử dụng mutual TLS authentication.

Ngày 39: RBAC và Bảo mật Cluster

  1. Tạo một Role để cho phép read access vào Pods trong namespace "dev".

  2. Tạo một RoleBinding để gán Role cho một user cụ thể.

  3. Tạo một ClusterRole để cho phép read access vào Nodes.

  4. Tạo một ClusterRoleBinding để gán ClusterRole cho một group cụ thể.

  5. Sử dụng RBAC để hạn chế quyền của service account mặc định.

  6. Tạo một service account với quyền hạn tối thiểu để chạy một ứng dụng cụ thể.

  7. Sử dụng RBAC để ngăn chặn các user không có quyền tạo Pods.

  8. Cấu hình RBAC để chỉ cho phép admin user truy cập vào Secrets.

  9. Sử dụng RBAC để hạn chế quyền của node để đọc Secrets.

  10. Tạo một Role và RoleBinding để cho phép một ứng dụng đọc ConfigMaps trong namespace của nó.

  11. Sử dụng RBAC để hạn chế quyền sửa đổi của developer đối với resource Deployments.

  12. Cấu hình RBAC để cho phép một user chỉ có thể tạo và xóa Pods trong một namespace cụ thể.

  13. Sử dụng RBAC để hạn chế quyền truy cập vào các API groups khác nhau.

  14. Tạo một Role và RoleBinding để cho phép một ứng dụng ghi log vào một file cụ thể trên node.

  15. Sử dụng RBAC để hạn chế quyền truy cập vào các CRDs.

  16. Kiểm tra và cập nhật các component của Kubernetes theo CIS benchmark.

  17. Đảm bảo rằng etcd được cấu hình với mTLS.

  18. Đảm bảo rằng kubelet chỉ cho phép các công việc cần thiết và an toàn.

  19. Cấu hình kubelet để xác thực và ủy quyền các request từ API server.

  20. Đảm bảo rằng các dịch vụ của cluster như kubedns, metrics-server chỉ cho phép truy cập cần thiết.

Ngày 40: Bảo mật Container và Ứng dụng

  1. Cấu hình Security Context cho một Pod để chạy với non-root user.

  2. Cấu hình Security Context cho một Pod để chạy với read-only root filesystem.

  3. Sử dụng AppArmor để hạn chế các hành động của container.

  4. Sử dụng Seccomp để hạn chế các system calls mà container có thể thực hiện.

  5. Quét image của container để tìm các lỗ hổng bảo mật.

  6. Cấu hình PodSecurityPolicy để bắt buộc các Pod chạy với non-root user.

  7. Cấu hình PodSecurityPolicy để bắt buộc các container chạy với read-only root filesystem.

  8. Sử dụng mTLS để bảo vệ giao tiếp giữa các service trong cluster.

  9. Sử dụng Network Policy để hạn chế traffic giữa các Pod dựa trên labels.

  10. Quản lý secrets bằng cách sử dụng Secret resource.

  11. Sử dụng Vault để quản lý secrets cho ứng dụng.

  12. Cấu hình Pod để sử dụng init container nhằm đưa secrets vào container chính một cách an toàn.

  13. Sử dụng Node affinity và anti-affinity để cách ly các Pods không tin cậy.

  14. Sử dụng RuntimeClass để chọn container runtime phù hợp cho workload (ví dụ: gVisor, Kata Containers).

  15. Thực hiện phân tích tĩnh mã nguồn của ứng dụng để tìm các lỗ hổng bảo mật.

  16. Sử dụng Open Policy Agent để thực thi các chính sách bảo mật cho ứng dụng.

  17. Cấu hình network policy để hạn chế quyền truy cập từ bên ngoài vào các Pods.

  18. Sử dụng Istio để bảo vệ giao tiếp giữa các microservice.

  19. Sử dụng Linkerd để mã hóa traffic giữa các Pods.

  20. Giám sát và phát hiện các hành vi bất thường của container và host bằng công cụ như Falco.

Ngày 41: Đảm bảo tính bất biến của Container và Giám sát

  1. Sử dụng container và image scanning để phát hiện các lỗ hổng bảo mật.

  2. Sử dụng CodeQL hoặc công cụ tương tự để quét mã nguồn ứng dụng tìm lỗ hổng.

  3. Thiết lập cơ chế giám sát liên tục để theo dõi các vi phạm chính sách và các cảnh báo.

  4. Thiết lập hệ thống giám sát để phát hiện các hành vi bất thường (ví dụ: truy cập bất thường đến hệ thống tệp).

  5. Sử dụng cơ chế runtime detection để phát hiện các cuộc tấn công qua container.

  6. Sử dụng công cụ để tra cứu các lỗ hổng bảo mật đã biết trong các gói phụ thuộc của ứng dụng.

  7. Sử dụng công cụ để giám sát quyền truy cập của container vào host (ví dụ: AppArmor, SELinux).

  8. Sử dụng các công cụ như Anchore hoặc Clair để quét các image container.

  9. Sử dụng Grafeas để lưu trữ và truy vấn metadata của image và ứng dụng.

  10. Thực hiện audit và ghi nhật ký cho các hoạt động của ứng dụng và Kubernetes API.

  11. Sử dụng các công cụ như kubectl-who-can hoặc CanIhaz để kiểm tra quyền truy cập.

  12. Kiểm tra quá trình tạo và cập nhật Kubernetes resource để ngăn chặn việc triển khai bị xâm phạm.

  13. Thiết lập một hệ thống cảnh báo cho các sự kiện bảo mật.

  14. Sử dụng Falco để phát hiện các hành vi bất thường trong container và host.

  15. Sử dụng Sysdig để giám sát các file hoặc tệp nhạy cảm trong container.

  16. Sử dụng công cụ runtime security như Aquasec hoặc Twistlock để giám sát và bảo vệ container đang chạy.

  17. Sử dụng container-aware HIDS/HIPS để phát hiện các hoạt động đáng ngờ.

  18. Sử dụng kube-forensics hoặc công cụ tương tự để thu thập bằng chứng sau sự cố bảo mật.

  19. Thiết lập một quy trình incident response để xử lý các sự cố bảo mật.

  20. Sử dụng kube-hunter hoặc kube-bench để đánh giá tình trạng bảo mật của cluster.

Ngày 42: Bảo mật Chuỗi Cung ứng và Audit Logs

  1. Sử dụng whitelist cho các image registries được phép.

  2. Sử dụng công cụ như Notary hoặc Portieris để ký và xác minh các image.

  3. Thiết lập quá trình CI/CD bao gồm code scanning và image scanning.

  4. Sử dụng các phương pháp ký và xác minh như PGP signature để đảm bảo tính toàn vẹn của image.

  5. Sử dụng harbor hoặc công cụ tương tự để đảm bảo quyền truy cập và quản trị image.

  6. Thiết lập quy trình phê duyệt cho các image mới.

  7. Sử dụng Grafeas để ghi nhật ký metadata về container image và build process.

  8. Kiểm tra và đảm bảo rằng chỉ có các image đã được phê duyệt mới được triển khai.

  9. Bật và cấu hình Kubernetes audit logging.

  10. Sử dụng Falco hoặc công cụ tương tự để giám sát Kubernetes audit logs.

  11. Cấu hình Kubernetes để gửi audit logs đến hệ thống tập trung.

  12. Phân tích audit logs để tìm ra các hành động bất thường hoặc đáng ngờ.

  13. Sử dụng Open Policy Agent để đặt các chính sách cho việc ghi audit logs.

  14. Cấu hình RBAC để giới hạn quyền truy cập vào Kubernetes audit logs.

  15. Định kỳ xem xét và xoay vòng (rotate) các khóa ký cho image.

  16. Sử dụng mutual TLS hoặc công nghệ tương tự để bảo vệ quá trình truyền image.

  17. Sử dụng Notary hoặc công cụ tương tự để lưu trữ và lấy image signature.

  18. Thiết lập quy trình để cập nhật và vá lỗi các image cơ sở (base image) một cách kịp thời.

  19. Sử dụng các công cụ như kubesec hoặc kubeaudit để kiểm tra các cấu hình Kubernetes.

  20. Sử dụng các công cụ như Open Policy Agent hoặc Kyverno để thực thi các chính sách bảo mật cho toàn bộ cluster.

Ngày 43:

  1. Triển khai một ứng dụng web và cấu hình để chỉ cho phép truy cập từ một địa chỉ IP cụ thể.

  2. Tạo một pod với quyền truy cập vào một Secret và hiển thị giá trị của Secret đó.

  3. Tạo một Service Account với quyền chỉ đọc trong một namespace cụ thể.

  4. Sử dụng Network Policy để chặn tất cả lưu lượng giữa các pod trong cùng một namespace.

  5. Cấu hình Ingress để chỉ cho phép truy cập qua HTTPS với chứng chỉ TLS hợp lệ.

  6. Triển khai một ứng dụng sử dụng Init Container để kiểm tra sự tồn tại của một cơ sở dữ liệu trước khi khởi động.

  7. Cấu hình PodSecurityPolicy để yêu cầu tất cả các container chạy với quyền không phải root.

  8. Tạo một ClusterRole và ClusterRoleBinding để cấp quyền xem tất cả các tài nguyên trong cluster.

  9. Sử dụng SecurityContext để đặt SELinux labels cho một pod.

  10. Triển khai một ứng dụng với quyền truy cập vào một PersistentVolume sử dụng Access Modes phù hợp.

  11. Cấu hình Network Policy để cho phép lưu lượng giữa các pod dựa trên labels.

  12. Tạo một ServiceAccount với quyền tạo và xóa Secrets trong một namespace cụ thể.

  13. Sử dụng AppArmor để hạn chế quyền truy cập của một container vào hệ thống tệp tin của host.

  14. Cấu hình PodSecurityPolicy để yêu cầu tất cả các container chạy với một user cụ thể.

  15. Triển khai một ứng dụng với nhiều replica và cấu hình để đảm bảo tính sẵn sàng cao.

  16. Sử dụng Seccomp để hạn chế các lời gọi hệ thống mà một container có thể thực hiện.

  17. Tạo một Role và RoleBinding để cấp quyền đọc và ghi trong một namespace cụ thể.

  18. Cấu hình Ingress để sử dụng sticky sessions dựa trên cookies.

  19. Triển khai một ứng dụng với quyền truy cập vào một ConfigMap và sử dụng giá trị trong ConfigMap để cấu hình ứng dụng.

  20. Sử dụng PodSecurityPolicy để hạn chế việc sử dụng host network và host ports.

Ngày 44:

  1. Triển khai một ứng dụng và cấu hình để sử dụng một ServiceAccount cụ thể với các quyền hạn cần thiết.

  2. Sử dụng NetworkPolicy để cho phép lưu lượng giữa các namespace dựa trên labels.

  3. Tạo một PodSecurityPolicy để hạn chế khả năng mount volume của pod.

  4. Cấu hình Ingress để sử dụng mutual TLS authentication.

  5. Triển khai một ứng dụng với khả năng tự phục hồi (self-healing) bằng cách sử dụng Liveness và Readiness Probes.

  6. Sử dụng SecurityContext để đặt quyền truy cập vào /proc trong một container.

  7. Tạo một ClusterRole và ClusterRoleBinding để cấp quyền xem và tạo PersistentVolumes.

  8. Cấu hình PodSecurityPolicy để hạn chế việc sử dụng các container privileged.

  9. Triển khai một ứng dụng với quyền truy cập vào một Secret và sử dụng giá trị trong Secret để xác thực với một dịch vụ bên ngoài.

  10. Sử dụng Seccomp để hạn chế quyền truy cập vào /proc trong một container.

  11. Tạo một Role và RoleBinding để cấp quyền xem Pods và Logs trong một namespace cụ thể.

  12. Cấu hình Ingress để sử dụng external authentication provider như OAuth hoặc SAML.

  13. Triển khai một ứng dụng với nhiều container và sử dụng một container như một sidecar để cung cấp dịch vụ bổ sung.

  14. Sử dụng AppArmor để hạn chế khả năng ghi của một container vào hệ thống tệp tin của host.

  15. Tạo một PodSecurityPolicy để yêu cầu sử dụng ReadOnlyRootFilesystem cho tất cả các container.

  16. Cấu hình NetworkPolicy để cho phép lưu lượng từ external IP đến một pod cụ thể.

  17. Triển khai một ứng dụng với khả năng mở rộng tự động (autoscaling) dựa trên mức sử dụng CPU.

  18. Sử dụng Open Policy Agent (OPA) để thực thi các chính sách bảo mật nâng cao cho Kubernetes.

  19. Tạo một ClusterRole và ClusterRoleBinding để cấp quyền quản lý Secrets trong tất cả các namespace.

  20. Cấu hình Ingress để sử dụng rate limiting cho các yêu cầu đến.

Ngày 45:

  1. Triển khai một ứng dụng và cấu hình để sử dụng một init container để thực hiện các tác vụ chuẩn bị trước khi ứng dụng chính bắt đầu.

  2. Sử dụng PodSecurityPolicy để hạn chế việc chạy các container với quyền root.

  3. Tạo một Role và RoleBinding để cấp quyền quản lý Deployments, ReplicaSets và Pods trong một namespace cụ thể.

  4. Cấu hình NetworkPolicy để hạn chế lưu lượng giữa các pods dựa trên cả labels và namespaces.

  5. Triển khai một ứng dụng với khả năng rolling update và rollback.

  6. Sử dụng Seccomp để hạn chế quyền truy cập vào /sys trong một container.

  7. Tạo một ClusterRole và ClusterRoleBinding để cấp quyền xem và tạo NetworkPolicies.

  8. Cấu hình Ingress để sử dụng mTLS để bảo vệ giao tiếp giữa client và server.

  9. Triển khai một ứng dụng với khả năng tự động phục hồi từ lỗi bằng cách sử dụng PodDisruptionBudget.

  10. Sử dụng AppArmor để hạn chế quyền thực thi của một container.

  11. Tạo một PodSecurityPolicy để yêu cầu sử dụng một user không phải root cho tất cả các container.

  12. Cấu hình NetworkPolicy để cho phép lưu lượng từ pods trong một namespace đến pods trong một namespace khác dựa trên labels.

  13. Triển khai một ứng dụng với khả năng lưu trữ dữ liệu liên tục bằng cách sử dụng PersistentVolumes và PersistentVolumeClaims.

  14. Sử dụng Falco để giám sát và phát hiện các hành vi bất thường trong cluster.

  15. Tạo một Role và RoleBinding để cấp quyền xem ConfigMaps và Secrets trong một namespace cụ thể.

  16. Cấu hình Ingress để sử dụng OAuth2 để xác thực và phân quyền người dùng.

  17. Triển khai một ứng dụng với khả năng cân bằng tải (load balancing) giữa các replicas.

  18. Sử dụng Sysdig để giám sát hiệu suất và bảo mật của cluster Kubernetes.

  19. Tạo một ClusterRole và ClusterRoleBinding để cấp quyền quản lý RBAC (vai trò và ràng buộc vai trò) trong cluster.

  20. Cấu hình PodSecurityPolicy để hạn chế việc sử dụng cấp phép (privileged) và chia sẻ không gian tên của host (host namespace).

Bài tập thêm

  1. Tạo một NetworkPolicy để ngăn chặn tất cả các pods trong namespace "default" giao tiếp với nhau.

  2. Sử dụng CIS benchmark để đánh giá và cải thiện cấu hình bảo mật cho etcd, kubelet, kubedns và kubeapi.

  3. Cấu hình Ingress để chỉ cho phép truy cập qua HTTPS và sử dụng chứng chỉ SSL hợp lệ.

  4. Sử dụng NetworkPolicy để hạn chế quyền truy cập vào các endpoints của node.

  5. Tắt và xóa quyền truy cập vào Kubernetes Dashboard.

  6. Xác minh tính toàn vẹn của các tệp nhị phân (binaries) của Kubernetes trước khi triển khai.

  7. Sử dụng RBAC để hạn chế quyền truy cập vào Kubernetes API cho các ServiceAccount.

  8. Tạo một Role và RoleBinding để chỉ cho phép một ServiceAccount cụ thể đọc Secrets trong một namespace.

  9. Vô hiệu hóa ServiceAccount mặc định trong một namespace.

  10. Cập nhật cluster Kubernetes lên phiên bản mới nhất và kiểm tra các lỗ hổng bảo mật đã được vá.

  11. Giảm thiểu số lượng gói phần mềm và dịch vụ không cần thiết trên các node của cluster.

  12. Sử dụng IAM roles với quyền tối thiểu cần thiết cho các Kubernetes components.

  13. Hạn chế quyền truy cập vào mạng của cluster từ bên ngoài bằng cách sử dụng network policies và firewalls.

  14. Cấu hình AppArmor hoặc SELinux cho các node của cluster.

  15. Sử dụng seccomp để giới hạn các syscalls mà một container có thể sử dụng.

  16. Thiết lập các cơ chế bảo mật phù hợp ở cấp độ hệ điều hành cho các node của cluster.

  17. Lưu trữ Secrets trong Kubernetes bằng cách sử dụng mã hóa và giới hạn quyền truy cập.

  18. Triển khai ứng dụng sử dụng gVisor hoặc Kata Containers để cô lập tài nguyên.

  19. Cấu hình mTLS cho giao tiếp giữa các pods trong cluster.

  20. Sử dụng distroless images hoặc tối giản base image để giảm bề mặt tấn công.

  21. Thiết lập hệ thống CI/CD để ký và xác minh tính toàn vẹn của images trước khi triển khai.

  22. Sử dụng công cụ như Kubesec để phân tích và đánh giá bảo mật của các tệp cấu hình Kubernetes.

  23. Quét images để tìm các lỗ hổng đã biết bằng công cụ như Trivy hoặc Clair.

  24. Sử dụng công cụ như Falco để giám sát và phát hiện hành vi bất thường của container và host.

  25. Thiết lập giám sát toàn diện cho cơ sở hạ tầng, ứng dụng, mạng, dữ liệu, người dùng và workloads.

  26. Sử dụng giải pháp phát hiện mối đe dọa đa tầng để bao quát tất cả các giai đoạn của cuộc tấn công.

  27. Thực hiện phân tích chi tiết và điều tra để xác định các tác nhân xấu trong môi trường.

  28. Sử dụng công nghệ như container immutability để ngăn chặn sự thay đổi của container trong quá trình chạy.

  29. Bật và cấu hình Kubernetes audit logging để theo dõi và giám sát các hoạt động truy cập và thay đổi.

  30. Sử dụng Falco hoặc công cụ tương tự để giám sát và cảnh báo về hành vi bất thường của hệ thống và ứng dụng.

  31. Tạo một PodSecurityPolicy để hạn chế các quyền của Pod, như ngăn chặn chạy container với quyền root.

  32. Sử dụng Open Policy Agent (OPA) để thực thi các chính sách bảo mật nâng cao cho cluster.

  33. Cấu hình Kubernetes API Server để sử dụng mTLS cho tất cả các kết nối đến.

  34. Sử dụng cert-manager để tự động hóa việc cung cấp và gia hạn chứng chỉ SSL/TLS cho Ingress.

  35. Thiết lập network policy để hạn chế quyền truy cập giữa các namespaces.

  36. Sử dụng Kubernetes Secrets để lưu trữ và quản lý các thông tin nhạy cảm như mật khẩu, khóa API.

  37. Đánh giá và tối ưu hóa việc sử dụng ServiceAccount trong cluster, loại bỏ các quyền không cần thiết.

  38. Thực hiện quét bảo mật định kỳ cho tất cả các container và pods đang chạy trong cluster.

  39. Sử dụng RuntimeClass để chỉ định sử dụng container runtime bảo mật như gVisor hoặc Kata Containers cho các pods nhạy cảm.

  40. Triển khai hệ thống phát hiện xâm nhập (IDS) để giám sát và cảnh báo về các hoạt động đáng ngờ trong cluster.

  41. Sử dụng công cụ như Anchore hoặc Aqua để quét và đánh giá sự phù hợp của các container image.

  42. Thực hiện đánh giá rủi ro và kiểm tra thâm nhập (penetration testing) định kỳ cho cluster.

  43. Xây dựng quy trình ứng phó sự cố và diễn tập để đảm bảo sẵn sàng trong trường hợp xảy ra các sự cố bảo mật.

  44. Sử dụng Kubernetes Network Policies để kiểm soát lưu lượng mạng giữa các pods và namespaces.

  45. Triển khai và cấu hình hệ thống giám sát như Prometheus và Grafana để theo dõi các chỉ số hoạt động và hiệu suất của cluster.

  46. Sử dụng công cụ như kubetail hoặc stern để giám sát và phân tích log của các pods.

  47. Thiết lập quy trình bảo trì và cập nhật thường xuyên cho các thành phần và thư viện của Kubernetes.

  48. Sử dụng Kyverno hoặc công cụ tương tự để thực thi các chính sách bảo mật ở mức cluster.

  49. Đánh giá và áp dụng các khuyến nghị bảo mật từ Kubernetes Security Benchmarks và các bảng xếp hạng bảo mật khác.

  50. Thực hiện kiểm tra quyền truy cập định kỳ và loại bỏ các quyền và vai trò không sử dụng trong cluster.