Tổng quan đồ án
Trong thời đại phát triển nhanh chóng, đặc biệt với các nhóm ngành về công nghệ thông tin, các doanh nghiệp từ nhỏ cho đến lớn đều cố gắng áp dụng những thay đổi mới nhất về công nghệ thông tin để phát triển tiềm năng của một doanh nghiệp. Các dịch vụ do doanh nghiệp cung cấp được phổ biến thông qua các ứng dụng web hoặc xây dựng hạ tầng hệ thống của doanh nghiệp đều sử dụng một quy trình triển khai thủ công.
Do đó, để khắc phục thách thức trên, một số doanh nghiệp đã thay thế quy trình triển khai thủ công thành quy trình triển khai tự động với các lợi ích rất lớn như việc tiết kiệm thời gian và giảm chi phí vận hành doanh nghiệp một cách đáng kể. Bên cạnh đó, việc áp dụng quy trình triển khai tự động còn giúp việc triển khai hạ tầng hệ thống và các dịch vụ được diễn ra một cách nhanh chóng, nhất quán mà vẫn đảm bảo được độ chính xác cao do tất cả các quy trình đều diễn ra một cách tự động. Nếu như có bất cứ thay đổi nào có thể gây ra lỗi thì quy trình triển khai tự động có thể phát hiện và không áp dụng thay đổi đấy vào việc triển khai, giúp giảm thiểu tối đa sai sót trong thời gian hoạt động của hạ tầng hoặc dịch vụ.
Thông thường, các dịch vụ mà doanh nghiệp muốn mang đến khách hàng sẽ được triển khai vào hệ thống website. Việc phát triển các dịch vụ sẽ bắt đầu từ việc thiết kế chức năng cho từng dịch vụ và hiện thực hóa các chức năng thông qua các đoạn mã. Sau đó những đoạn mã sẽ được kiểm thử để giám định chất lượng, mức độ hiệu quả của các chức năng trong dịch vụ trước khi được triển khai vào hệ thống website. Đây là một quy trình triển khai thông thường đối với việc phát triển một dịch vụ bất kỳ để phục vụ cho doanh nghiệp
Tuy nhiên, quy trình triển khai trên là một quy trình thủ công và sẽ làm giảm hiệu suất công việc, kéo dài thời gian triển khai dịch vụ do từng giai đoạn trong quy trình làm việc đều phải do con người thực hiện và quản lý một cách thủ công. Nếu như doanh nghiệp muốn mở rộng quy mô hệ thống hoặc bảo trì hệ thống, đặc biệt khi hệ thống bị lỗi, toàn bộ hệ thống phải ngưng hoạt động để quy trình làm việc
thủ công được áp dụng lại, bổ sung thêm các dịch vụ mới hoặc phát hiện và khắc phục lỗi đang tồn tại trong hệ thống. Đây là một sự thiếu linh hoạt, hiệu quả trong quy trình triển khai thủ công, đồng thời là một thách thức đối với doanh nghiệp bởi vì điều này làm kéo dài thời gian và làm gia tăng chi phí vận hành của doanh nghiệp trước khi hệ thống được đưa vào hoạt động trở lại, ngoài ra còn có thể gây ra ảnh hưởng tiêu cực đối với một chức năng, một dịch vụ, hoặc tệ hơn là lỗi trên toàn bộ hệ thống, từ đó dẫn đến sự sụp đổ của một hệ thống nếu trong chính quy trình triển khai có một quy trình bất kỳ hoạt động sai cách.
Do đó, để khắc phục thách thức trên, một số doanh nghiệp đã thay thế quy trình triển khai thủ công thành quy trình triển khai tự động với các lợi ích rất lớn như việc tiết kiệm thời gian và giảm chi phí vận hành doanh nghiệp một cách đáng kể. Bên cạnh đó, việc áp dụng quy trình triển khai tự động còn giúp việc triển khai hạ tầng hệ thống và các dịch vụ được diễn ra một cách nhanh chóng, nhất quán mà vẫn đảm bảo được độ chính xác cao do tất cả các quy trình đều diễn ra một cách tự động. Nếu như có bất cứ thay đổi nào có thể gây ra lỗi thì quy trình triển khai tự động có thể phát hiện và không áp dụng thay đổi đấy vào việc triển khai, giúp giảm thiểu tối đa sai sót trong thời gian hoạt động của hạ tầng hoặc dịch vụ.

