1. Trang chủ
  2. » Luận Văn - Báo Cáo

Khóa luận tốt nghiệp An toàn thông tin: Thiết kế và triển khai hệ thống phát triển phần mềm tự động và an toàn theo mô hình DevSecOps

157 7 0
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Thiết kế và triển khai hệ thống phát triển phần mềm tự động và an toàn theo mô hình DevSecOps
Tác giả Lê Thanh Hồng Nhựt, Châu Thị Nguyệt
Người hướng dẫn THS. Nguyễn Thanh Hoa
Trường học Đại học Quốc gia TP. HCM Trường Đại học Công nghệ Thông tin
Chuyên ngành An toàn thông tin
Thể loại Khóa luận tốt nghiệp
Năm xuất bản 2021
Thành phố TP. HCM
Định dạng
Số trang 157
Dung lượng 39,55 MB

Nội dung

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: * Nghiên cứu về mô hình DevOps, mô hình DevSecOps, các công cụ hỗ trợ tíchhợp liên tục

Trang 1

ĐẠI HỌC QUOC GIA TP HO CHÍ MINH

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN KHOA MẠNG MÁY TÍNH VÀ TRUYÈN THÔNG

LÊ THANH HONG NHUT

CHÂU THỊ NGUYỆT

KHÓA LUẬN TÓT NGHIỆP

THIET KE VÀ TRIEN KHAI HỆ THONG PHÁT TRIEN

PHAN MEM TU DONG VA AN TOAN THEO MO HINH

DEVSECOPS

Design and deployment of an automatic and secure software

development system based on the devsecops model

KY SU NGANH AN TOAN THONG TIN

TP HO CHi MINH, 2021

Trang 2

ĐẠI HỌC QUÓC GIA TP HÒ CHÍ MINH

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN

KHOA MẠNG MÁY TÍNH VÀ TRUYÈN THÔNG

LÊ THANH HONG NHUT - 16520901

CHAU THỊ NGUYET - 16520859

KHÓA LUẬN TÓT NGHIỆP

THIET KE VÀ TRIEN KHAI HỆ THONG PHÁT TRIEN

PHAN MEM TU DONG VA AN TOAN THEO MO HINH

DEVSECOPS

Design and deployment of an automatic and secure software

development system based on the devsecops model

KY SU NGANH AN TOAN THONG TIN

GIANG VIEN HUONG DAN

THS.NGUYEN THANH HOA

Trang 3

DANH SÁCH HỘI ĐÒNG BẢO VỆ KHÓA LUẬN

Hội đồng chấm khóa luận tốt nghiệp, thành lập theo Quyết định số

-Ti8ầy của Hiệu trưởng Trường Đại học Công nghệ Thông tin.

AT ~ Chủ tịch.

PA =— eee e eee c cece eee eeseee nessa eee een eee ~ Ủy viên

Trang 4

ĐẠI HỌC QUOC GIA TP HCM CONG HÒA XÃ HỘI CHỦ 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

TP HCM, ngay thang 01 năm 2021

NHAN XÉT KHÓA LUẬN TOT NGHIỆP

Tên khóa luận:

CỦA CÁN BỘ HƯỚNG DẪN

Tên tiếng Việt: Thiết kế và triển khai hệ thống phát triển phần mềm tự động va an toàn theo

mô hình DevSecOps.

Tên tiếng Anh: Design and deployment of an automatic and secure software development

system based on the DevSecOps model.

Nhóm SY thực hiện:

Lê Thanh Hồng Nhựt

Châu Thị Nguyệt

Đánh giá Khóa luận

1 Về cuốn báo cáo:

Trang 5

Một số nhận xét về hình thức cuốn báo cáo:

Trang 6

3 Về chương trình ứng dụng:

Trang 7

Người nhận xét

(Ký tên và ghi rõ họ tên)

Trang 8

ĐẠI HỌC QUOC GIA TP HCM CONG HÒA XÃ HỘI CHỦ 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

TP HCM, ngay thang 01 năm 2021

NHAN XÉT KHÓA LUẬN TOT NGHIỆP

Tên khóa luận:

CUA CÁN BO PHAN BIEN

Tên tiếng Việt: Thiết kế và triển khai hệ thống phát triển phần mềm tự động va an toàn theo

mô hình DevSecOps.

Tên tiếng Anh: Design and deployment of an automatic and secure software development

system based on the DevSecOps model.

Nhóm SY thực hiện:

Lê Thanh Hồng Nhựt

Châu Thị Nguyệt

Đánh giá Khóa luận

1 Về cuốn báo cáo:

Trang 9

Một số nhận xét về hình thức cuốn báo cáo:

Trang 10

3 Về chương trình ứng dụng:

Trang 11

Người nhận xét

(Ký tên và ghi rõ họ tên)

Trang 12

LỜI CÁM ƠN

Hoàn thành khóa luận tốt nghiệp này ngoài công sức và sự cố gắng của

nhóm tác giả thì còn có sự hỗ trợ và giúp đỡ của các thầy cô, các anh chị,bạn bè và gia đình Nhóm tác giả xin bày tỏ lòng biết ơn đến mọi người

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 Đại học Công nghệ Thông tin và các thầy, cô KhoaMạ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 những năm học tập Với vốn kiến thức được tiếp thutrong quá trình học tập không chỉ là nền tảng cho quá trình hoàn thànhkhóa luận tốt nghiệp mà còn là hành trang quý báu để sau này bước vào.đời một cách vững chắc và tự tin Bên cạnh đó, nhóm tác giả cũng gửilời cảm ơn chân thành đến phòng Lab E3.1 và phòng thí nghiệm An toànthông tin InsecLab đã tạo điều kiện cung cấp cơ sở vật chất để dé tài củanhóm tác giả có thể hoàn thiện đến ngày hôm nay

