Khái niệm Agile viết tắt của Agile Software Development có nghĩa là phương pháp phát triển phần mềm linh hoạt, được ứng dụng trong quy trình phát triển phần mềm với mục tiêu là đưa sản p
Trang 1ĐẠI HỌC QUỐC GIA THÀNH PHÓ HÒ CHÍ MINH @
TRUONG ĐẠI HỌC CÔNG NGHỆ THONG TIN KHOA MẠNG MAY TÍNH VÀ TRUYEN THONG
Sco => LL cose cos
Z
NGUYEN HUỲNH TRỌNG NGHĨA
NGUYÊN HỮU THẮNG
KHÓA LUẬN TÓT NGHIỆP
XÂY DỰ HỆ THONG DEVOPS TREN NEN TANG MÃ NGUÒN MỞ
VÀ TÍCH HỢP CÁC GIẢI PHÁP BAO MAT DE TANG ĐỘ AN
TOAN CUA HE THONG DEVOPS
BUILDING UP DEVOPS SYSTEM BASE-ON OPEN SOURCES
AND INTEGRATED SECURITY SOLUTION INTO DEVOPS
Trang 2ĐẠI HỌC QUỐC GIA THÀNH PHÓ HÒ CHÍ MINH
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN
KHOA MẠNG MAY TÍNH VÀ TRUYEN THONG
NGUYEN HUYNH TRONG NGHIA — 18521146 NGUYEN HUU THANG — 18521395
KHOA LUAN TOT NGHIEP
XAY DUNG HE THONG DEVOPS TREN NEN
TANG MA NGUON MO VA TICH HOP CAC GIAIPHAP BAO MAT DE TANG ĐỘ AN TOAN CUA
HE THONG DEVOPS
BUILDING UP DEVOPS SYSTEM BASE-ON OPEN SOURCES AND INTEGRATED SECURITY
SOLUTION INTO DEVOPS SYSTEM.
KY SU NGANH AN TOAN THONG TIN
GIANG VIEN HUONG DAN
THS NGUYEN DUY
TP HO CHi MINH, NAM 2022
Trang 3THÔNG TIN HỘI ĐÒNG CHÁM KHÓA LUẬN TÓT NGHIỆP
Hội đồng chấm khóa luận tốt nghiệp, thành lập theo Quyết định số
TIBẦY c-cccccc của Hiệu trưởng Trường Đại học Công nghệ Thông tin.
Trang 4LỜI CẢM ƠN
Dé hoàn thành khóa luận tốt nghiệp này, bên cạnh sự cô gắng nỗ
lực không ngừng của bản thân, nhóm xin được bày tỏ lòng biết ơn
chân thành đến các thầy cô, các anh chị, bạn bè vì đã tận tình hỗ trợ
nhóm trong suốt thời gian thực hiện khóa luận tốt nghiệp.
Nhóm tác giả xin gửi lời cảm ơn chân thành và lòng biết ơn sâu sắc
đến các thầy, cô trường Dai học Công nghệ Thông tin và các thay,
cô Khoa Mạng máy tính và Truyền thông của trường đã tận tình hướng dẫn, truyền đạt kiến thức trong quá trình học tập và nghiên cứu Những kiến thức được trau dôi, học hỏi trong quá trình học tập tại trường không chỉ là nền tảng cho quá trình hoàn thành khóa luận
tốt nghiệp mà còn là nền tang vững chắc để có thé phát triển trên
con đường sự nghiệp sau này.
Quan trọng nhất, nhóm tác giả xin gửi lời cảm ơn đến Ths.Nguyễn Duy đã hỗ trợ hết mình cũng như tạo mọi điều kiện để bọn em có thé thực hiện và hoàn thành tốt khóa luận.
Cuối cùng, chúng tôi xin cảm ơn đến gia đình, bạn bè đã tao tiền
đề, khích lệ, động viên để nhóm có thể hoàn thành đề tài này.
Mặc dù đã cố gắng hết sức trong quá trình làm khoá luận tốt
nghiệp, nhưng chắc chắn rằng nhóm sẽ không thể tránh khỏi những sai sót do bản thân vẫn còn nhiều hạn chế về kiến thức
chuyên môn cũng như những kinh nghiệm thực tiễn Chúng em
kính mong nhận được sự thông cảm và những lời góp ý quý báu
từ quý thầy cô đề có thể hoàn thiện bản thân mình hơn nữa.
Chúng tôi xin chân thành cảm ơn!
Trang 5ĐẠI HỌC QUOC GIA TP HO CHÍMINH CONG HÒA XÃ HOICHU NGHĨA VIỆT NAM
TRƯỜNG ĐẠI HỌC Độc Lập - Tự Do - Hạnh Phúc
CÔNG NGHỆ THÔNG TIN
DE CƯƠNG CHI TIẾT
TÊN ĐÈ TÀI:
- _ Tên tiếng Việt: "Xây dựng hệ thống DevOps trên nền tảng mã nguồn mở và tích
hop các giải pháp bảo mật dé tăng độ an toàn của hệ thống DevOps."
- _ Tên tiếng Anh: Building up DevOps system base-on Opensources and Integrated
security solution into DevOps system.
Cán bộ hướng dẫn: ThS Nguyễn Duy
Thời gian thực hiện: Từ ngày 1/03/2022 đến ngày 12/06/2022
Sinh viên thực hiện:
Nguyễn Huỳnh Trọng Nghĩa - MSSV: 18521146 — Số điện thoại: 0335615576
Nguyễn Hữu Thắng — MSSV: 18521395 — Số điện thoại: 0898502967
Nội dung đề tài:
1 Tổng quan về đề tài
Ngành phát triển phần mềm đã có hơn nửa thé ki hình thành và đang càng ngày phổ biến
rộng rãi ở hau hết các công ty liên quan đến công nghệ thông tin tuy nhiên việc phát triển
phần mềm va quản trị các dự án phần mềm chưa bao giờ hết thử thách Rất nhiều những
vân đề cứ không ngừng lặp đi lặp lại, làm đau đầu đội ngũ phát triển và các nhà quản trị.
Trang 6Từ đó, nhu cầu về các phương pháp phát triển phần mềm luôn luôn cần có sự cải tiễn với
mục đích nâng cao chất lượng sản phẩm cũng như rút ngắn thời gian phát triển -đưa sản tới cho khách hàng [1] Phương pháp Agile ra đời trong bối cảnh ngành phát triển phần
mềm gặp nhiều thử thách với cách thức phát triển truyền thống theo mô hình thác nước
(waterfall), hoặc dựa theo kế hoạch (plan-driven) Khái niệm Agile (viết tắt của Agile
Software Development) có nghĩa là phương pháp phát triển phần mềm linh hoạt, được ứng dụng trong quy trình phát triển phần mềm với mục tiêu là đưa sản phẩm đến tay người dùng càng nhanh càng tốt, tập trung vào việc cảm nhận và đáp ứng các yêu cầu của người
dùng dé đưa ra những thay đổi phù hợp [2] Ngoài Agile, có một phương pháp phát triển phần mềm rat phổ biến và được nhiều doanh nghiệp áp dụng đó chính là DevOps Không
có bất kỳ một định nghĩa duy nhất nào cho DevOps Tuy nhiên có thể hiểu đơn giản,
Devops là sự kết hợp của nhiều triết lý văn hóa, biện pháp thực hành và các công cụ nhằm
giúp cho khả năng phân phối của ứng dụng, dịch vụ của tô chức phát triển với tốc độ cao hơn Quá trình phát triển và cải tiến sản phẩm sẽ phát trién với nhịp độ nhanh hơn Các tổ chức có thể sử dụng quy trình quản lý cho các cơ sở hạ tầng và phát triển phần mềm theo
thiên hướng truyền thống [3] DevOps đã cung cấp cho các tổ chức một phương pháp để đáp ứng nhu cầu kinh doanh nhanh chóng hơn Các công cụ DevOps đang phát triển nhanh
chóng Tuy nhiên nếu chỉ nói về DevOps không là chưa đủ Những lo ngại về bảo mật
đang đang là mối quan tâm của các tổ chức Thậm chí mối lo về bảo mật có thể là nguyên
nhân làm dừng hoặc trì hoãn việc triển khai ứng dụng đối với nhiều tổ chức [4] Chính vì
lí do đó, việc tích hợp các công cụ bảo mật trong DevOps là hết sức cần thiết trong bồi
cảnh hiện nay.
DevSecOps tích hợp bảo mật của tổ chức vào DevOps truyền thông với mục tiêu triển khai — tích hợp các biện pháp bảo mật tron quá trình phát triển và sản xuất phần
mềm, bổ sung thêm một lớp phòng thủ khác, chống lại vi phạm dữ liệu và tan công
mạng Mô hình DevSecOps có thể đáp ứng được những nhu cầu trong quá trình phát
Trang 7triển phần mềm như năng giảm thời gian phát trién và phát hành phần mềm, đồng thời
đảm bảo chất lượng, tính bảo mật cao cho hệ thống và ứng dụng [5].
2 Tính mới và khả năng ứng dụng thực tế của đề tài
2.1 Tinh mới:
Chu trình phát triển phần mềm (Software Development Life Cycle) bao gồm hai
giai đoạn chính: phát triển và vận hành Hai giai đoạn này tương đối tách rời nhau, đặc biệt là ở các công ty có quy mô trung bình trở lên Tuy nhiên, nhằm tối ưu hóa chu trình phát triển phần mềm, giúp sản phẩm công nghệ được release nhanh và thường xuyên
hơn, khái niệm DevOps ra đời [4] Trong những năm gần đây, Phương pháp DevOps
đang được áp dụng rộng rãi trong cộng đồng phát triển phần mềm.Tuy nhiên, có một vấn
đề trong phương pháp này đó là, khi xét đến khía cạnh bảo mật, phương pháp DevOps
thiếu sự tích hợp bảo mật trong bất kì giai đoạn nào của nó [5] Vì dé giải quyết vấn đề
về khía cạnh bảo mật, DevSecOps đã ra đời Khi áp dụng phương pháp này, các công cụ bao mật sẽ được tích hợp quy trình phát trién sản phẩm, loại bỏ các lỗ hồng, dam bảo
cho các quy trình trong hệ thống có thê hoạt động ổn định, từ đó bắt kịp xu hướng phát
triển phần mềm trong tương lai [5].
nghiêm trọng đó là niềm tin của người dùng sản phẩm.Chính vì thế,việc đảm bảo an
ninh, bảo mật thông tin là vô cùng thiết yêu,có thê được xem là van đề cốt lỗi trong quá trình phát triển phần mềm.
Trang 8Với DevSecOps, ba thành phan: Quá trình phát triển (Development), quá trình
vận hanh(operation), quá trình bao mật(security) sẽ luôn có sự liên kết với nhau, giúp
cho doanh nghiệp có thé phát hiện được những lỗ hong phần mềm trong thời gian ngắn
nhất Từ đó, những sản phẩm khi đưa đến cho người dùng sẽ luôn được đảm về chất
lượng cũng như tính bảo mật của nó
Từ đây, nhóm tác giả quyết định nghiên cứu và xây dựng hệ thống phát triển phần
mềm tự động và an toàn theo mô hình DevSecOps Hệ thống này có thể được mở rộng
và sử dụng cho các doanh nghiệp phát triển phần mềm vừa và nhỏ trong thực tế.
3 Mục tiêu, đối tượng và phạm vi thực hiện
3.1 Mục tiêu:
Nghiên cứu về mô hình DevOps - DevSecOps” Sau đó, tìm hiểu các công
nghệ, công cụ tương ứng với từng thành phần trong mô hình (Ví dụ:các công cụ các công cụ hỗ trợ tích hợp liên tục, triển khai liên tục, kiểm thử
được sử dụng để kiểm tra tính bảo mật của ứng dụng, các công cụ quản
lí giám sát, trong quá trình phát triển phần mềm).
Thiết kế và triển khai hệ thống phát triển phần mềm theo mô hình
DevSecOps.
Đánh giá hệ thống hiện tại dựa trên các tiêu chí ưu và nhược điểm, khả năng
ứng dụng mô hình đối với các doanh nghiệp vừa và nhỏ.
Đối tượng nghiên cứu:
Mô hình DevOps, DevSecOps
Các công cụ phục vụ cho quá trình tích hợp liên tục (CI), triển khai liên tục
(CD), công cụ giám sát(monitoring).
Các công cụ hỗ trợ kiểm thử được sử dụng để kiểm tra tính bảo mật của
ứng dụng trong quá trình phát triển phần mềm.
Phạm vi thực hiện:
Trang 9Xây dựng và trién khai mô hình dựa trên các nên tảng mã nguồn mở, có thê triển
khai được trên các nền tảng ảo hóa (VM, container) Mô hình phải đảm bảo có thể áp
dụng được trong quá trình phát trién phần mềm của các doanh nghiệp.
4 Nội dung và phương pháp thực hiện
4.1 _ Nghiên cứu về mô hình DevOps và DevSecOps.
¢ Mục tiêu: Nắm vững kiến thức, cách hoạt động của mô hình
DevOps-DevSecOps cũng như các thành phan cấu tạo nên 2 mô hình trên.
e Phuong pháp: Tham khảo các bài báo, bài nghiên cứu và cáctài liệu liên
quan từ nhiều nguồn khác nhau.
4.2 Tim hiểu cách xây dựng mô hình DevOps, DevSecOps
© Mục tiêu: Xác định và lựa chọn được các cách thức, công cụ để xây dựng
mô hình DevSecOps hoàn chỉnh
e Phuong pháp: Nghiên cứu, tìm hiéu về các công cụ hỗ trợ tích hợp liên tục
và triển khai liên tục, các công cụ kiểm tra tính bảo mật trong ứng dụng như công cụ quét lỗ hồng, công cụ phân tích lỗ hong, công cụ kiểm tra cầu hình, đưa ra ưu nhược điểm của các công cụ, sau đó chọn ra các công cụ có
thể đưa vào mô hình DevSecOps.
4.3 _ Xây dựng và triển khai mô hình
© Muc tiêu: Xây dựng hệ thống phát triển phần mềm tự động và an toàn theo
mô hình DevSecOps kết hợp các công cụ đã chọn.
e Phuong pháp: Doc kĩ tài liệu của từng công cụ đã chon, tìm hiểu những mô
hình đã được các nhà phát triển, nhà nghiên cứu từng triển khai.
4.4 Đánh giá hệ thống/mô hình
e Muc tiêu: Chạy thực nghiệm thành công và cho ra đánh giá về các ưu nhược
điểm và khả năng ứng dụng hệ thống cho các doanh nghiệp vừa và nhỏ.
e Phuong pháp: Chạy thực nghiệm, kiểm tra khả năng vận hành của hệ thống.
Trang 10Tài liệu tham khảo
1] Sarker, I., Faruque, F., Hossen, U and Rahman, A., 2015 A Survey of Software Development Process Models in Software Engineering International Journal of
Software Engineering and Its Applications, 9(11), pp.55-70.
2] Alsaqqa, S., Sawalha, S and Abdel-Nabi, H., 2020 Agile Software Development:
Methodologies and Trends International Journal of Interactive Mobile Technologies (JIM), 14(11), p.246.
3] Roche, James (2013) “Adopting DevOps Practices in Quality Assurance”.
Communications of the ACM 56 38-43 10.1145/2524713.2524721 [Accessed 10
09 2020].
4] Myrbakken, Havard & Colomo-Palacios, Ricardo (2017) DevSecOps: A
Multivocal Literature Review 17-29 10.1007/978-3-319-67383-7_2 [Accessed 10
09 2020].
5] Anjaria, D and Kulkarni, M., 2021 Effective DevSecOps Implementation: A
Systematic Literature Review Revista Gestão Inovacão e Tecnologias, 11(4),
pp.4931-4945.
6] Team, S., Team, S., Team, S., Kesarapalli, R and Team, S., 2022 DevSecOps
and the modern application security program | Synopsys [online] Software Integrity
Blog Available at: devsecops-application-security-program/>
<https://www.synopsys.com/blogs/software-security/3-reasons-[7] InfoQ 2022 DevSecOps and Application Security [online] Available at:
<https://www.infoq.com/presentations/app-security-devsecops/>
[8] “DevsecOps” [Online] Available: <https://www.devsecops.org/>
Trang 11Kế hoạch thực hiện
Thời gian Nội dung
01/03/2022 Tìm hiéu, giao đề tài, xây dựng đề cương chỉ tiết
8/03/2022
9/03/2022 Nghiên cứu mô hình DevOps DevSecOps
21/03/2022
22/03/2022 Nghiên cứu các công cụ hỗ trợ tích hợp liên tục và triển khai liên
10/04/2022 tục (CI/CD), monitoring, các công cụ kiểm thử để kiểm tra tính
6/05/2022 Tổng hợp s6 liệu và kết quả thực nghiệm.
10/06/2022 Hoàn thiện hệ thống đã triển khai.
Viét báo cáo khóa luận.
Hoàn thành báo cáo.
11/06/2022 Kiểm tra lại toàn bộ tài liệu liên quan để phục vụ cho Phản biện và
18/06/2022 bảo vệ Khóa luận tốt nghiệp
20/06/2022 Phản biện khóa luận.
Trang 13MỤC LỤC
TOM mỵ , 1 00.18009670 2
1.1 Đặt vấn đề HH HH êu 2
IPXMW'Š0àï i6 oan n '"ẸẤ"-"-: ,Ô 3
1.3 Đối tượng nghiên CỨỤ - 2-2-5 +E+SE£2EEE2EE2E1EE12E1271717171E2121 1.1 Xe, 41.4 Pham vi nghiÊn CỨỤ - -ó- G3 1 9319911931 11193 01 nh ng ng nh ngư 4
1.5 Những đóng góp của khóa luận - ¿- - 5c + 3+1 3E ESEEkrskrskererrkrree 4
1.5.1 Tính mới của để tàị c.ccsheeriiierriirrrrriirrrririrrrrirrrree 41.5.2 Khả năng ứng dụng thực tế của dé tàị -¿©-scce+cxccreerxecreee 51.6 Cau trúc của khóa luận -c- tt ỀEESEEEEEEESEEEEEEEEEEEEEEEEEEEEEErkerkrrksree 5Chương 2 CƠ SỞ LY THUYÊT <2 << +s£€Ss£EssESs£ESsESseEssexserssersersser 7
2.1 Các mô hình phát triển phần mềm truyền thống - 2 2© 225225+22<+‡ 7
2.2.3 Triển khai mô hình DevOps ¿2 2 2+2++EE+EE+EEeEEeEEerEerkrrrerreree 13
2.3 Hệ thống quản lý phiên bản — mã nguÖn -2- 2 + ©522+2s£+zxzxezrxez 15
2.3.1 Tổng quan -5+ tt 2E211211221211211 271111111111 rẹ 152.3.2 Hệ thống quản lý phiên bản - ¿22 2+22+E++EE+EE£EEEEEEEEErErkerrrrreces 16
Trang 142.3.2.1 Hệ thống quản lý phiên bản tập trung (Centralized version control CVC) 17
2.3.2.2 Hệ thống quan lý phiên ban phân tán (Distributed version control
-DVC) 17
2.3.2.3 Lợi ích của hệ thống quản ly mã nguồn -2- 252 52522522 182.4 Tích hợp và triển khai liên tụC 2 2©£++£+E£+EE+EE+EEeEEerEerkerkerkerrerreee 21
2.4.1 Tich hop En tlc -‹“‹ 212.4.2 Phân phối liên tuc ccecccccccscessesssesssessesssessesssessesssessesssesssssesssssessesssetseesess 22
2.4.3 Triển khai liên tục -cccc-+tEEkkrrHEHH 23
2.5 Công nghệ ảo hóa Container và quản lý cơ sở hạ tang container 25
2.5.1 Công nghệ ảo hóa Ăn HH HH TH ng gu HH ng 25 2.5.2 Cong nghệ ảo hóa COTIfA1T€T Q2 + 1v vn ngư, 26
2.5.3 Quản lý và điều phối -©-<+2x+2 E2 EEEEEEEEEEEEEEEEErkerkrrrkree 27
2.6 Bảo mật quá trình phát triển và triển khai phần mềm -. - 28
2.6.1 Tổng quan DevSecOps -2-©5¿©5¿+ 2E 2EE2EEEEEEEEEEEEEEErkerkerkrrrvee 28
2.6.1.1 Lịch sử hình thành - 13 232113 kSEsksirsreree 29
2.6.1.2 Các nguyên tắc đặc trưng trong môi trường DevSecOps 30
2.6.1.3 Triển khai DevSecOps - ¿22 5222 2221221212121 2121212 re 322.6.2 Các giải pháp bao mật trong quá trình phát triển phần mềm 33
2.6.2.1 Phân tích chất lượng mã nguồn 2-2 + s2 E+£x+£Eerxerxzreces 33
2.6.2.2 Kiểm thử phần mềm - ¿2+ £+E+E£+EE£EE£EEEEEEEEEEEerkrrkerrrrei 33
2.6.2.3 Tich hop gam 37 2.6.2.4 Quản ly, bao vệ thông tin nhạy cam (Manage secrets and protect sensitive
ð100 177 38 2.7 Infrastructure as COdGe - s2 TT TH HH gi nrự 39
Trang 153.1 Phân tích và thiết kế hệ thống, - - ¿2£ £++£+EE+EE+EE£EE£EEEEEEEEErErrkrrrerrree 43
3.1.1 Mô hình tổng quát - 2-22 2E2E2E12E1211271271 217121211 re, 433.1.2 MG hinh chi 5 a.a 43
3.1.2.1 Triển khai cơ sở hạ tang sceccecceccecscssessessessessessesssesssssesseesessessessesseeseees 443.1.2.2 Luông xử lí của chu trình CI/CTD - 2 2 s2 E+£++£xerxerxzreces 44
3.2 Cac thành phan của hệ thống - 2 2+ £+S£+EE£EE+EE+EE+EEeEEeEEerEerkerrerreee 46
3.2.1 _ Triển khai cơ sở hạ tầng dưới dang mã (Infrastructure as Code) 463.2.2 Quan lý, bảo vệ thông tin nhạy cảm (Manage secrets and protect sensitive
data) 50
3.2.3 Quản lý phiên bản mã nguồn — Kho lưu trữ mã nguồn (Gitlab) 523.2.4 Tích hợp và triển khai liên tụC - z2 2 2+ £+E++£E+EkerEerEerkerrerrecrs 533.2.5 _ Quản ly Artifact — Nexus Repository Manage€r «<-c+ec<s 54
3.2.6 _ Môi trường và công cụ triển khai — Kubernetes — Helm 55
3.2.7 _ Các công cụ bảo mẬT - c1 212111211111 911111118111 1 ng ng rệt 61
3.2.8 Gia Sat CaAMầầầồầẳáaáỗaIAIAIÁẶÁẶẮẶẢAVẢ 64Chương 4 TRIEN KHAI HE THONG VA ĐÁNH GIA KET QUẢ 67
4.1 Triển khai hệ thong ccscccsscesccsssesseessesssessesssessesssessesssessesssessesssessesssessessseeseeesess 67
4.1.2 Thông tin phan cứng -:- + + +E£SE£+E2EEEEEEEEEEEEEEEEEEEEErkrrkrrrrree 68
4.1.3 Giới thiệu dự án thử nghiỆm 5 c5 5 SE **vseEEeererreerereerreree 69
4.1.4 Tu động hóa triển khai cơ sở hạ tẦng - 2-52 sccxccxerxcrrcrreces 69
4.1.4.1 Chuan bị Hashicorp Vault Server và Nginx Modsecurity Server 694.1.4.2 Triển khai với Terraform và Ansible -: 2- ¿2+ s+2z++zxz+zxsrsz 734.1.4.3 Setup các thành phan cần thiết ở các Server cho chu trình CICD 854.1.4.4 Tao Pipeline CICD cho mô hình - 5< 55+ +s+svEseesserseeesee 107
4.1.5 _ Kịch bản thử nghiỆm - c- 5Ă 2222113911311 1E 1E EEEEkEkrrkrreree 116
4.1.5.1: Kịch bản 1 — Đánh giá vai trò của Sonarqube về các lỗi bảo mật liên
Trang 16quan đến mã nguÖn - 2 2 2+2 SE+EE+EE£EE£EE£EEEEEEEEE2E522122127171 717121 xe 1164.1.5.2: Kịch bản 2 — Đánh giá vai trò của CloudGuard ShifLeft về các lỗi bảo
mật liên quan đến Image - +: 2 + + +E£+E££E££E£EE£EE+EEEEESEEEEEEEEerkrrkerreee 124
4.1.5.3: Kịch ban 3 - Sử dụng Nginx Modsecurity như một WAF (Web
Application Firewall) để ngăn chặn các tấn công liên quan đến Web Server .137
4.2 _ Đánh giá hệ thống đã triển khai 2-2-2 +E£+E2EE2EE2EEEEEEEEeExerkerreree 143
4.2.1 Ưuđiểm S2c k2 E2 E212211271211071211 112111 cxe 1434.2.2 — Hạn chế c- Set EEt TT E111 11111111 11111111111111111 1 cE 143Chương 5 KET LUẬN VÀ HƯỚNG PHAT TRIỂN s<ccss©cse 145
5.1 Kếtluận J6 Z7 nấ 145
5.2 Hướng phat triÊn + + St SEEEE21E21121121122121121 212121 re 146
TÀI LIEU THAM KHẢO -5- 5-5 s£s£ 222 £Ss£Ss£Ss£EseEsevseEsevssessessee 147
Trang 17DANH MỤC HÌNH
Hình 2 1 Các giai đoạn của mơ hình Waterfall eee - 25s +2 xxx skresrrrrererer 8
Hinh 0 /)/1980)ì/1i010u) 0n 9
Hình 2 3 Sự hình thành DevOps -. c2 1221321113 1118111151111 7111111 rrxre 11Hình 2 4 Hệ thống quản lý mã nguén ceeccecscsscessesssesseessecssessesssessesssessesssessecssessessseeses 16Hình 2 5 Hệ thống Quản lý phiên bản tập trung -2-©-2cs+2zz+£x+zzz+rxezzzerxez 17
Hình 2 6 Hệ thống quản lý phiên bản phân tán - 2 2 2 s2 + x+£x+£x+zxzxzzzzez 18
Hình 2 7 Lưu trữ mã nguồn truyền thống - 2 2 2 £+E£+EE2£E+£E+EEerEerxrrerreee 19Hình 2 8 Kho mã nguồn chia Sẻ 2-2 252 SE£2E£2E£EEE£EE2EEEEEEEEEEEEEEEEErrkrrkerreee 20
Hình 2 9 Mơ hình tích hợp liên tục - - - ¿+22 +22 *+*E£+2E+vEE+eEeeEeereereeresrrrrsee 21
Hình 2 10 Mơ hình phân phối liên tục - 2+ ©22£+£+££+£+2£E+£x+£E+zxerxerxeczeee 23Hình 2 11 Tích hợp liên tục — Phân phối liên tục — Triển khai liên tục 24
Hình 2 12 Mơ hình ảo hĩĨa sĩc v11 TT HH Hà Hy 26 Hình 2 13 Khác nhau giữa Container va VirtuaÏ1ZafIOn s5 ++sx++sx+s++exsss+ 27 Hình 2 14 DevSecOps tính hợp các phương thức bảo mật vào tồn bộ các giai đoạn
CUA DevOPDs TS n ha /(đ 6“ 30 Hình 2 15 Static Application Security Test (SASÏT) - LH Hệ, 34 Hình 2 16 Dynamic Application Security Test (DASTT) - - 5-5 <c++secxsserssees 36Hình 2 17 Vong đời tài nguyên cơ sở hạ tằng 2 2 2+e+++£E+£EeEEerkerkerrerreee 41
Hình 3 1 Triển khai cơ sở hạ tang ccsccecsesscessesssessesssessvsssecsvsssecssessessuessecsueesessuessesaseeses 44
Hình 3 2 Mơ hình Pipeline CICD - 5 1k9 91912 191 11v nh ng nghi, 46
Hình 3 3 Luồng hoạt động của Terraform - + 2 2 £+E£+EE+EE+EEeEEerEerkerrerreee 47Hình 3 4 Vi dụ khi triển khai Infrastructure trên AWS - c+s+cce+rvrzxererxee 48Hình 3 5 Kiến trúc của Ansible -s- 22 + ©5++2x£EESEEEEEEEEEEEEEEEEEEEEEkrrkkerkrrrrervee 49
Hình 3 6 Kiến trúc của HashiCorp VauÌ( 2© £2s2££+EE+£E£EEtEEEeEEezExerkerrxerkee 51
Trang 189 Kết quả của SonarQube sau khi quét toàn bộ mã nguồn - 62
10 Kết quả CloudGuard ShiftLeft kiểm tra Image được tạo ra từ giai đoạn 63
11 Grafana DashbOarr - + x1 99 9v nh ng TH ng nrếc 65
12 Kết hợp Grafana va Prometheus 2 2 2+ £+E++£E+EEerEerxerkerrerreee 66
1 Sơ đồ mô hình triển khai -¿ 22+2+‡E ki 67
2 Giao diện Hashicorp Vault Server - 2c + 31x SE SEssrseerrreree 70
3 Tro IP Nginx Server vào các tên miỀn - 2 2 2s ++x+zxe£xezEerrzcree 70
4 Định dạng cho tên miền của Jenkins SerV€F 2- + s+s+zszE+Eerszxsrszeez 71
5 Dinh dang cho tén miền của GitLab Server cccccccscssssesecessssssesecessescseseseeseees 71
6 Dinh dang cho tén miền của SonarQube Server ccccssessesseseesessesseseseeseeseees 72
7 Dinh dang cho tên miền của Nexus Repository SerVer - 72
8 Dinh dang cho tên miền của Repository Nexus - 2 5+ s2cz+szcsz 72
9 Định dang cho tên miền của WebApplication - 5-5 s2£szzse+zzzse2 73
10 Các file Terraform và AnsIbÌe - -.- «cv ng gưệt 74
11 Đăng nhập vào Azure CÏOU( c5 + SE ES g g g nrnrệt 75
12 Kết quả terraform init +: + 65s SESE£2E£2E2EE2E12E12212127171 71211 xe, 75
13 Khai báo Provider VauÌÏ(L - sư 76
14 Khai báo data của Vault Š€TVT - tt HH HH nhiệt 76
15 Data được lay bằng các biến -2-©2¿© 22x E2 EEEEEEEEEEErkrrkrerrees 76
16 Data được lây bằng các biến 2-2-5222 EEE2EEEEEEEEEEEEEEkrrkrerkree 76
17 Yêu cầu nhập token trước plan -2- + 2£+++£x£+z++£x++zxezxeerxeee 77
18 Kết quả sau khi pla -2- 2 25+ +E£SE£2E2EE2EE2EE2EEEEEEEE271EEEEECEEerkrrrree 78
19 Yêu cầu nhập token trước khi apply -¿-ssz+z++zx++zx+zxzzxeez 79
Trang 1920 Yêu cầu nhập quyết định trước khi apply - 2 + 5 szsecszzsee- 79
21 Kết quả sau khi apply thành công - 2 2 2 s2 + E+£E+£EezEezEzrerreee 80
22 Kết qua từ Azure Portal của các máy ảO ¿- 2 + scxerxerxerxerrerreee 80
23 Kết quả từ Azure Portal của Kubernetes Cluster - ¿z5 81
24 Gắn địa chi IP của Sonarqube Server vào tên miễn -. -2- 2 +: 81
25 Gắn địa chi IP của Repository Nexus vào tên miễn -2- 2 5+: 82
26 Gắn địa chi IP của Jenkins Server vào tên miễn - 5c s+s+zszxzzezsz 82
27 Gan địa chỉ IP của GitLab Server vào tên miền - 2-2 s+s++xezxccxez 83
28 Gan địa chi IP của Nexus Server vào tên miễn -2- x+x++xerxerxeẻ 83
29 Giao diện web của Jenkins Server - 5 55222 132 stress 84
30 Giao diện web của GitLab S€TV€T - c5 1 11+ kkesseeeeee 84
31 Giao diện web của SonarQube Server - S5 SE siserrrkree 85
32 Giao diện web của SonarQube Server c5 3+ x*+kEssesreerrreree 85
33 Tao user trên GitLab c1 2 111231111211 11 1811119111185 1 118111110111 re 86
34 Tao user trên GitLab - c1 2c 121211111211 111911 1199111182111 8211110111111 xee 86
35 Tạo user trên GitLab - - - c2 1 2c 132221111211 81151 1119111192111 92111 g2 1g vec 87
36 Tao user trên GitLab c1 2c 112231111231 1118111191111 1111811111011 1g xe g7
37 Tao group user trên GitLab - -ó- 2c + 321111 911 1 91191 911 1 1 re, 88
38 Tao group user trên CIItLLaÖ - óc 25 3 12311511911 11 911 1 9112 1n ng ry 88
39 Thêm thành viên vào ðTOUD US€T - - <6 5 + 1k1 9 vn re, 89
40 Tao project Gitlab cho mô hình 5 5 22+ +2 *++sEEseEesereereseeeerrses 89
41 Tao project Gitlab cho mô hình 5 5 +2 +32 *++sEEeeEeexeeresesrerrses 90
42 Kết quả project Gitlab 2-2-5 SE£SE£EE2EEEEE2E12E12212212171 212121 eU 90
43 Commit code lên project VỪa †ạO L2 9v HH HH ng 91
44 Push code lên project VỪa ạO - - SH HH HH HH HH ng nnriệt 91
45 Kết quả sau khi push cccccccccscssessesseessessessessessessessessessesssssesssessessessessesseesees 92
46 Tao Blob Store cho project của mô hình - ¿5+ ++s+++x++s+sexseresss 93
Trang 2047 Tao Blob Store cho project của mô hình - - 5 5s £+t£+sexserserse 93
48 Kết quả sau khi tạo Blob Store c.cccssesssesssesssssesssessesssesseessessesssessessseeseesess 94
49 Tao Repositories cho project của mô hình - «+ s++s++s+s++erssss 95
50 Tạo Repositories cho project của mô hình - - 5+ +55 +5 s+++exsexs+ 95
51 Tao Repositories cho project của mô hình - - +5 + +5 ++ss+e++exsexs+ 96
52 Kết quả tao Repositories cccscscsessssssesssessessseessessessesssecssessecsesssecseessesseesees 96
53 Tao secret cho Kubemetes Cluster cccccccccsscccesssceesseeesescsesssessseeeesseesens 97
54 Tao project SonarQube cho mô hình - 5-5 +5 +++£+s+svEsseeseesses 97
55 Tao project SonarQube cho mô hình - 5-55 £++£+s++vseeesersses 98
56 Tao project SonarQube cho mô hình s55 55+ *+*£+vE+eseeseesersee 98
57 Tao project SonarQube cho mô hình - - s5 5+ £+s++vssesseesses 99
58 Tạo các plugin cần thiét c ceccecccsscessesssessesssessesssecsesssesssssessessseesesssesseseses 99
59 Tao các plugin cần thiét cccccceccesssessesssesseessessesssecsuessecsssssecsssssesseesseesseess 100
60 Tao các Credentials cần thiét c c.ccccccccccccsccsscssessessssessessssessesesassesseeeseneeeees 101
61 Tao các Credentials cần thiét cc ccccccccccscsscccsssssecsessssessesetssssssesstsasseceteasenees 101
62 Các Credentials cần thiét cccccccccsssecseessesssssecstesseesecsecssecsecsecseesesseesseess 102
63 Cau hình connection của Jenkins và GitLab -2- ¿55s s25: 102
64 Cấu hình connection của Jenkins và GitLab -2-5z©5s>sz2zs+e: 103
65 Thém Node cho Jenkins 1 104
66 Thêm Node cho Jenkins 5 s5 1x11 E1 2 1 ng ri 104
J0 (309i 00 i4 1n 105
68 Kiểm tra IP của Jenkins Slave -2- + ©52cx2++zxtzEterxezrrerxrrrrrred 105
69 Thêm Node cho JenKITAS 5 <6 2211 231991 31 91 119 1g ngư 106
70 Kết quả sau khi thêm Node - 2+ 2522 22E££EE2EE£EE£EESEEEEEerEerkerkered 106
71 Tạo Job Jenkins cho mô hình c5 22533222 **‡ +22 ‡++eeEeeeeeeeeeeees 107
72 Tao Job Jenkins cho mô hình c5 2253322213 *£2<E‡++eeEeeeeeezeseees 108
73 Tao Job Jenkins cho mô hình <5 225332221 ** +2 ‡++eeEezeeezeeeees 108
Trang 2174 Tạo Webhook Trigger cho Project GitLab 09
75 Tạo Job Jenkins cho mô hình 10
76 Chay thử Job lll T7 Chay thử Job wo cececessceescsessesesescsssseseseseesssesssesesessessssessesneseseeeenaneneae 11
78 Kết quả sau khi chạy job ccccscssssssssssseessssssecssssseesessssecesssssscesssseeesssseeseesssess 12
79 Push code lên GitLab SeTVeT 5255222 St S*2x+xttekerrrkerererrree 13
80 Kết quả Pipeline chạy thành công -2 ©222++2222+z+ecvvszrrerrxee 13
81 Logs của Pipeline ¿+ - + 5S Sk*k2kề E112 211111101 011110111 14
82 Kiểm tra trên Clusf€r -. :+ ©2222222+++2222E2EYY+rrtrtttrEEkvrrrrrrrrrrrrrrrrcee 14
83 Gan địa chi IP webapp vào tên miền -2-¿-52222vvcctttrrrrrvererree 15
84 Kết quả tên miền Webapp -:¿222222222S2vt2EEEErrttrkvrrerrrrrrrrrrkev 15
85 Dev thực hiện commit code lên GitLuab - 55+ 5+ ssss+ssss+s>zz>+s+es+ 16
86 Kiểm tra trên server GitLLab 222222 222222222+ctttEEEEEEvvrrrrtrrrrrrrrerree 17
87 Pipeline tự động chạy khi có commit mới ¿-¿- - s ++++++s+xe++ 18
88 Ảnh khi pipeline chạy xong :2©22++222v+z+ettvvvrrerrvrrrrsrrver 18
89 Dashboard của Sonarqube Server - + + +5++++£++srerzxserrers 19
90 project flask-dOCk€r - 522222222 321212121121 2121 1111212 re 19
91 Chỉ tiết project flask-dOCker ccccccssssssssssssessssssssccsssesecssssscessssseecsssseeesseess 20
92 Chi tiết một bug cụ thể 2222c+2222222S2+ttEEEEEEEErrrrrtrrrrkrrrrrrrrrrex 21
93 M6 ta VE 0 8a -.41ÄÃ[ÃRñRA|.AH Ô 21
94 Mô tả về bugg : 22222222++22222221212222221111111.22211111110.1011111 cm 22
95 Chỉnh sửa source code theo hướng dan của sonarqube và commit lại 2
96 Pipeline tự đông chạy khi có commII - ¿+ 5 2 2 ++++s+s+ss£ec+> 23
97 Dashboard của Sonarqube Server ¿c5 tt svvvverekekrkrkrrer 23
98 project flask-dOCÌK€T ¿ST E1 TH HH HH rà 24
99 Dev commit code lên GitLab - 52-2 5 252 52+*+*‡+£e£e>xzxzxrxsreree 25
100 Pipeline tự động chạy khi có commII +5 c+++sexex+ezxzerexee 25
Trang 22101 Stage Shiftleft Image Scan - -< SH TH HH 126
102 Kết quả của pipeline - ¿5s s+SxeEEeEEEEEE21121122121121 212121 re 127
103 Logs của Stage "Shiftleft Image SCann” - -ccSc cv sererrseree 127
104 Dashboard của CloudGuard ShIffÏefĂ - ¿s55 2s 2s £+xssesveseesres 128
105 Chi tiết của image đã scan ¿2-55 ©2s‡2x2EEEEEESEEEEEEEkrrkrerkrrrrrred 129
106 Chỉ tiết từng ruÌe ¿- ¿- 2 2 k+EE9EE£EE£EEE2E2E12112112112111171 1171 re 130
107 Chi tiết bài kiỂm tra ccc:c2vvtttEktrrrrttrrrtrttrrrrrrrirrrrrrrrrrieg 130
108 Các thông tin liên quan đến lỗ hồng 2- 2 52 +2s£+zxzxezrxd 131
109 Xuất T€DOFFL c5 S2 S1 E12 1EE19115717111111211 2112111111111 111111111 cre 131
110 Chi tiết bảng T€pOFTL 2-2-5 SE9EE‡EEEEEEEEEEE211211211221211121 112121 re 132
111 Dev commit code lên GitLLab - - - c5 5< 2+*£+*E++eEEeeeesseeseeersre 133
112 Pipeline tự động chạy khi có commTmII - 5 + +s<++£+se+sexseessxs 134
113 Kết quả pipeline chạy xong - +: + s+x+£x£EE+EEeExeerkerkeerkrrrerred 134
114 Logs của stage "ShiftLeft Image SŠCani” - - +5 <++x£+ssseeseesse 135
115 Console output của pID€Ï1TIG - - 6 c2 2311911231 91 91111 11 v g rưy 135
116 Dashboard của CloudGuard ShIftLefT 5 5 + 55+ 2s£+£+£sveses 136
117 Chi tiết của image đã scan 2-22 Ex2EEEEEEEEEEEEEErrkkerkrrrrrred 136
118 Kết quả pod trên clusfer - 2 ¿+ ++Ex£2EE£EEEEEEEEEEEerkeerkerrerred 137
119 0i 0 138
120 Kết qua sau khi apply trên cÏust€r - 2 2 2+ s+++£E+Exerxerxerxerreres 139
121 Gan IP vào tên miền trên Nginx SeTVer 2-2-2 5 s+cxvzxczxezez 139
122 Khởi động lại Nginx S€TVIC€ Gà SH HH gi r rưệp 140
123 Kết quả của tấn công -¿- + s+2k+EESEE2E211211211211211211 111121 cre 140
124 Bật chế độ MOdSCCULILY 232 141
125 Kiểm tra khi không có mã dOC ecececsessesscssssssessessessessessesseessessessessesseeseesees 142
126 Kết quả khi có mã độc 2-2-2 s£+S+SE£SE£EEEEE2EE2EE2E127121 2121 142
Trang 23DANH MỤC BANG
Bảng 4 1 Bang thông tin phần cứng server
Trang 24TÓM TAT
DevOps là một văn hóa làm việc kết hợp giữa phát triển và vận hành, được áp dụng ngàycàng phô biến trong quá trình phát triển phần mềm Mục đích chính của DevOps nhămgiúp các tô chức, doanh nghiệp có thé phát trién, triển khai và đem sản phâm đến kháchhàng — người tiêu dùng một cách nhanh nhất nhưng cũng dam bao chất lượng sản phẩm.Tuy nhiên, các vấn đề bảo mật và an toàn thông tin trong văn hóa làm việc của DevOpsvẫn chưa được chú trọng Thêm vào đó, các giải pháp bảo mật truyền thống chưa thể giảiquyết được vấn đề nêu trên Chính vì thế, nhóm tác giả chọn DevSecOps là một hướng
dé nhóm có thé nghiên cứu, thực nghiệm và đánh giá Trong phạm vi, nhóm tác giả sẽcung cấp cái nhìn tổng quan về mô hình DevOps và DevSecOps, cùng với các cơ sở lýthuyết liên quan Từ đó, nhóm tác giả sẽ xây dựng một mô hình DevOps dựa trên cácnền tảng mã nguồn mở và tích hợp thêm các giải pháp bảo mật dé tăng độ an toàn
Trang 25Chương 1 MỞ DAU
1.1 — Đặt vấn đề
Ngành phát trién phần mềm đã có hơn nửa thé kỉ hình thành và đang càngngày phổ biến rộng rãi ở hầu hết các công ty liên quan đến công nghệ thôngtin tuy nhiên việc phát triển phần mềm và quản trị các dự án phần mềm chưabao giờ hết thử thách Rất nhiều những van đề cứ không ngừng lặp đi lặp lại,làm đau đầu đội ngũ phát triển và các nhà quản trị Từ đó, nhu cầu về cácphương pháp phát triển phần mềm luôn luôn cần có sự cải tiến với mục đíchnâng cao chất lượng sản pham cũng như rút ngăn thời gian phát triển - đưasản tới cho khách hàng [1] Phương pháp Agile ra đời trong bối cảnh ngànhphát triển phần mềm gặp nhiều thử thách với cách thức phát triển truyền thốngtheo mô hình thác nước (waterfall), hoặc dựa theo kế hoạch (plan-driven).Khái niệm Agile (viết tắt của Agile Software Development) có nghĩa làphương pháp phát triên phần mềm linh hoạt, được ứng dụng trong quy trìnhphát triển phan mềm với mục tiêu là đưa sản phẩm đến tay người dùng càngnhanh càng tốt, tập trung vào việc cảm nhận và đáp ứng các yêu cầu của người
dùng dé đưa ra những thay đồi phù hợp [2].
Ngoài Agile, có một phương pháp phát triển phần mềm rat phổ biến vađược nhiều doanh nghiệp áp dụng đó chính là DevOps Không có bất kỳ mộtđịnh nghĩa duy nhất nào cho DevOps Tuy nhiên có thé hiểu đơn giản, Devops
là sự kết hợp của nhiêu triết lý văn hóa, biện pháp thực hành và các công cụnhằm giúp cho khả năng phân phối của ứng dụng, dịch vụ của tổ chức pháttriển với tốc độ cao hơn Quá trình phát triển và cải tiến sản phẩm sẽ phát triểnvới nhịp độ nhanh hơn Các tô chức có thé sử dung quy trình quản ly cho các
cơ sở hạ tầng và phát triển phần mềm theo thiên hướng truyền thống [3]
DevOps đã cung cấp cho các tô chức một phương pháp dé đáp ứng nhu cầu
Trang 26kinh doanh nhanh chóng hơn Các công cụ DevOps đang phát triển nhanh
chóng Tuy nhiên nếu chỉ nói về DevOps không là chưa đủ Những lo ngại về
bảo mật đang đang là mối quan tâm của các tô chức Thậm chí mối lo về bảo
mật có thê là nguyên nhân làm dừng hoặc trì hoãn việc triển khai ứng dụng
đối với nhiều tổ chức [4].Chính vì lí do đó, việc tích hợp các công cụ bảo mật
trong DevOps là hết sức cần thiết trong bối cảnh hiện nay
DevSecOps tích hợp bảo mật của tổ chức vào DevOps truyền thống vớimục tiêu triển khai, tích hợp các biện pháp bảo mật tron quá trình phát triển
và sản xuất phần mềm, bổ sung thêm một lớp phòng thủ khác, chống lại vi
phạm đữ liệu và tan công mạng Mô hình DevSecOps có thé đáp ứng được
những nhu cầu trong quá trình phát triển phần mềm như năng giảm thời gian
phát triển và phát hành phần mềm, đồng thời đảm bảo chất lượng, tính bảo
mật cao cho hệ thống và ứng dụng [5]
1.2 Mục tiêu nghiên cứu
Thông qua khóa luận này, nhóm tác giả muốn thực hiện được các mục tiêu sau:
e Nghiên cứu về mô hình “DevOps — DevSecOps” Sau đó, tìm hiểu các
công nghệ, công cụ dựa trên nền tảng Opensource tương ứng với từngthành phần trong mô hình (Ví dụ: các công cụ các công cụ hỗ trợ tíchhợp liên tục, triển khai liên tục, kiểm thử được sử dụng dé kiểm tra tínhbảo mật của ứng dụng, các công cụ Quản lý, giám sát trong quá trìnhphát triển phần mềm)
e Thiết kế và triển khai hệ thống phát triển phần mềm theo mô hình
DevOps.
e Phân tích và tích hop thêm các giải pháp an toàn thông tin dé tăng tính
bảo mật cho mô hình.
e Đánh giá hệ thông hiện tai dựa trên các tiêu chí ưu và nhược diém, khả
Trang 27năng ứng dụng mô hình đôi với các doanh nghiệp vừa và nhỏ.
1.3 Đối tượng nghiên cứu
Trong khóa luận này, nhóm tác gia sẽ nghiên cứu:
e M6 hình DevOps, DevSecops.
e Các công cụ phục vụ cho quá trình tích hợp liên tục (CD, triển khai
liên tục (CD), công cụ giám sát (monitoring).
e Cac công cụ kiểm thử được sử dụng dé kiểm tra tính bao mật của ứng
dụng trong quá trình phát trién phan mềm
1.4 Phạm vỉ nghiên cứu
Xây dựng và triển khai mô hình dựa trên các nền tảng mã nguồn mở, có thể
triển khai được trên các nền tảng ảo hóa (VM, container) Mô hình phải đảm bảo cóthể áp dụng được trong quá trình phát triển phần mềm của các doanh nghiệp
1.5 Những đóng góp của khóa luận
1.5.1 Tính mới của đề tài
Chu trình phát triển phần mềm (Software Development Life Cycle) bao gồmhai giai đoạn chính: phát triển và vận hành Hai giai đoạn này tương đối tách rờinhau, đặc biệt là ở các công ty có quy mô trung bình trở lên Tuy nhiên, nhằm tối
ưu hóa chu trình phát triển phần mềm, giúp sản phẩm công nghệ được releasenhanh và thường xuyên hơn, khái niệm DevOps ra đời [4] Trong những năm gầnđây, Phương pháp DevOps đang được áp dụng rộng rãi trong cộng đồng phát triểnphần mềm Tuy nhiên, có một vấn đề trong phương pháp này đó là, khi xét đến
khía cạnh bảo mật, phương pháp DevOps thiếu sự tích hợp bảo mật trong bat kì giai đoạn nào của nó [5] Vì dé giải quyết van đề về khía cạnh bao mật, DevSecOps
đã ra đời Khi áp dụng phương pháp này, các công cụ bảo mật sẽ được tích hợp
quy trình phát triển sản phẩm, loại bỏ các lỗ hồng, đảm bảo cho các quy trình trong
Trang 28hệ thống có thê hoạt động ồn định, từ đó bắt kip xu hướng phát trién phần mềmtrong tương lai [5].
1.5.2 Khả năng ứng dụng thực tế của đề tài
Trong môi trường doanh nghiệp,những nguyên nhân.rủi ro dẫn tới các sự cỗ
ảnh hưởng hoặc gây thiệt hại về khía cạnh an ninh thông tin hầu hết đều bắt
nguồn từ những lỗ hồng của các phần mém.Dé giải quyết những van dé trên thì
chi phí phải bỏ ra là rất lớn chưa xét đến yếu tố nhân lực,thời gian.Không những
thế,một thiệt hại vô cùng nghiêm trọng đó là niềm tin của người dùng sản
pham.Chinh vì thế,việc đảm bảo an ninh, bảo mật thông tin là vô cùng thiết
yêu,có thê được xem là vân đê côt lõi trong quá trình phát triên phân mêm.
Với DevSecOps, ba thành phần: Quá trình phát triển (Development), quátrình vận hanh (operation), quá trình bảo mật (security) sẽ luôn có sự liên kết
với nhau, giúp cho doanh nghiệp có thé phát hiện được những lỗ hồng phan
mềm trong thời gian ngắn nhất Từ đó, những sản phẩm khi đưa đến cho người
dùng sẽ luôn được đảm về chât lượng cũng như tính bảo mật của nó.
Từ đây, nhóm tác giả quyết định nghiên cứu và xây dựng hệ thống phát triểnphần mềm tự động và an toàn theo mô hình DevSecOps Hệ thống này có thê
được mở rộng và áp dụng cho các doanh nghiệp vừa và nhỏ trong thực tế
1.6 Cấu trúc của khóa luận
Ngoài phần mục lục, danh mục các từ viết tắt, danh mục hình ảnh và tài liệutham khảo, khóa luận được bố cục thành 5 chương sau:
Chương 1-Mớ đầu
e Tông quan về đê tài thực hiện, trình bay sơ lược vê mục đích, đôi tượng,
phạm vị nghiên cứu và những đóng góp của đề tài
Trang 29Chương 2-Co sé lý thuyết
e Trình bày và giải thích các cơ sở lý thuyết, định nghĩa và mô tả nguyên
tắc hoạt động của mô hình DevOps, DevSecOps và các công nghệ đượcnhóm triển khai trong đề tài như: Tích hợp và triển khai liên tục, côngnghệ container hóa, hệ thống quản lý phiên bản mã nguồn và bảo mật
quy trình phát triển phần mềm, cùng với các công cụ như: Jenkins,
Gitlab, Docker, Kubernetes, Grafana, Prometheus, Terraform,
Chương 3-Phân tích và thiết kế hệ thống
e Thiết kế và mô tả sơ đồ hệ thống, trình bày về luồng xử lý (workflow)
của hệ thống Giải thích các thành phần và cách hoạt động của hệ thống
mà nhóm tiến hành nghiên cứu: Thực hiện tích hợp và triển khai liên tụcquá trình phát triển ứng dụng bằng việc kết hợp các công cu Jenkins vàGitlab, trién khai ứng dụng trên nền tảng Kubernetes, kiểm tra tính antoàn và bảo mật của mã nguồn, container Kubernetes và ứng dụng web
đã được triển khai với các công cụ được tích hợp vào hệ thống, quản lý
quá trình hoạt động của toàn bộ hệ thống.
Chương 4-Trién khai và thực hiện đánh giá hệ thống
e M6 tả các thành phan, các công nghệ được áp dung trong hệ thống, các
kịch bản chạy thực nghiệm bám sát các kịch bản trong thực tế Từ đó,đánh giá ưu điểm và hạn chế của hệ thống mà nhóm đang triển khai
Chương 5-Kết luận và hướng phát triển
e Tổng kết các nội dung đã nghiên cứu trong quá trình thực hiện dé tài
Từ đó, đề xuất những hướng phát triển của đề tài trong tương lai, giúp cho đề tài ngày càng hoàn thiện hơn.
Trang 30Chương 2 CƠ SỞ LÝ THUYET
2.1 Các mô hình phát triển phần mềm truyền thống
Ngày nay, thị trường phát triển phần mềm phát triển vô cùng nhanh chóng và dangđặt ra rất nhiều thách thức cho việc xây dựng và triển khai một quy trình phát triển phầnmềm có thé đáp ứng được yêu cầu của những khía cạnh như tốc độ phát trién phần mềm,đảm bảo chất lượng sản phẩm, độ bảo mật của hệ thống để có thé mang lại hiệu quả caonhất
2.1.1 Waterfall
Mô hình thác nước (Waterfall model) là mô hình của quy trình phát triển phầnmềm được giới thiệu lần đầu tiên bởi tiến sĩ Winston W Royce trong một bài báocông bố năm 1970 Trong mô hình này, quá trình phát triển phần mềm được chiathành các giai đoạn khác nhau và thực hiện tuần tự, đầu ra của giai đoạn này là đầuvào của giai đoạn tiếp theo và không có sự chồng chéo Việc tiếp cận tuần tự từ trênxuống dưới như vậy giống như dòng chảy của một thác nước nên mô hình này đượcđặt tên là mô hình thác nước.
Trên thực tế, đây là mô hình đầu tiên được sử dụng rộng rãi trong ngành côngnghiệp phần mềm Tuy nhiên, trong những năm gần đây, mô hình này đang bộc lộnhiều bat cập và dan bị thay thế bởi các phương pháp phát triển phần mềm linh hoạt(Agile Software Development) Các giai đoạn của mô hình Waterfall được thé hiệntrong hình 2.1
Trang 31Hình 2 1 Các giai đoạn của mô hình Waterfall
2.1.2 Agile
Lich sử Trong giai đoạn trước những năm 90 của thế kỷ 20, trên thé giới xảy
ra cuộc khủng hoảng về phương pháp phát trién phần mềm Lý do của việc này đó
là phương pháp truyền thống (Waterfall) ngày càng bộc lộ nhiều nhược điểm va tỉ
lệ các dự án bị thất bại quá cao Tốc độ phát triển ngày càng nhanh của thị trường
phát triển phần mềm thì việc làm sao đề cung cấp sản phâm đến khách hàng trongthời gian sớm nhất ngày càng được chú trọng Nhưng mô hình Waterfall lại khôngthé đáp ứng được điều này Chính vì thé, đã dẫn đến sự ra đời của mô hình phát triểnphần mềm linh hoạt (Agile)
Khái niệm Agile (viết tắt của Agile Software Development) có nghĩa là phương
thức phát triển phần mềm linh hoạt, được ứng dụng trong quy trình phát triển phầnmém với mục tiêu là đưa sản phâm đên tay người dùng càng nhanh càng tot.
Mô hình Agile thực chat là một tập hợp các nguyên lý, kỹ thuật dành cho phát triểnphần mềm tập trung vào kha năng đáp ứng được những thay đổi khi có yêu cầu.Tuyên ngôn Agile được xuất bản năm 2001 đã hệ thống hóa các nguyên tắc của mô
Trang 32hình này Một trong số các nguyên tắc trong Tuyên ngôn Agile nói răng: "Ourhighest priority is to satisfy the customer through early and continuous delivery ofvaluable software." Nguyên tac này có thé được hiéu là: "Ưu tiên cao nhất của chúngtôi là làm hài lòng khách hàng thông qua việc phân phối sớm và liên tục các phầnmềm có giá trị".
2.1.3 Scrum
Mô hình phát triển phan mềm Scrum được sử dung dé quan lý quá trình phát
triển những sản phâm phức tạp hay những dự án lớn Mô hình Scrum cho phép sửdụng nhiều quy trình và kỹ thuật khác nhau dé con người có thé xác định các van déđang diễn ra và đưa ra giải pháp phù hợp, đảm bảo sản phẩm được đưa đến kháchhàng với chất lượng tốt nhất
Scrum là mô hình phát triển phần mềm lặp đi lặp lại Những khoảng lặp cốđịnh được gọi là Sprint Sprint là thành phần quan trọng nhất của mô hình Scrum.Một Sprint mới sẽ được bắt đầu ngay khi Sprint trước đó kết thúc Đây là sự khácbiệt giữa mô hình Scrum và mô hình Waterfall truyền thống Mô hình phát triểnphần mềm Scrum được minh họa trong hình 2.2
Trang 332.2 Mô hình DevOps
2.2.1 Lịch sử hình thành
Với Agile, các dự án giờ đây có thể được khởi động nhanh hơn nhiều với khảnăng làm việc theo nhóm được cải thiện và khả năng đa chức năng tốt hơn Ngay cả
khi làm việc trong những môi trường khó khăn và hỗn loạn hơn, các nhóm giờ đây có
thé phan ứng với những thay đổi tốt hơn Tuy nhiên, khi làm việc với phương pháp
phát triển phan mềm Agile, các tổ chức gặp rất nhiều khó khăn trong việc làm sao déphát hành sản phẩm thường xuyên hơn Nguyên nhân dẫn đến vấn đề trên là do nhómphát triển phần mềm và nhóm vận hành phần mềm không thể phối hợp tốt với nhautrong quá trình làm việc [10] Với phương pháp phát triên phần mềm truyền thống,mục tiêu của đội ngũ phát triển là xây dựng các tính năng (function) đúng với yêu cầu(requirement) và phát hành (release) cho khách hàng càng nhanh càng tốt, trong khimục tiêu của đội ngũ vận hành là tạo ra một hệ thống ôn định Trong thực tế, hai mụctiêu này sẽ có thê đối lập nhau vì các đội ngũ phát triển chỉ quan tâm đến mục tiêu củaminh, dan đến sản phẩm dễ xảy ra van đề, từ đó mang lại những trải nghiệm không tốtcho khách hàng Dé giải quyết được những van đề nêu trên, DevOps được sinh ra vớibăng kết hợp giữa phát triển sản pham (Development) và vận hành sản phẩm(Operations) dé thực hiện mục tiêu chung là đảm bảo về cả tốc độ và sự ôn định
Phong trào DevOps bắt đầu hình thành trong khoảng thời gian từ năm 2007 đếnnăm 2008, khi các công ty và cộng đồng phát triển phần mềm nhận ra những vấn đềnghiêm trọng trong quá trình phát triền phần mềm Tại hội nghị Agile năm 2008,Andrew Clay Shafer va Patrick Debois đã thảo luận về "cơ sở hạ tầng Agile" [7] Thuật
ngữ DevOps được phô biến thông qua một loạt các series "DevOpsDays", bắt đầu từ
năm 2009 ở Bi [8] Ké từ đó, đã có các hội nghị devopsdays được tổ chức ở nhiều quốcgia trên toàn thế giới [9] Từ đó, thuật ngữ DevOps đã chính thức được sử dụng
10
Trang 34với bộ phận operator (kỹ sư hệ thống, nhân viên bao mật, kỹ su mạng, kỹ sư hạ tang )
nhằm mục đích rút ngắn vòng đời phát triển sản phâm (SDLC) Với các dự án có kiến
trúc phức tạp và quy mô lớn, khi có những thay đổi hay b6 sung những tinh năng mớimang đến nhiều tác động đến chất lượng phần mềm và được thực hiện lặp đi lặp lại đểcải thiện chất lượng phần mềm Từ các yêu cầu thực tiễn, DevOps áp dụng các công
cụ tự động đề quản lý hạ tầng phần mềm giúp tăng tốc độ xây dựng, triển khai và nhậnphản hồi liên tục
Một cách giải thích khác, DevOps là một sự kết hợp của các nguyên lý, thựchành, quy trình và các tool giúp tự động hóa quá trình lập trình và chuyên giao phanmềm Với DevOps, các công ty có thể “release” các tính năng nhỏ rất nhanh và kết hợpcác phản hồi mà họ nhận được một cách nhanh chóng
e - Giai đoạn phát triển (Development) bao gồm phan việc của UI designer,
developer, QA/QC,
e Giai đoạn vận hành (Operations) có sự tham gia của system engineer,
system administrator, operation executive, release engineer
11
Trang 35Hai giai đoạn này tương đối tách rời nhau Đặc biệt là ở những công ty có quy
mô từ trung bình trở lên Chính vì thế, khái niêm devops ra đời nhằm tối ưu hóa chu
trình phát triển phan mềm Giúp sản phẩm phần mềm được release nhanh và thườngxuyên hơn.
2.2.2 Lợi ích của mô hình DevOps
Tốc độ: DevOps giúp các developers và team operations đạt được mụctiêu ở một tốc độ khác giúp cải tiến sản phẩm nhanh chóng phục vụngười dùng, thích nghi với thị trường tốt hơn và điều chỉnh hiệu quả
kinh doanh hiệu quả hơn.
Chuyén giao nhanh chóng: Tăng tốc độ release thường xuyên dé chúng
ta cải thiện sản phâm nhanh hơn và cho ra mắt các feature nhanh hơncũng như fix bug, giúp phản hồi cho khách hàng nhanh chóng và xâydựng nên lợi thế cạnh tranh tốt hơn
Độ tin cậy: DevOps đảm bảo chất lượng bang cách áp dụng CI /CD,Monitoring và logging process Bằng cách update mà team
infrastructure cấp quyền cho team development dé chuyền giao nhanhhơn mà vẫn duy trì được trải nghiệm người dùng tốt
Quy mô: Sự tự động hóa và tính nhất quán giúp quản lý những hệ thốngphức tạp hoặc giảm thiểu những rủi ro khi có sự thay đổi một cách hiệuquả, giúp vận hành và quản lý cơ sở hạ tầng cũng như các quy trình pháttriển ở quy mô phù hợp
Cải thiện khả năng cộng tác: Xây dựng các nhóm hiệu quả hơn theo mô
hình văn hóa DevOps, trong đó nhân mạnh các giá trị như quyền sở hữu
và trách nhiệm giải trình Các nhà phát triển và nhóm vận hành cộng tácchặt chẽ, chia sẻ nhiều trách nhiệm và kết hợp quy trình làm việc của
họ Điêu này làm giảm sự kém hiệu qua và tiệt kiệm thời gian.
12
Trang 36e Bao mật: Quá trình làm việc sẽ được tiễn hành nhanh hơn nhưng vẫn có
thé duy trì kiểm soát và dam bảo tuân thủ Vi thé, bạn hoàn toàn có thé
áp dụng mô hình DevOps mà không cần phải giảm bớt đi tính bảo mậtnhờ việc sử dụng các chính sách tự động hóa khác Ngoài ra, các công
cụ kiêm soát đều sẽ được tinh chỉnh sao cho hợp lý nhất
2.2.3 Triển khai mô hình DevOps
Lập kế hoạch liên tục-Continuous PlanningTrong quá trình phát triển phần mềm, các đội ngũ phát triển và vận hành cầnphải thích nghi với những thay đổi nhanh chóng của thị trường phần mềm, các doanhnghiệp cần phải có kế hoạch kinh doanh phù hợp với yêu cầu của thị trường, từ đó tăng
nhanh tốc độ hoàn thành cũng như đảm bảo chất lượng của dự án DevOps hỗ trợ các
doanh nghiệp cải thiện van đề này thông qua việc ưu tiên hoàn thành các sản phẩm còntồn đọng, tạo một kênh giao tiếp với khách hang dé có thê cập nhật phản hồi từ kháchhàng một cách nhanh nhất Việc lập kế hoạch phải được thực hiện thường xuyên dé cóthé theo kip với những thay đôi nhanh chóng của thị trường Lập kế hoạch liên tục làmột quá trình diễn ra theo chu kì và được thực hiện thông qua những bước: Lập kế
hoạch theo từng giai đoạn, thực hiện kế hoạch, tiếp nhận và phản hồi những ý kiến,
điều chỉnh kế hoạch nếu cần thiết
Tích hợp liên tục — Continuous Integration
Tích hợp liên tục (CI) là một phương pháp phát triển phần mềm thường được
áp dụng trong quy trình DevOps Các nhà phát triển thường xuyên hợp nhất các thay
đôi mã của họ vào một kho lưu trữ được chia sẻ nơi các bản cập nhật đó được tự độngkiểm tra, nếu có lỗi xảy ra thì chúng sẽ được thông báo cho lập trình viên dé tiến hànhkhắc phục càng sớm càng tốt Các mục tiêu chính của tích hợp liên tục là tìm và giảiquyết lỗi nhanh hơn, cải thiện chất lượng phần mềm và giảm thời gian xác thực và phát
hành các bản cập nhật phần mềm mới Đây là một quá trình lặp đi lặp lại và diễn ra
liên tục trong suốt quá trình phát triển phần mềm [11]
13
Trang 37Phân phối liên tục — Continuous DeliveryPhân phối liên tục — Continuous Delivery là phân phối liên tục đề cập đến khảnăng của một tô chức phần mềm trong việc day các bản cập nhật sản phẩm đến kháchhang một cách nhanh chóng va dé dang Các ban cập nhật này có thé bao gồm mọi thứ,
từ các tính năng mới đến sửa lỗi, thiết kế giao diện mới hoặc thậm chí là các loại thửnghiệm khác nhau CD có nghĩa là đã xác định các quy trình và giao thức dé day mãtrực tiếp ngay lập tức
Triển khai liên tục — Continuous DeploymentTrong quá trình triển khai liên tục, ngay khi các tính năng mới của sản phẩmđược hoàn thành, việc triển khai sản phẩm một cách tự động trên môi trường thửnghiệm sẽ được thực hiện, và sau đó sản phẩm cũng sẽ được phát hành một cách tựđộng đến tay người dùng Các nguyên tắc của DevOps khuyến nghị tự động hóa việctriển khai sản phẩm Việc triển khai liên tục giúp giảm số lượng các quy trình thủ công
và tăng tốc độ giao sản phẩm cho khách hàng
Kiểm thử liên tục — Continuous Testing
Continuous Testing là quá trình kiểm tra liên tục, thường xuyên và tự động hóakhi có bat kì thay đôi nào xảy ra trên mã nguồn Mục tiêu của Continuous Testing là
kiêm tra sớm dé có thé phát hiện ra những lỗi tồn tại trong mã nguon, hé théng som
nhất có thé Quá trình này bao gồm các bên liên quan như đội ngũ phát triển, đội ngũ
đánh giá chất lượng sản pham và các bên có chuyên môn Trong quá trình phát triển
phần mềm, ngay khi một tính năng mới được hoàn thành, quá trình kiểm thử sẽ tự động
diễn ra đề phát hiện và khắc phục lỗi ngay từ ban đầu Quá trình này sẽ diễn ra liên tục
và lặp đi lặp lại trong suốt quá trình phát triển sản phẩm dé hạn chế lỗi và rút ngắn thời
gian phát triển
Giám sát liên tục — Continuous Monitoring
14
Trang 38Giám sát liên tục là một quá trình theo dõi và xác định các vấn đề tuân thủ vàrủi ro bảo mật trong suốt từng giai đoạn của vòng đời hoạt động của DevOps, giúpnhóm phát triển và nhóm vận hành có thé phản ứng kip thời khi có sự cố xảy ra và đưa
ra phương án giải quyết nhằm hạn chế thấp nhất các thiệt hại cho công ty và kháchhàng Theo dõi liên tục và khả năng quan sát có thé được coi là bước cuối cùng củaquy trình DevOps Đây là một trong những bước quan trọng nhất trong vòng đờiDevOps và sẽ giúp đạt được hiệu quả và khả năng mở rộng thực sự.
Phan hồi và tối ưu hóa liên tục — Continuous feedback and optimizationPhản hồi và tối ưu hóa liên tục cập nhật các ý kiến, phản hồi từ khách hàng mộtcách liên tục dé đội ngũ phát triển và vận hành có thể tiến hành phân tích, phát hiệnnhững tính năng chưa được hoàn thiện, tối ưu hoặc thêm tính năng mới cho sản phẩm
Từ đó, nhóm phát triển sẽ lên kế hoạch phù hợp (khắc phục lỗi, tối ưu các tinh năng đã
có, cập nhật các tính năng mới) để cải thiện và tối ưu hóa dịch vụ, tăng trải nghiệmngười dùng Ngoài ra, các lỗi trong quá trình phát triển phần mềm cũng sẽ được pháthiện nhanh chóng, từ đó đưa ra những giải pháp khắc phục một cách kịp thời, đảm bảosản phâm được hoàn thành đúng tiến độ, cũng như chất lượng sản pham
2.3 Hệ thống quản lý phiên bản — mã nguồn
2.3.1 Tổng quan
Trong quá trình phát triển chương trình phần mềm, càng về sau ứng dụng cóthé sẽ phải thực hiện những thay đổi, nâng cap dé đáp ứng được nhu cầu của khách
hàng, dan tới mã nguồn sẽ ngày càng trở nên nhiều và phức tạp Chính vi thé, rất khó
dé lập trình viên có thé quản lý được các chức năng đã thực hiện, cũng như quản lýtất cả mã nguồn đã viết ra Đặc biệt đối với những dự án lớn, có số lượng lập trìnhviên đông thì việc chia sẻ mã nguồn, quản lý công việc giữa các thành viên trongnhóm càng trở nên cấp thiết với mục đích giúp cho dự án không bị chồng chéo côngviệc cũng như tăng tốc thực hiện dự án
15
Trang 39mã nguồn đang được chỉnh sửa xảy ra lỗi và lập trình viên muốn lấy lại trạng tháicủa tệp mã nguồn trước khi chỉnh sửa thì phải làm như thế nào? Cách đơn giản nhất
được sử dụng là tạo ra một bản sao chép của tệp đó trước khi chỉnh sửa Khi dùng
phương pháp này thì lập trình viên phải tạo ra nhiều tệp có nội dung giống nhaunhưng có tên khác nhau Và nếu cách đặt tên không có trật tự thì sẽ không thé phânbiệt được tệp nào là tệp mới nhất dé tiếp tục chỉnh sửa
Dé giải quyết những van dé này thì các hệ thống quản lý phiên bản được tạo
ra Và hệ thống quản lý phiên bản thường được các doanh nghiệp lựa chọn nhiều
nhất là hệ thống quản lý phiên bản phân tán Git
2.3.2 Hệ thống quản lý phiên bản
Hệ thống quản lý phiên bản mã nguồn - Version Control System (VCS) là theo
dõi và quản lý các thay đồi đối với hệ thống tệp VCS cũng cung cấp các tiện ích hop
tac dé chia sẻ và tích hợp các thay đổi hệ thống tệp này với những người dùng VCS
16
Trang 40khác Khi hoạt động ở cấp hệ thống tệp, VCS sẽ theo dõi các hành động thêm, xóa vàsửa đôi được áp dụng cho tệp và thư mục Kho lưu trữ là một thuật ngữ VCS mô tảkhi nào VCS đang theo dõi một hệ thống tệp Trong phạm vi của các tệp mã nguồnriêng lẻ, VCS sẽ theo dõi việc bổ sung, xóa, sửa đổi các dòng văn bản trong tệp đó
2.3.2.1 Hệ thống quản lý phiên bản tập trung - (Centralized version control
- CVC)
Mô hình sử dụng kiến trúc Client-Server Trong mô hình này, Server đóngvai trò là một kho dữ liệu (Repository) duy nhất để lưu trữ tất cả các dữ liệu của
dự án như tập tin, mã nguồn, dependencies, gói cài đặt Khi có nhu cầu sử dụng,
những thành viên của trong dự án (client) sẽ kết nối đến server dé lấy phiên banmới nhất của mã nguồn về máy (check out), sau đó có thể cập nhật (commit) tất
cả các thay đôi lên server.
Computer A Central VCS Server
Checkout
CS || Version Database
Computer B
Checkout
Hình 2 5 Hệ thong Quản ly phiên bản tập trung
2.3.2.2 Hệ thống quản lý phiên bản phân tán (Distributed version control
-DVC)Một giải pháp phô biến hơn của hệ thống quản lý phiên bản mã nguồn sudụng mô hình phân tan là Git Khi các lập trình viên (client) lây mã nguồn phiênbản mới nhất (clone) từ server về máy thì hệ thống sẽ tải toàn bộ cả kho mã nguồn(repository), vì thế máy client lúc này có thể đượ xem như một kho mã nguồn
17