Mục tiêu đề tài
- Vận dụng các kiến thức đã được học vào đề tài mà nhóm thực hiện.
- Tạo quy trình triển khai tự động có hiệu suất cao, tốc độ xử lý nhanh chóng và có khả năng mở rộng hệ thống linh hoạt trong bất cứ điều kiện.
- Tối ưu hóa quy trình triển khai tự động hóa bằng việc tích hợp quy trình bảo mật vào toàn bộ các giai đoạn của quy trình triển khai tự động, nâng cao chất lượng bảo mật của toàn bộ quy trình, hệ thống và các thành phần liên quan.
Cơ sở lý thuyết
1. Checkov
Checkov là một công cụ mã nguồn mở (open-source tool), được dùng cho việc phân
tích và kiểm tra cơ sở hạ tầng dưới dạng code (Infrastructure as Code). Công cụ này
được phát triển bởi Bridgecrew và hiện đang thuộc sở hữu của Prisma Cloud.
2. Terraform
Terraform là một công cụ mã nguồn mở (open-source tool) do HashiCorp phát triển, cung cấp cho lập trình viên khả năng định nghĩa, xây dựng cơ sở hạ tầng dưới dạng code (IaC) với các nhà cung cấp dịch vụ đám mây (Cloud Provider) như Amazon Web Services, Microsoft Azure, Google Cloud Platform,…
Với tính chất mã nguồn mở và miễn phí nên Terraform rất được ưa chuộng và sử dụng bởi những nhóm DevOps để phục vụ việc tự động hóa, quản lý tài nguyên, cơ sở dữ liệu của máy chủ (Server) và các công việc liên quan đến hạ tầng.

3. Docker
Docker là một nền tảng phần mềm cho phép các lập trình viên hoặc quản trị viên hệ thống thực hiện triển khai ứng dụng một cách nhanh chóng nhờ vào Container.
Container chứa các phần mềm, thư viện, công cụ hệ thống, mã ứng dụng cần thiết để tạo nên môi trường độc lập và tách biệt, giúp khởi chạy và phát triển ứng dụng dựa vào môi trường được chứa trong Container.