Đặc biệt, xin gửi lời cảm ơn đến Ths.Nguyễn Thanh Hòa đã tạo mọi điềukiện, giúp đỡ tận tình và nhiệt tình hướng dẫn chúng tôi hoàn thành tốt

khóa luận này.

Cuối cùng, chúng tôi xin cảm ơn đến gia đình, người thân và bạn bè đã tạotiền dé, điều kiện thuận lợi, cũng như khích lệ, động viên chúng tôi hoànthành dé tài này

Chúng tôi xin chân thành cảm ơn!

Trang 13

22.1 Nguéngéchinhthanh 12

2.2.2 LợiíchcủaDevOps ẶẶ 15

223 QuytrìnhDevOps 16

Trang 14

MỤC LỤC

2.4

2.5

2.6

2.2.4 Tình hình nghiên cứu - 19

Mô hình DevSecOps 20

23.1 Nguồngốchìnhthành - 20

2.3.2 Các nguyên tắc đặc trưng cho DevSecOps 22

2.3.3 TriénkhaiDevSecOps - 22-20005 24 2.34 Tình hình nghiên cứu 25

Tích hợp và triển khai liên tục 26

2.4.1 Phát triển phần mềm liên tục - 26

2.4.2 Tíchhợpliêntục 27

2.43 Phân phối liêntục cà 28 2.44 Triển khai lêntục ẶẶỐẶ 31 2.45 Jenkin⁄ gy « x« - À 33

Hệ thống quản lý phiên bản mã nguồn 35

2.5.1 Tổn hang Me 4 \p§m.j _ 35

2.5.2 Hệ thống quản lý phiênbản 36

2.5.2.1 Hệ thống quản lý phiên bản tập trung 36

2.5.2.2 _ Hệ thống quản lý phiên ban phântán 37

2.5.2.3 Lợi ích của hệ thống quản lý mã nguồn 39

Pa adal 40 2.5.4 Githab 2 LH HQ HH HH ha 44 Container hóa và quản lý ha tầng container 45

2.6.1 AohOa 2 .“.ẽ Ha 45

2.6.2 Containerhéa 2.2 QQ S 46 2.6.3 Docker “6a -.( 47

2.6.4 Quản lý và điềuphối 49

2.6.5 Kubernetes Ặ Q Q Q Q Q Q Q ee 49

2.6.6 Rancher Q Q Q Q ee ee 52

Trang 15

3 PHAN TÍCH VA THIET KẾ HỆ THONG 61

3.1 Phân tích và thiết kế hệthống - 61

3.1.1 Môhìnhtổngthể 613.1.2 M@Ohinhchitiét 2.0 0 eee 633.2 Các thành phằnhệthống - 64

3.2.1 Trang web quản trị hệthống - 643.2.2 Quản lý phiên bản mã nguồn - Kho lưu trữ mã nguồn (GitLab) 68

3.2.3 Tíchhợpliêntục 70

3.2.3.1 GilabRunnr 70

3.2.3.2 lenkins ee eee 70 3.2.4 Quản lý Dockerlmage 76

3.25 Triển khai lêntục ẶẶSẶ T1

3.2.6 Các công cụbảomật cẶ 823.2.7 Giám sát tích hợp và triển khai liên tục - ELK Stack 86

4 TRIEN KHAI HE THONG VA DANH GIA KET QUA 88

4.11 Théngtinphancting 2.2 2.0.0 eee 88

4.1.2 Giới thiệu du an thửnghệm 89

4.1.3 Kichbảnthửnghệm 90

Trang 16

MỤC LỤC

4.1.3.1 Kịch ban 1 - Triển khai DevSecOps cho dự án quản

trị hệ thống (Administration Dashboard)_ 90

4.1.3.2 Kịch ban 2 - Phát triển tính năng mới trên Dashboard có tôn tại lỗ hống tại mã nguồn 95

4.1.3.3 Kịch ban 3 - Phát triển tính năng mới trên Dashboard có tồn tại lỗi cơ bản của ngôn ngữ lập trinh 97

4.1.3.4 Kịch ban 4 - Triển khai DevSecOps cho dự án thương mại Kmarket 102

4.2 Đánh giá hệ thống đã triển khai - 108

421 Uudiém Z7 ,Ø5ZV11ộmM.ốỔÖ Ö —4d 108 42.2 Hanché 20g eee 109 5 KẾT LUẬN VA HƯỚNG PHAT TRIEN 110 5.1 Kétluan 4” gop ` cca |Jj À 110 5.2 Hướngpháttriển ee 111 TÀI LIỆU THAM KHẢO 112 PHỤ LỤC A 118 1 Nội dung tập tin Jenkinsfile 118

2 Nội dung tập tin Dockerfile 124

3 Nội dung tập tin buildsh 125

4 Nội dung tập tindeploysh 127

5 Nội dung tập tin giab-ci.yml 128

PHỤ LỤC B 129

Trang 17

Danh sách hình vẽ

21

2.2

2.3

24

2.5

2.6

2.7

2.8

2.9

2.10

211

2.12

2.13

2.14

2.15

2.16

»

Các giai đoạn của mô hình Waterfall 9

Mô hình Scrum «gore .x.ấ ` lại Sự hình thành DevOps 14

DevSecOps tích hợp các phương thức bảo mật vào toàn bộ các giai đoạn của DeVOps SH ee 21 Mối quan hệ giữa tích hợp liên tục, phân phối liên tục và triển khai liên tục trong phát triển phần mềm .- 27

Mô hình tích hợp liên tục 28

Mô hình phân phối liên tục 29

Mô hình triển khai liên tục - 32

Hệ thống quản lý phiên bản tập trung 37

Hệ thống quản lý phiên bản phân tín 38

Thu mục Git, thư mục làm việc và khu vực tổ chức 43

Mô hình ảo hóa Ốc Ặ 46 Mô hình containerhóa 47

Kiến trúc Kubernetes Ặ cà 50 Các thành phần của Rancher 52

Cơ chế hoạt động của ELK Stack 60

Mô hình tổng thể 62

Trang 18

DANH SÁCH HÌNH VẼ

3.2

3.3

3.4

3.5

3.6

3.7

3.8

3.9

3.10

3.11

3.12

3.13

3.14

3.15

3.16

3.17

3.18

3.19

3.20

3.21

3.22

3.24

3.25

3.26

3.27

Luéng xử lý của hệ thống 63

Giao diện đăng nhập hệ thống 65

Giao diện Mô hình trang quản trị 65

Giao diện trong menu Development 66

Giao diện trong menu Securty 66

Giao diện trong menu Operations 67

Giao diện quản lý tài khoản truy cập Dashboard Administration 67

Giao diện xem thông tin cá nhân người dùng 68

Tạo mới lem Ặ ee ee 71 Đặt tên và tích vào Multibranch Pipleline 72

Điền tên hiển thị và mô tả cho dựán 72

Chọn tên ứng dụng lưu trữ mã nguồn .- 73

Nhập tên đường dẫn tới mã nguồn và chọn tài khoản chứng thực mã nguồn fay N/ GIẢ 7 —З — Ẵ- 73 Kết quả của Jenkins sau khi quét tat cả các nhánh mã nguồn 74

Tiền hành quá trình Cl trên nhánh dev 74

Các giai đoạn được hiển thị từ Jenkinsfile 76

Giai đoạn build được biểu diễn trong Jenkinsfile T1 Triển khai dự án mới - 78

Nhập thông tin tạo project mới 79

Nhấn ’Add Record’ để thêm mới record 80

Điền tên, namespace và các thông tin khác của Record 2 81

Điền thông tin port của Record 81

Dự án k-market đã được triển khai thành công 82

Kết quả của SonarQube sau khi quét toàn bộ manguén 83

Doan mã thực thi OWASP Dependency Check trong Jenkinsfile 84

Kết quả Owasp depedency check quét toàn bộ mã nguồn dy dn 84

Trang 19

DANH SÁCH HÌNH VẼ

3.28

3.29

3.30

41

42

43

44

45

46

47

48

4.9

4.10

411

4.12

4.13

4.14

4.15

4.16

4.17

4.18

4.19

4.20

421

4.22

4.23

4.24

Kết quả sau khi Arachni quét toàn bộ dự án da deploy dựa vào URL 85

Kết quả sau khi quét toàn bộ images §6

Kết quả hiển thị log khi hệ thống ELK nhận được 87

Tao mới repository cho du án Gitlab 90

Jenkins tiến hành build dự án trên nhánh Dev 91

Kết qua log Kibana thông báo Jenkins da build thành céng 92

Kết quả sau khi SonarQube quét mã nguồn 92

Kết quả sau khi Owasp Dependency Check quét mã nguồn 93

Kết quả sau khi Arachni quét toàn bộ dự án đã được triển khai 93

Kết quả sau khi Kubei tiền hành quét Containers 94

Kết quả sau khi triển khai dự án thành công - 94

Kết quả sau khi quét mã nguồn bằng SonarQube 96

Lỗ hổng alert từ nhà phát triển 96

Lỗ hổng debugger từ nhà phát triển 97

Kết quả sau khi quét mã nguồn bằng SonarQube 98

Lỗi cơ bản sử dụng phép so sánh khi lập trình 99

Lỗi cơ bản Error ee 100 Lỗi cơ bản Duplicate co 101 Lỗi cơ bản unreachable code 102

Tao mới repository cho dự án Giab 103

Jenkins tiến hành build dự án trên nhánh Dev 104

Kết quả log Kibana thông báo Jenkins đã build thành công 104

Kết quả sau khi SonarQube quét mã nguồn 105

Kết quả sau khi Owasp Dependency Check quét manguén 106

Kết quả sau khi Arachni quét toàn bộ dự án đã được triển khai 106

Kết quả sau khi Kubei tiền hành quét Containers 107

Kết qua sau khi triển khai dự án thành công - 107

Trang 20

Application Programming Interface

Culture, Automation, Measurement Sharing

Continuous Deployment

Continuous Delivery

Continuous Integration

Công nghệ thông tin

Continuous Software Engineering

Domain Name System

Software Development Life Cycle

Version Control Systems

Virtual Machine

Tri tuệ nhân tạo

Giai diện lập trình ứng dụng

Văn hóa, tự động, đánh giá, chia sẻ

Triển khai liên tụcPhân phối liên tục

Hệ thống quản lý phiên bản

Máy ao

Trang 21

TÓM TẮT

DevOps là một văn hóa kết hợp giữa phát triển va vận hành, được áp dụngngày cà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ằm giúp tổ chức có thể phát triển, triển khai và đưa sản

phẩm tới khách hàng - người tiêu dùng một cách nhanh nhất có thể Tuynhiên, trong văn hóa DevOps vẫn chưa chú trọng đến van dé bảo mật và antoàn thông tin, bên cạnh đó, các phương pháp bảo mật truyền thống không

thể theo kịp DevOps Vì vậy, DevSecOps là một hướng để nhóm tác giả có

thể nghiên cứu, thử nghiệm và đánh giá nó Trong bài khóa luận này, nhómtác giả sẽ cung cấp cái nhìn tổng quan về DevOps và DevSecOps, cùng vớicác cơ sở lý thuyết liên quan Từ đó, nhóm tác giả sẽ xây dựng một mô hìnhphát triển phần mềm tự động và an toàn theo mô hình DevSecOps với các

công cụ tích hợp Sau đó, mô hình sẽ được thử nghiệm với các dự án thực

tế để đánh giá ưu nhược điểm của hệ thống và khả năng ứng dụng hệ thông

vào quá trình phát triển phần mềm của các doanh nghiệp vừa và nhỏ.

Trang 22

1.1 Đặt van đề

Phát triển phần mềm là một lĩnh vực trong ngành công nghiệp máy tính đ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ông tin Từnhững năm 1990 cho đến nay, các phương pháp phát triển phần mềm đang càng ngàyđược cải tiền với mục đích rút ngắn thời gian phát triển — đưa sản phẩm tới tay người sửdụng nhanh nhất mà vẫn đảm bảo chất lượng sản phẩm [1] Phương pháp Agile ra đời

là bước ngoặc đánh dấu nhằm đưa sản phẩm tới người tiêu dùng một cách nhanh nhất.Phương pháp Agile tập trung vào việc cảm nhận và đáp ứng các yêu cầu của ngườidùng để đưa ra những thay đổi phù hợp [2]

DevOps là một phương pháp tiếp cận mới hơn nhằm mục đích kết hợp phát triển

phần mềm (software development) và vận hành phần mềm (software operation) [3]

DevOps hiện nay dang được ứng dụng rộng rãi, bởi nó đã giúp cho quá trình phát triển

phan mềm nhanh hơn và tốt hơn Tuy nhiên, vấn dé bảo mật trong DevOps là một tháchthức vì các phương pháp bảo mật truyền thống đã không thể theo kịp với tốc độ phát

Trang 23

triển nhanh chóng của DevOps [4] Chính vì thế, việc ứng dụng các công nghệ, kỹthuật, công cụ bảo mật trong DevOps đang được các công ty, tổ chức đặc biệt quan

tâm.

DevSecOps tập trung vào việc tích hợp bảo mật sớm hơn trong quá trình phát triển

phần mềm và bằng cách đó, nó có thể giảm thiểu rủi ro từ các lỗ hổng bảo mật Tóm

lại, DevSecOps là một mô hình phát triển phần mềm tương đối toàn diện, có khả nănggiả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 và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:

* Nghiên cứu về mô hình DevOps, mô hình DevSecOps, các công cụ hỗ trợ tíchhợp liên tục và triển khai liên tục trong phát triển phần mềm và 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

* Thiết kế và triển khai hệ thống phát triển phần mềm theo mô hình DevSecOps

Hệ thống này sẽ tích hợp liên tục (Continuous Integration - Cl) và triển khai liêntục (Continuous Delivery - CD) phần mềm, đồng thời kết hợp với việc kiểm tratính bảo mật trong quá trình phát triển

5 Thực hiện kiểm tra và đánh giá được các ưu điểm và hạn chế của hệ thống cũng

như khả năng ứng dụng hệ thống vào quá trình phát triển phần mềm của các

doanh nghiệp vừa và nhỏ.

w

Trang 24

1.3 Đôi tượng nghiên cứu

Trong khóa luận này, nhóm tác giả sẽ nghiên cứu:

* Mô hình DevSecOps.

* Các công cụ hỗ trợ cho quá trình tích hợp liên tục và triển khai liên tục (CI/CD)

* Các công cụ hỗ trợ kiểm thử được sử dụng để kiểm tra tinh bảo mật của ứng

dụng trong quá trình phát triển phần mềm

1.4 Phạm vi nghiên cứu

Xây dựng mô hình tập trung các giải pháp mã nguồn mở có thể triển khai trên nền

tảng container hóa (Docker, Kubernetes), có thể được ứng dụng cho các doanh nghiệp

vừa và nhỏ trong quá trình phát triển phần mềm

1.5 Những đóng góp của khóa luận

1.5.1 Tính mới của đề tài

Trong vài năm gần đây, một phương pháp mới kết hợp phát triển phần mềm và vậnhành phần mềm để cho phép phát hành sản phẩm nhanh hơn ra đời Phương pháp nàyđược gọi là DevOps Phương pháp DevOps đang được áp dụng rộng rãi trong cộng đồngphát triển phần mềm [4] Tuy nhiên, từ quan điểm bao 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ó [6] Để đảm bảo các biện phápbảo mật thích hợp được áp dụng trong suốt quá trình phát triển phần mềm, DevSecOps

Trang 25

đã được tạo ra Phương pháp này áp dụng bảo mật vào quy trình phát triển sản phẩm,

loại bỏ các lỗi có thể xảy ra và đảm bảo các hệ thống và mạng hoạt động ổn định, phùhợp với xu hướng phát triển phần mềm trong tương lai gần [5]

1.5.2 Khả năng ứng dụng thực tế của đề tai

Các lỗ hổng phần mềm thường là nguyên nhân của các sự cố về bảo mật thông tin,

do vậy việc đảm bảo bảo mật thông tin là một trong những van dé cốt lõi của doanhnghiệp Trong thực tế, chi phí xử lý sự cố khi xảy ra các van đề về bảo mật thông tin làrất lớn Ngoài việc tốn thời gian và nguồn luc để xử lý thì van dé quan trọng hơn là có

thể làm mit đi sự tin tưởng của khách hàng.

Trong các doanh nghiệp chỉ sử dụng DevOps thì việc kiểm tra bảo mật và kiểm thửứng dụng thường được đặt ở vị trí cuối cùng cho đến khi kết thúc quá trình phát triểnsản phẩm Điều này dẫn đến tình trạng phải sữa lỗi ở thời điểm cuối cùng và có thể làm

chậm trễ đáng kể trong quá trình chuyển giao sản phẩm

Tuy nhiên với DevSecOps, quá trình bảo mật được tích hợp và tiến hành song hànhvới quá trình phát triển (developement) và quá trình vận hành (operation) [6] Điều nàyđảm bảo các lỗ hổng bảo mật được phát hiện sớm nhất có thể và mã nguồn phát triểnđược bảo mật [5] Do vậy, sản phẩm vừa đảm bảo tính bảo mật thông tin, vừa đảm bảothời gian chuyển giao sản phẩm cho khách hàng

Từ đó, 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ầnmề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ế

Trang 26

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ệu thamkhảo, khóa luận được bố cục thành 5 chương như sau:

Chương 1 - Mở đầu

Đặt vấn dé và trình bày sơ lược về mục dich, đối tượng, phạm vi nghiên cứu vanhững đóng góp của đề tài

Chương 2 - Cé sở lý thuyết

Trình bày và giải thích các cơ sở lý thuyết, định nghĩa và giải thích nguyên tắc hoạt

động của DevOps, DevSecOps và các công nghệ được nhóm tác giả sử dụng trong đềtài như: Tích hợp và triển khai liên lục, công nghệ 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, Rancher, SonarQube, Kubei, ELK Stack, Bên cạnh đó, trình

bày về tình hình nghiên cứu của DevOps và DevSecOps ở trong và ngoài nước

Chương 3 - Phân tích và thiết kế hệ thống

Tién hành phân tích và thiết kế sơ đồ hệ thống, trình bày về luồng xử ly (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

nghiên cứu: Thực hiện tích hợp và triển khai liên tục quy trình phát triển ứng dụng web

bằng việc kết hợp Jenkins và Gitlab, triển khai ứng dụng web trên nền tảng Kubernetes,kiểm tra tính 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, quan lý quá trình hoạt động của

toàn bộ hệ thống

Chương 4 - Triển khai hệ thống và đánh giá kết quả

Trinh bày các thông tin phần cứng của hệ thống, các kịch bản thử nghiệm hệ thống

Trang 27

thông qua việc mô phỏng các dự án thực tế Từ đó, đánh giá ưu điểm và hạn chế của hệthống đã triển khai.

Chương 5 - Kết luận và hướng phát triển

Tổng kết các nội dung đã nghiên cứu trong dé tài Từ đó đề xuất các hướng pháttriển của đề tài có thể tiếp tục thực hiện trong tương lai

Trang 28

Chươ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

Sự phát triển nhanh chóng của thị trường phát triển phần mềm đã và đang đặt ranhững thách thức cho việc xây dựng một quy trình phát triển phần mềm nhanh chóng

và mang lại hiệu quả cao nhất Những mô hình phát triển phần mềm cũ không đáp ứngđược yêu cầu của thị trường đang dan bị thay thế bởi những mô hình mới phù hợp hơn

2.1.1 Waterfall

Mô hình phát triển phần mềm thác nước (Waterfall) được nhắc đến lần đầu tiên

vào năm 1970 trong một bài báo của Winston W Royce Trong bài báo này, đây là một

mô hình phát triển phần mềm khả thi, hạn chế những rủi ro trong quá trình phát triểnphần mềm và cung cấp được các sản phẩm theo yêu cầu Tuy nhiên, Winston W Royce

không sử dụng thuật ngữ waterfall để gọi tên mô hình lúc này [7]

Mô hình Waterfall là quá trình phát triển phần mềm tuần tự, các bước để phát triển

Trang 29

phan mềm được tiền hành tuần tự từ trên xuống dưới, tương tự như dòng chảy của mộtthác nước Mô hình này mô tả các giai đoạn phải được thực hiện để phát triển thànhcông một phần mềm [8] Các giai đoạn của mô hình Waterfall được thể hiện trong hình

2.1.

Implementation

Hình 2.1: Các giai đoạn của mô hình Waterfall.

Trong mô hình Waterfall, giai đoạn phía sau chỉ có thể được tiến hành khi giai đoạntrước nó hoàn thành Tuy nhiên, trong một số mô hình Waterfall đã được sửa đổi thìnếu phát hiện sai sót xảy ra 6 giai đoạn sau mà nguyên nhân gây ra nó nằm ở giai đoạntrước đó thì có thể quay lại giai đoạn trước đó để sửa đối cho phù hợp Day là mô hình

tiêu chuẩn để phát triển phần mềm.

2.1.2 Agile

Vào khoảng những năm 1990, sự thiéu linh hoạt trong mô hình Waterfall đã dẫnđến sự thất bại của một số dự án phát triển phần mềm sử dụng mô hình này Với sựphát triển ngày càng nhanh chóng của thị trường phát triển phần mềm thì việc làm sao

Trang 30

đưa sản phẩm đến tay người tiêu dùng càng nhanh càng tốt ngày càng được chú trọng.Nhưng mô hình Waterfall lại không đáp ứng được điều này cho nên đã dẫn đến sự rađời của mô hình phát triển phần mềm linh hoạt (Agile) [9].

Mô hình Agile thực chất 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 khả năng đáp ứng được những thay đổi khi có yêu cau [1]

“Tuyên ngôn Agile [10] được xuất bản năm 2001 đã hệ thống hóa các nguyên tắc của môhình này Một trong số các nguyên tắc trong Tuyên ngôn Agile nói rang: "Our highest

priority is to satisfy the customer through early and continuous delivery of valuable

software." Nguyên tắc này có thé được hiểu là: "Uw tiên cao nhất của chúng tôi là lamhà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ần mém có giá

Đầu những năm 1990, mô hình phát triển phần mềm Scrum được sử dụng để quản

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 Scrumcho phép sử dụng nhiều quy trình và kỹ thuật khác nhau để con người có thể xác địnhcác van dé đang diễn ra và đưa ra giải pháp phù hợp, đảm bảo được năng suất và chấtlượng sản phẩm tốt nhất để đưa đến tay khách hàng

'Vào năm 2002, một quyển sách mang tên "Agile Software Development with Scrum"

[11] mô tả chỉ tiết về Scrum đã được xuất bản Mô hình phát triển phần mềm Scrum

được minh họa trong hình 2.2.

Trang 31

Product Backlog Sprint Backlog vong lap Cac phần tăng trưởng

có thể chuyển giao.

Hình 2.2: Mô hình Scrum.

Mô hình Scrum chia toàn bộ dự án thành các quá trình nhỏ hơn kéo dài từ 2-4 tuần.Quá trình nhỏ này được lặp đi lặp lại và được gọi là Sprint Sprint là thành phần quan

trọng nhất của mô hình Serum Một Sprint mới sẽ được bắt đầu ngay khi Sprint trước

đó kết thúc [12] Day là sự khác biệt cơ bản giữa mô hình Scrum và mô hình Waterfall

2.1.4 Lean

Quy trình phát triển phần mềm tinh gon (Lean) là quy trình ứng dung các nguyên

tắc sản xuất tinh gọn của Hệ thóng sản xuất Toyota - Toyota Production System [13] vào lĩnh vực phát triển phần mềm Phát triển phần mềm Lean bao gồm bay nguyên tắc

chính được trình bay chỉ tiết trong quyến sách "Lean software development: an agiletoolkit” [L4] xuất bản năm 2003:

* Hạn chế lãng phí

* Nâng cao kiến thức

* Quyết định càng muộn càng tốt

11

Trang 32

* Cung cấp càng nhanh càng tốt

Trao quyền quyết định cho nhóm phát triển

Xây dựng chất lượng sản phẩm

Có cái nhìn bao quát toàn bộ

Cốt lõi của quy trình phát triển phần mềm tinh gọn là hạn chế sự lãng phí - nhữngyêu tố làm ảnh hưởng đến lợi nhuận thu được từ khách hàng - một cách tối đa

Quy trình phát triển phần mềm Lean tập trung vào cách sử dụng CNTT để tạo ra

các giá trị cho khách hàng chứ không tập trung vào quy trình phát triển phần mềm [15] Lean là sự tổng hợp của một hệ thống các nguyên tắc và triết lý dùng để xây dựng hệ

điều phối, phát hành phần mềm trong công ty) không thể làm việc nhịp nhàng với

nhóm phát triển sản phẩm, tạo ra một "nit that cổ chai" trong quá trình phát triển sảnphẩm [16] Với cách làm việc truyền thống, nhóm phát triển làm việc riêng và nhómvận hành phần mềm làm việc riêng, họ sẽ có mục tiêu công việc khác nhau Nếu nhưmục tiêu của nhóm 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 thì mục tiêu

Trang 33

của nhóm vận hành phần mềm là tạo ra một hệ thống ổn định Trong một hoàn cảnhnào đó, hai mục tiêu này sẽ đối lập nhau, và các nhóm thì chỉ quan tâm đến công việccủa mình, dẫn đến sản phẩm dễ xảy ra vấn dé làm kéo dài thời gian phát triển và làmkhách hàng không hài lòng Vì thé, DevOps được sinh ra với ý tưởng là kết hợp Dev vàOps để thực hiện một mục tiêu chung là “Speed and Stability” - tốc độ và 6n định.

Phong trào DevOps bắt đầu hình thành trong khoảng thời gian từ năm 2007 đến

nă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

đề có hậu quả nghiêm trong trong quá trình phát triền phần mềm Năm 2009, tại hội

nghị Velocity, hai kỹ sư của Flickr là John Allspaw và Paul Hammond đã có một bài

thuyết trình nổi tiếng với tiêu đề "/0 Deploys per Day: Dev and Ops Cooperation at

Flickr" [L7] Trong bài thuyết trình này, Allspaw và Hammond đã thể hiện được cácmâu thuẫn và tranh cãi giữa nhóm phát triển và nhóm vận hành Bài thuyết trình của họcho thấy cách hợp lý nhất để quy trình phát triển phần mềm đáp ứng được nhu cầu ngày

càng cao của thị trường là thực hiện các hoạt động phát triển và vận hành ứng dụng

một cách liền mạch, minh bạch và được tích hợp hoàn toàn với nhau Cũng trong năm

này, được truyền cảm hứng sau khi xem bài thuyết trình của Allspaw và Hammond,

Patrick Debois đã tổ chức hội nghị mang tên "DevOpsDay" tại Bỉ [18] Từ đó, thuật

ngữ DevOps đã chính thức được sử dụng.

Trang 34

Hình 2.3: Sự hình thành DevOps.

Thuật ngữ DevOps được tao ra từ sự kết hợp của hai từ "Development (Dev)" và

"Operations (Ops)" DevOps mở rộng các nguyên tắc Agile và nhắn mạnh sự hợp tác và

trao đổi thông tin của các kỹ sư phát triển phần mềm (Dev - Developer - Development)

và bộ phận vận hành (Ops - Operator - Operations) bao gồm kỹ sư hệ thống, kỹ sư baomật, kỹ sư mạng, kỹ sư hạ tang, khi làm việc cùng nhau để tự động hóa quá trình

chuyển giao sản phẩm phần mềm, nhằm mục đích rút ngắn vòng đời phát triển phần mềm (SDLC) Với các dự án có kiến trúc phức tạp và quy mô lớn, việc thay đổi hay bổ sung các tính năng mới mang đế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ận phản hồi liên tục

Nói một cách dễ hiểu hơn thì DevOps là một sự kết hợp của các nguyên lý, kỹ

thuật, quy trình và các công cụ giúp tự động hóa quá trình lập trình và chuyển giao

phần mềm Với DevOps, các công ty có thể phát hành (release) các tính năng nhỏ rất nhanh, thu thập các phản hồi một cách nhanh chóng và đưa ra những thay đổi phù hợp

Trang 35

để nâng cao chất lượng sản phẩm DevOps nhắn mạnh vào con người và văn hóa, đồngthời tìm cách cải thiện sự hợp tác giữa các nhóm vận hành và nhóm phát triển.

DevOps được tạo ra để kết hợp tất cả những người có liên quan đến việc phát triển

và phát hành phần mém - người dùng (user), lập trình viên (developer), chuyên viênkiểm thử (tester), kỹ sư bảo mật hệ thống (security), kỹ sư quản trị hệ thống (systemadministrators) - vào một quy trình làm việc duy nhất, tự động hóa cao với trọng tâmchung là: phát hành phan mêm có chất lượng tốt nhất trong thời gian nhanh nhất mà

vẫn đáp ứng được các yêu cầu của người dùng, đồng thời vẫn duy trì được tính toàn

của công ty.

5 Độ tin cậy

Đảm bảo chất lượng cho các bản cập nhật ứng dụng và các thay đổi trong cơ

sở hạ tầng của hệ thống để nhóm phát triển vừa có thể triển khai ứng dụng mộtcách nhịp nhàng và nhanh chóng, đồng thời duy trì được trải nghiệm tích cực chongười dùng Tích hợp và phân phối liên tục giúp nhóm phát triển kiểm tra từngthay đổi va đảm bảo chúng đều hoạt động chính xác và an toàn

* Quy mô

Sự tự động hóa và tính nhất quán giúp quản lý những hệ thống phức tạp hoặc

giảm thiểu những rủi ro khi có sự thay đổi một cách hiệu quả, giúp vận hành và

Trang 36

quản lý cơ sở hạ tầng cũng như các quy trình phát triển ở quy mô phù hợp.

» Cải thiện khả năng cộng tác

Các nhóm phát triển phần mềm được xây dựng theo mô hình DevOps hoạt động

hiệu quả hơn Các nhóm phát triển va các nhóm nghiệp vụ cộng tác chặt chế với

nhau, phối hợp các quy trình công việc với nhau và cùng nhau gánh vác nhiềutrách nhiệm Điều này giúp giảm thiểu tình trạng làm việc kém hiệu quả và tiết

kiệm thời gian.

* Bảo mật

Khi không sử dụng DevOps, việc cân bằng giữa tốc độ phát triển sản phẩm và

bảo mật ứng dụng, dẫn đến mất nhiều thời gian hơn để phân phối sản phẩm Khi

sử dụng DevOps, các chính sách, công cụ kiểm soát tự động hóa và các kỹ thuật

quản lý được sử dụng để duy trì tốc độ phát triển sản phẩm mà không ảnh hưởngđến bảo mật sản phẩm

* Quản lý rủi ro

Sử dụng DevOps, các yếu tố rủi ro trong các giai đoạn phát triển ứng dụng sẽđược xác định sớm nhất có thể Việc phát hiện sớm vấn đề giúp việc sửa chữahoặc khắc phục có thể được tiến hành một cách nhanh chóng Từ đó, chất lượng

và thời gian phát hành sản phẩm sẽ được cải thiện, giúp nâng cao uy tín của cong

ty.

2.2.3 Quy trình DevOps

Lập kế hoạch liên tục - Continuous Planning

Để hỗ trợ các nhóm phát triển và vận hành thích nghi với những thay đổi nhanhchóng của thị trường phát triển phần mềm, các công ty cần phải có kế hoạch kinh

Trang 37

doanh phù hợp, tăng nhanh tốc độ hoàn thành dự án DevOps giúp cho phép các công

ty thực hiện điều này bằng cách ưu tiên hoàn thành các sản phẩm tồn đọng và tạo một

kênh giao tiếp chung với khách hang để có thể nhận phản hồi từ khách hàng một cáchnhanh nhất Điều quan trọng là việc lập kế hoạch phải được thực hiện thường xuyên đểđối phó với những thay đổi nhanh chóng của thị trường, đồng thời cần có sự kết hợpchặt chẽ giữa việc lập kế hoạch và việc thực hiện kế hoạch Lập kế hoạch liên tục làmột quá trình diễn ra theo chu kỳ và đạt được bằng cách: Lập kế hoạch theo từng đợtnhỏ, thực hiện kế hoạch, thu thập ý kiến phản hồi, trả lời các ý kiến phản hồi và điềuchỉnh kế hoạch nếu cần thiết [19]

Tich hợp liên tục - Continuous Integration

Tích hợp liên tục đòi hỏi sự kết nối giữa nhóm phát triển và nhóm vận hành Và đểđạt được điều này, việc tích hợp phải được thực hiện sớm nhất có thể, các thay đổi nên

được chia sẻ liên tục giữa các nhóm Tích hợp liên tục có thể được thực hiện một cách

tự động thông qua các công cụ tích hợp liên tục Sau khi lập trình viên thực hiện một

thay đổi và đưa nó lên kho lưu trữ, thay đổi này sẽ được phát hiện bởi hệ thống chứacông cụ tích hợp liên tục và việc kiểm tra độ an toàn được thực hiện, nếu có lỗi xảy ra

thì chúng sẽ được thông báo cho lập trình viên để tiền hành khắc phục càng sớm càng.

tốt Đâ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ểnphần mềm [19]

Phân phối liên tục - Continuous Delivery

Trong quá trình phân phối liên tục, ngay sau 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 sẽ được phát hành một cách thủ công

đến tay người dùng Phân phối liên tục là khả năng phát hành phần mềm bắt cứ khi

nào mà khách hàng muốn [19], thời gian phát hành sản phẩm phụ thuộc vào yêu cầu

của khách hàng chứ không phụ thuộc vào thời gian hoàn thành sản phẩm (sản phẩm đã

17

Trang 38

được hoàn thành nhưng chưa đến ngày phát hành mà khách hàng đặt ra thì vẫn chưathể phát hành sản phẩm).

Triển khai liên tục - Continuous Deployment

Trong 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 đượchoà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 tayngười dùng Các nguyên tắc của DevOps khuyến nghị tự động hóa việc triển khai sảnphẩ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

Kiểm thử liên tục rút ngắn thời gian kiểm thử sản phẩm và loại bỏ các lỗi có thể xảy ra ngay từ ban đầu bằng cách cho phép việc kiểm thử được tích hợp sớm nhất có

thể trong quá trình phát triển sản phẩm Tự động hóa tat cả các trường hợp thử nghiệm(test case) là cần thiết cho việc kiểm thử liên tục [19] Trong quá trình phát triển phầnmề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 để 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

Giám sát liên tục là quá trình tự động theo dõi các thay đổi và đưa ra các điều chỉnhphù hợp một cách liên tục Giám sát liên tục giúp nhóm phát triển và nhóm vận hành

có thể phản ứng kịp 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ách hàng Nó giúp phát triển và cung cấpphần mềm nhanh hơn và đáng tin cậy hơn

Phản hồi và tối ưu hóa liên tục - Continuous feedback and optimization

Trang 39

Phan hôi và tối ưu hóa liên tục cung cấp các ý kiến phản hồi một cách liên tục cho

nhóm phát triển để tiến hành phân tích nhu cầu khách hàng, phát hiện những tính năng

chưa tối ưu hoặc thêm tính năng cho sản phẩm Từ đó, nhóm phát triển sẽ điều chỉnh

kế hoạch phát triển sao cho phù hợp (tối ưu hóa các tính năng đã có, thêm các tínhnăng mới) để cải thiện và tối ưu hóa dịch vụ, gia tăng trải nghiệm người dùng Ngoài

ra, trong quá trình kiểm thử sản phẩm, các lỗi được phát hiện sẽ được phản hôi liên tụccho nhóm phát triển để đưa ra những giải pháp khắc phục một cách kịp thời, đảm baosản phẩm có chất lượng tốt nhất và tiền độ hoàn thành sản phẩm nhanh nhất

2.2.4 Tình hình nghiên cứu

Cuộc cách mạng công nghiệp 4.0 đã mang lại nhiều thay đổi cho lĩnh vực côngnghệ thông tin trên toàn thé giới Những yêu cầu mới của thị trường phát triển phầnmềm làm cho các doanh nghiệp phát triển phần mềm đang phải chạy đua để rút ngắn

thời gian phát triển và đẩy nhanh tốc độ phát hành sản phẩm Từ đó, DevOps ra đời với

mục đích đáp ứng những điều này Sau khi xuất hiện, DevOps đã nhận được nhiều sựquan tâm của cộng đồng công nghệ thông tin

Tir năm 2013 đến nay, số lượng các chuyên gia và nhà phát triển tham gia vào cuộckhảo sát của Puppet Labs về việc áp dụng DevOps vào các tổ chức công nghệ thông tinngày càng gia tăng, từ 4000 người trong năm 2013 đến 35000 người trong năm 2020[20, 21] Trong số những người tham gia khảo sát, có 63% nói rằng công ty của họ đãthực hiện phương pháp DevOps Một nghiên cứu khác gần đây của nhà cung cấp dịch

vụ công nghệ toàn cầu Claranet [22], có 88% doanh nghiệp ở Anh đã áp dụng DevOpshoặc có kế hoạch áp dụng trong một vài năm tới

Bên cạnh đó, số bài báo nghiên cứu về DevOps cũng ngày càng gia tăng Theo mộtkhảo sát của Leonardo, Carla, Fabio, Dejan và Paulo về các khái niệm và thách thứccủa DevOps, họ đã chọn ra 50 trong tổng số 167 bài báo đã được phát hành để phân

19

Trang 40

tích và đưa ra những tài liệu tổng quan về DevOps [23] Ngoài ra, họ cũng đã đưa ra

những số liệu về số cuốn sách nói tới DevOps được xuất bản qua các năm, trong đó

nhiều nhất là năm 2018 (117 cuốn sách) Từ đó có thể thấy, DevOps là một mối quantâm đặc biệt của cộng đồng công nghệ thông tin

Ở Việt Nam, DevOps cũng đang là một xu hướng rất được cộng đồng phát triển

phần mềm đặc biệt quan tâm Trong hai bài báo cáo Vietnam Developer Report xuấtbản tháng 08/2019 và Báo cáo thị trường IT Việt Nam xuất bản tháng 01/2020 của

TopDev [24, 25], DevOps đứng ở vị trí thứ ba trong danh sách các công nghệ thu hút

sự chú ý của lập trình viên, chỉ sau Machine Learning/AI và Big Data/Data Science.

Đây là một xu hướng mà các lập trình viên Back-end và System admin đang muốnhướng tới với mức lương có thể lên đến 450 triệu đồng/năm DevOps giúp hai giai

đoạn phát triển và vận hành xích lại gần nhau hơn nhắm rút ngắn thời gian phát triển sản phẩm Do đó, trong những năm sắp tới, DevOps sẽ là một vị trí quan trọng mà

nhiều công ty đang tìm kiếm, đặc biệt là những công ty có hệ thống lớn

Tuy nhiên, khi tích hợp các lập trình viên (developer), kỹ sư vận hành hệ thống(operator) và quản trị viên hệ thống (administrator) thì số người có liên quan đến mỗi

Ngày đăng: 02/10/2024, 04:58

TỪ KHÓA LIÊN QUAN

TRÍCH ĐOẠN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w