4. EKS – Kubernetes
Amazon Elastic Kubernetes Serivce (EKS) là một dịch vụ Kubernetes được quản lý để chạy Kubernetes trên AWS hay có thể coi là một hệ tính toán phân bố, giúp tự động hoá mức độ sẵn sàng (Availability) và khả năng mở rộng (Scalability) của các Node.
5. AWS CloudWatch
Amazon CloudWatch là một dịch vụ giám sát và quản lý thông qua việc cung cấp dữ liệu và thông tin chuyên sâu hữu ích về các tài nguyên cơ sở hạ tầng cũng như các dịch vụ của AWS.
6. Github Actions
Github Actions là một nền tảng được tích hợp sẵn trên Github, cho phép các lập trình viên tạo quy trình CI/CD ngay trên chính Github để tự động hóa toàn bộ việc phát triển và triển khai phần mềm.
Với Github Actions, lập trình có thể tạo các quy trình làm việc (workflow) nhất định như xây dựng, kiểm thử, triển khai. Các quy trình làm việc được tạo sẽ tự động thực hiện các tác vụ nhất định do lập trình viên quy định khi có sự thay đổi trong kho chứa (repository).
7. Gitleaks
Gitleaks là một công cụ mã nguồn mở, thuộc nhóm ứng dụng kiểm tra bảo mật tĩnh (Static Application Security Testing), được sử dụng để phát hiện và ngăn chặn việc vô tình hoặc cố ý đưa các thông tin nhạy cảm như mật khẩu, khóa API hoặc token vào trong kho chứa Git
8. Semgrep
Semgrep là một nền tảng bảo mật ứng dụng, thuộc nhóm ứng dụng kiểm tra bảo mật tĩnh (Static Application Security Testing) được dùng để tìm lỗi trong mã nguồn, phát hiện lỗ hổng trong các Dependency của dự án. Trọng tâm của Semgrep là hiển thị kết quả thân thiện với lập trình viên và có tốc độ xử lý nhanh.
9. Dependency-check
Dependency-Check là một công cụ phân tích thành phần phần mềm (Software Composition Analysis) được cung cấp bởi OWASP(Open Web Application Security Project), giúp phát hiện các lỗ hổng công khai đang tồn tại trong các Dependency trong dự án. Công cụ này hoạt động bằng cách xác định liệu trong những Dependency của dự án có tồn tại trong bảng liệt kê nền tảng chung (Common Platform Enumeration).
10. Defectdojo
Defectdojo là một công cụ quản lý lỗ hổng ứng dụng mã nguồn mở, thuộc nhóm ứng dụng quản lý trạng thái bảo mật (Application Security Posture Management), cho phép lập trình viên đánh giá mức độ rủi ro bảo mật của ứng dụng, giám sát và phát hiện các vấn đề bảo mật thông qua các công cụ phân tích mã nguồn tĩnh (SAST) hay công cụ phân tích mã nguồn động (DAST), từ đó quản lý và ưu tiên cải thiện, khắc phục trạng thái bảo mật của các ứng dụng trong dự án.
11. Amazon Elastic Container Registry (ECR)
Amazon Elastic Container Registry là một dịch vụ thuộc hệ sinh thái AWS được dùng để đăng ký và lưu trữ các Docker Container trên dịch vụ đám mây. Amazon ECR hỗ trợ các kho lưu trữ Container riêng tư thông qua các quyền truy cập được triển khai trên dịch vụ AWS IAM (Identity and Access Management), từ đó cho phép người dùng được tiếp cận với các kho chứa của Docker.
12. Trivy
Trivy là một công cụ quét lỗ hổng bảo mật đơn giản và toàn diện được phát triển bởi Aqua Security, tương thích với nhiều bộ đăng ký Container Registry như Docker Hub, Google Container Registry và Amazon Elastic Container Registry.
13. SonarCloud
SonarCloud là dịch vụ được phát triển bởi SonarSouce, cung cấp các công cụ phân tích mã nguồn nhằm cải thiện chất lượng mã nguồn, đảm bảo mã không tồn tại lỗ hổng bảo mật trong quá trình đẩy và sát nhập mã vào kho chứa, ngoài ra đảm bảo khả năng bảo trì của mã.
14. Zap
ZAP (Zed Attack Proxy) hay tiền thân là OWASP ZAP, là một công cụ kiểm thử thâm nhập mã nguồn mở (Open-source penetrating testing) để tìm ra các lỗ hổng trong ứng dụng web. Nguyên lý hoạt động của ZAP như một Proxy giữa trình duyệt và ứng dụng web nhằm kiểm tra và phân tích các yêu cầu, phản hồi của HTTP/HTTPS mà phát hiện các lỗ hổng bảo mật.
15. Grafana – Prometheus
Grafana và Prometheus là hai công cụ phổ biến được sử dụng trong giám sát và quản lý hệ thống. Chúng thường được sử dụng cùng nhau để cung cấp một giải pháp giám sát toàn diện.
16. ELK Stack
ELK Stack là viết tắt của bộ ba công cụ mã nguồn mở phổ biến trong việc phân tích và ghi lại thông tin hoạt động của các hệ thống và ứng dụng gồm: Elasticsearch, Logstash và Kibana. Trong thời gian gần đây, ELK Stack mở rộng và thêm Beats vào stack, một công cụ thu thập dữ liệu.


17. RabbitMQ
RabbitMQ là một hệ thống hàng đợi tin nhắn mã nguồn mở, được phát triển dựa trên giao thức AMQP (Advanced Message Queuing Protocol) nhằm quản lý và điều phối các thông điệp giữa các dịch vụ, giúp cho các ứng dụng có thể giao tiếp với nhau một cách hiệu quả.

18. Memcached
Memcached là một hệ thống lưu trữ bộ nhớ đệm (Cache) phân tán thông qua việc lưu trữ dữ liệu và các đối tượng của ứng dụng vào trong RAM để tăng tốc độ truy xuất cho ứng dụng, giảm tải các truy vấn lên cơ sở dữ liệu và giảm thời gian chờ đợi trong lúc truy xuất.

19. MySQL
MySQL là một hệ quản trị cơ sở dữ liệu mã nguồn mở (RDBMS), quản lý các dữ liệu thông qua cơ sở dữ liệu, được sử dụng rộng rãi trong các ứng dụng web. MySQL do Oracle phát triển và ngôn ngữ truy vấn dữ liệu có cấu trúc (Structured Query Language) là ngôn ngữ chính được sử dụng nên người dùng rất dễ sử dụng và tương tác với cơ sở dữ liệu
20. Top 10 OWASP
Dự án bảo mật ứng dụng toàn cầu mở (Open Web Application Security Project) là một tổ chức phi lợi nhuận quốc tế chuyên về bảo mật ứng dụng web. Các tài liệu về bảo mật được các chuyên gia về an ninh mạng tích lũy và chia sẻ công khai với mục đích giúp mọi người cải thiện tính bảo mật của ứng dụng web. OWASP mang đến cho cộng đồng nhiều tài liệu hướng dẫn, công cụ để giúp các lập trình viên và nhà phát triển nâng cao bảo mật của các ứng dụng web trong quá trình phát triển.
Thực hiện đề tài

Kết luận
Thông qua tìm hiểu lý thuyết, nhóm chúng em đã khám phá thêm được các công nghệ tuy quen thuộc nhưng mới đối với nhóm, biết cách vận hành của DevOps Pipeline, từ đó tích hợp thêm quy trình bảo mật để trở thành DevSecOps Pipeline, tối ưu hóa khả năng bảo mật cho quy trình CI/CD. Ngoài ra, nhóm đã thành công triển khai ứng dụng vào DevSecOps Pipeline. Do thời gian còn hạn hẹp nên nhóm chưa tập trung nhiều vào các chức năng cho ứng dụng.
Các vấn đề về kỹ thuật, nhóm đã đạt được:
- Nâng cao khả năng đọc và tìm tài liệu cần thiết, khả năng phân tích hệ thống cho hạ tầng Cloud và cách thiết kế nên một ứng dụng.
- Hạ tầng Cloud tích hợp được các dịch vụ bên ngoài vào như Helm để tạo và quản lý các Charts cho các Kubernetes Cluster.
- Viết các bài kiểm thử để đánh giá các API backend của ứng dụng có thực hiện đúng như mong muốn.
- Hiểu biết và áp dụng các công cụ kiểm thử và đánh giá mã nguồn như Checkov và SonarCloud.
- Hiểu biết và áp dụng các công cụ giám sát hệ thống mạnh mẽ như Prometheus-Grafana để kiểm soát được trạng thái của hệ thống nhằm đưa ra các giải pháp cần thiết khi hệ thống gặp sự cố.
- Hiểu biết và áp dụng các công cụ kiểm thử và đánh giá bảo mật SAST và DAST xuyên suốt quy trình CI/CD để đảm bảo chất lượng bảo mật từ mã nguồn ứng dụng, Image đến hạ tầng Cloud


