QuickFix.

This commit is contained in:
2024-02-28 00:59:14 +02:00
parent e6fa5928c5
commit ef5cb33f23
25 changed files with 2143 additions and 1398 deletions

View File

@@ -2,114 +2,26 @@
\noindent Στην παρούσα ενότητα θα αναλυθούν οι τεχνολογίες που χρησιμοποιήθηκαν
για την υλοποίηση του συστήματος, οι αποφάσεις που πάρθηκαν κατά την ανάπτυξή
του και οι σχεδιαστικές επιλογές που έγιναν. Επίσης, θα πραγματοποιηθεί
απεικόνιση των συσχετίσεων μεταξύ των συστατικών του συστήματος και θα αναλυθεί
περαιτέρω η λειτουργία τους.
του και οι σχεδιαστικές επιλογές που πραγματοποιήθηκαν. Επίσης, θα αναλυθεί η
αρχιτεκτονική του συστήματος και θα επεξηγηθούν οι λειτουργίες των συστατικών
του.
\section{Αποφάσεις που πάρθηκαν κατά την ανάπτυξη} \label{developmentDecisions}
\section{Μοντέλο ανάπτυξης}
Κατά την ανάπτυξη του συστήματος, προκειμένου να επιτευχθούν οι στόχοι που
θέσαμε στην Ενότητα \ref{overcomingDockerDisadvantages} και συγκεκριμένα για
την επικοινωνία με διάφορους παρόχους νέφους, επιλέχθηκε να γίνει χρήση της
βιβλιοθήκης libcloud \footfullcite{libcloud}. Μια από τις δύο επιλογές
βιβλιοθηκών της Apache \footfullcite{apache} για την επικοινωνία με παρόχους
νέφους. Συγκριτικά με την βιβλιοθήκη jclouds \footfullcite{jclouds}, η οποία
σχεδιάστηκε για την γλώσσα Java \footfullcite{java}, η libcloud είναι πιο απλή
στην χρήση, αφού είναι σχεδιασμένη για την γλώσσα Python \footfullcite{python}.
Επιπροσθέτως, η libcloud είναι πιο διαδεδομένη και η γλώσσα python αποτελεί μια
πιο ευέλικτη επιλογή για τις ανάγκες του εργαλείου.
Η ανάγκη για μια βιβλιοθήκη που θα λειτουργεί ως μεσάζοντας μεταξύ του
εργαλείου και των παρόχων νέφους, οφείλεται στο γεγονός ότι οι πάροχοι νέφους
δεν διαθέτουν ένα κοινό API για την διαχείριση των υποδομών τους. Απεναντίας, ο
καθένας από αυτούς διαθέτει το δικό του API, το οποίο χρησιμοποιείται έμμεσα
μέσω του πίνακα ελέγχου του, που βρίσκεται στην ιστοσελίδα του, ενός δικού του
εργαλείου γραμμής εντολών, ή άμεσα μέσω της βιβλιοθήκης που παρέχει ο ίδιος. Η
libcloud αποτελεί μια προσπάθεια δημιουργίας ενός ενιαίου API, το οποίο
χρησιμοποιώντας τις ίδιες συναρτήσεις, επιχειρεί να προσκομίσει ίδια
αποτελέσματα ανεξαρτήτως του παρόχου νέφους που στοχεύει.
\clearpage
Παρ' όλη την προσπάθεια που καταβλήθηκε από την libcloud όμως, για την
ενοποίηση αυτή, οι διαφορές στους τρόπους λειτουργίας του κάθε παρόχου αρχίζουν
να εμφανίζονται σύντομα κατά την ανάπτυξη. Για το εργαλείο που προτείνει η
παρούσα διπλωματική εργασία, χρειάζεται να γίνει χρήση των λειτουργιών
\textquote{Compute} της βιβλιοθήκης. Στην αρχική σελίδα της, αναφέρεται
υποστήριξη για πάνω από 50 παρόχους. Κατά την σελίδα τεκμηρίωσης
\cite{libcloudProviders} για τις λειτουργίες \textquote{Compute}, αναφέρονται
48 πάροχοι σε έναν πίνακα ο οποίος αναγράφει την υποστήριξη ή απουσία αυτής,
διάφορων συναρτήσεων εικονικών μηχανών. Στις συναρτήσεις αυτές περιλαμβάνονται
η δημιουργία εικονικών μηχανών, η εκκίνηση, η παύση, η διαγραφή τους και εν
γένει όσες λειτουργίες είναι απαραίτητες για την ολοκληρωμένη λειτουργία του
εργαλείου. Από αυτούς τους 48 παρόχους, οι 25 υποστηρίζουν και τις 9
συναρτήσεις. Ωστόσο, από αυτούς τους 25 έπρεπε να αφαιρεθούν οι 20 για λόγους
όπως η μη ύπαρξη τεκμηρίωσης χρήσης από την libcloud, η μη συνέχιση της
λειτουργίας τους, η έλλειψη πληροφοριών τιμής ή δοκιμαστικής περιόδου για τις
υπηρεσίες τους και η αδυναμία δημιουργίας λογαριασμού στην επίσημη σελίδα τους.
Επομένως, υπάρχουν εν τέλει 5 πάροχοι νέφους που δύναται να χρησιμοποιηθούν
υποστηρίζοντας όλες τις πιθανές λειτουργίες διαχείρισης εικονικών μηχανών.
Τέλος, από αυτούς τους 5, επιλέχθηκαν για επίσημη υποστήριξη από το εργαλείο
που προτείνεται στην παρούσα διπλωματική εργασία, τα τρία μεγαλύτερα ονόματα
του χώρου, οι Amazon, Google και Microsoft. Οι άλλοι δύο είτε δεν παρείχαν
δοκιμαστική περίοδο των υπηρεσιών τους, είτε δεν υπήρχε εμπιστοσύνη ως προς την
ποιότητα των υπηρεσιών αυτών.
Παρακάτω θα διαπιστώσουμε πως ακόμα και με την χρήση της βιβλιοθήκης libcloud
και την επίσημη υποστήριξη όλων των λειτουργιών για κάθε πάροχο, υπήρχε η
ανάγκη χρήσης της επίσημης βιβλιοθήκης της Azure για την δημιουργία Resource
Group \footfullcite{azure-mgmt-resource} και Virtual Network
\footfullcite{azure-mgmt-network} διότι αυτές οι λειτουργίες δεν υποστηρίζονται
μέσω της libcloud. Επιπροσθέτως, δίχως την υποστήριξη των λειτουργιών αυτών, ο
χρήστης θα ήταν υποχρεωμένος να δημιουργεί αυτούς τους πόρους χειροκίνητα ή να
είναι περιορισμένος μονάχα σε μια γεωγραφική τοποθεσία. Οι δύο τελευταίες
επιλογές πάνε ενάντια σε έναν από τους βασικότερους στόχους του εργαλείου. Την
ομοιόμορφη λειτουργία για κάθε πάροχο νέφους που υποστηρίζεται.
\clearpage
Πέρα από την απόφαση για την χρήση της libcloud και την γλώσσα προγραμματισμού
Python, πάρθηκε επίσης η απόφαση για την υποστήριξη των 6 δημοφιλέστερων
επιλογών για λειτουργικά συστήματα Linux σε περιβάλλοντα διακομιστών. Οι
διανομές αυτές υποστηρίζονται και για τους 3 παρόχους νέφους και κάθε μια από
αυτές περιλαμβάνει διαφορετικές εκδόσεις της κάθε διανομής. Αυτές είναι οι εξής
για κάθε πάροχο:
\begin{savenotes}
\selectfont
\begin{table}[!ht]
\caption{Υποστηριζόμενες εκδόσεις διανομών για κάθε πάροχο}
\renewcommand{\arraystretch}{1.5}
\centering
\textgreek{\begin{tabular}{lc|c|c|c|}
\cline{3-5}
& & \multicolumn{3}{c|}{Πάροχοι} \\ \cline{3-5}
& & AWS & Azure & GCE \\ \hline
\multicolumn{1}{|c|}{\multirow{6}{*}{\rotatebox{90}{Διανομές}}} & Ubuntu \footfullcite{ubuntu} & 22.04, 22.10 & 22.04, 22.10 & Όλες \\ \cline{2-5}
\multicolumn{1}{|c|}{} & Debian \footfullcite{debian} & 10, 11 & 10, 11 & Όλες \\ \cline{2-5}
\multicolumn{1}{|c|}{} & CentOS \footfullcite{centos} & 7, 8, 9 & 8.4, 8.5 & Όλες \\ \cline{2-5}
\multicolumn{1}{|c|}{} & Fedora \footfullcite{fedora} & 37 & 36, 37 & Όλες \\ \cline{2-5}
\multicolumn{1}{|c|}{} & Red Hat Enterprise Linux \footfullcite{redhat} & 7.9, 8.6, 9 & 8.6, 9.1 & Όλες \\ \cline{2-5}
\multicolumn{1}{|c|}{} & openSUSE Leap \footfullcite{opensuse} & 15.3, 15.4 & 15.3, 15.4 & Όλες \\ \hline
\end{tabular}}
\label{table:supportedDistributions}
\renewcommand{\arraystretch}{1}
\end{table}
\end{savenotes}
Ο λόγος που οι εκδόσεις είναι συγκεκριμένες για τους παρόχους AWS και Azure,
είναι διότι ο αριθμός των διαθέσιμων διανομών και εκδόσεών τους είναι
υπερβολικά μεγάλος και κατά την εκτέλεση της λειτουργίας δημιουργίας λίστας
τους ή κατά τον έλεγχο της ορθότητας δεδομένων που εισάγει ο χρήστης, το
πρόγραμμα θα καθυστερούσε σε τεράστιο βαθμό να ολοκληρωθεί.
\clearpage
Για την ανάπτυξη του SecDep, ακολουθήθηκε το μοντέλο καταρράκτη. Στο μοντέλο
αυτό, κάθε στάδιο της δραστηριότητας ανάπτυξης εκτελείται σειριακά. Δηλαδή, για
την μετάβαση σε κάθε επόμενο στάδιο, απαιτείται η επιτυχής ολοκλήρωση του
προηγούμενου. Έτσι και εδώ, ξεκινάμε με την ανάλυση απαιτήσεων, έπειτα
προχωράμε στη σχεδίαση του συστήματος και τέλος φτάνουμε στην υλοποίησή του. Η
επίδειξη της τελικής μορφής του εργαλείου καλύπτεται στο Κεφάλαιο
\ref{installationANDShowcase}, ενώ η αποτίμηση των αποτελεσμάτων εκτέλεσής του,
στο Κεφάλαιο \ref{experimentationANDresults}.
\section{Απαιτήσεις από το εργαλείο} \label{toolRequirements}
Κατά την ανάπτυξη του εργαλείου, έγινε μια προσπάθεια να καλυφθούν ορισμένες
βασικές απαιτήσεις που θα έπρεπε να ικανοποιεί. Όπως όλα τα εργαλεία, έτσι και
αυτό έχει έναν σκοπό να εκπληρώσει. Ο σκοπός αυτός είναι η διευκόλυνση του
βασικές απαιτήσεις που θα έπρεπε αυτό να ικανοποιεί. Όπως όλα τα εργαλεία, έτσι
και αυτό έχει έναν σκοπό να εκπληρώσει. Ο σκοπός αυτός είναι η διευκόλυνση του
χρήστη ή ενός οργανισμού, στην εγκατάσταση και διαμόρφωση με αυτοματοποιημένο
τρόπο ενός ασφαλούς, κατανεμημένου περιβάλλοντος για την εγκατάσταση και
λειτουργία μιας εφαρμογής μικρο-υπηρεσιών. Για να γίνει αυτό πραγματικότητα,
@@ -119,86 +31,87 @@ Python, πάρθηκε επίσης η απόφαση για την υποστή
\begin{itemize}
\item \textbf{Το εργαλείο πρέπει να υποστηρίζει την χρήση των 3 μεγαλύτερων
ονομάτων στον κλάδο της νεφο-υπολογιστικής}
\item Το εργαλείο πρέπει για κάθε πάροχο να υποστηρίζει την λειτουργία
εμφάνισης λίστας των διαθέσιμων μεγεθών εικονικής μηχανής
\item \textbf{Το εργαλείο πρέπει να υποστηρίζει την χρήση των 6
δημοφιλέστερων διανομών για περιβάλλον διακομιστή}
\item Το εργαλείο πρέπει για κάθε πάροχο να υποστηρίζει την λειτουργία
εμφάνισης λίστας των διαθέσιμων τοποθεσιών
\item \textbf{Το εργαλείο πρέπει να λειτουργεί μέσω της γραμμής εντολών
ώστε να μπορεί να αυτοματοποιηθεί περαιτέρω η εκτέλεση των εντολών του}
\item Το εργαλείο πρέπει για κάθε πάροχο να υποστηρίζει την λειτουργία
εμφάνισης λίστας των διαθέσιμων διανομών
\item \textbf{Το εργαλείο πρέπει για κάθε πάροχο να υποστηρίζει την
λειτουργία εμφάνισης λίστας των διαθέσιμων μεγεθών εικονικής μηχανής}
\item Το εργαλείο πρέπει για κάθε εντολή που επιδέχεται παραμέτρους, να
ρωτάει τον χρήστη για κάθε παράμετρο που δεν δόθηκε
\item \textbf{Το εργαλείο πρέπει για κάθε πάροχο να υποστηρίζει την
λειτουργία εμφάνισης λίστας των διαθέσιμων τοποθεσιών}
\item Το εργαλείο πρέπει να ελέγχει την εγκυρότητα κάθε παραμέτρου που
δίνεται από τον χρήστη
\item \textbf{Το εργαλείο πρέπει για κάθε πάροχο να υποστηρίζει την
λειτουργία εμφάνισης λίστας των διαθέσιμων διανομών}
\item Το εργαλείο πρέπει να υποστηρίζει την λειτουργία δημιουργίας
εικονικής μηχανής
\item \textbf{Το εργαλείο πρέπει για κάθε εντολή που επιδέχεται
παραμέτρους, να ρωτάει τον χρήστη για κάθε παράμετρο που δεν δόθηκε}
\item Το εργαλείο πρέπει να υποστηρίζει την λειτουργία παύσης εικονικής
μηχανής
\item \textbf{Το εργαλείο πρέπει να ελέγχει την εγκυρότητα κάθε παραμέτρου
που δίνεται από τον χρήστη}
\item Το εργαλείο πρέπει να υποστηρίζει την λειτουργία εκκίνησης εικονικής
μηχανής
\item \textbf{Το εργαλείο πρέπει να υποστηρίζει την λειτουργία δημιουργίας
εικονικής μηχανής}
\item Το εργαλείο πρέπει να υποστηρίζει την λειτουργία επανεκκίνησης
εικονικής μηχανής
\item \textbf{Το εργαλείο πρέπει να υποστηρίζει την λειτουργία παύσης
εικονικής μηχανής}
\item Το εργαλείο πρέπει να υποστηρίζει την λειτουργία διαγραφής εικονικής
μηχανής
\item \textbf{Το εργαλείο πρέπει να υποστηρίζει την λειτουργία εκκίνησης
εικονικής μηχανής}
\item Το εργαλείο πρέπει να υποστηρίζει την σύνδεση με SSH ακόμα και χωρίς
να διαθέτει ο χρήστης πελάτη SSH
\item \textbf{Το εργαλείο πρέπει να υποστηρίζει την λειτουργία
επανεκκίνησης εικονικής μηχανής}
\item Το εργαλείο πρέπει να υποστηρίζει την λειτουργία εμφάνισης όλων των
εικονικών μηχανών που διαχειρίζεται
\item \textbf{Το εργαλείο πρέπει να υποστηρίζει την λειτουργία διαγραφής
εικονικής μηχανής}
\item Το εργαλείο πρέπει να εμφανίζει μηνύματα λάθους σε περίπτωση που κάτι
πάει στραβά κατά την εκτέλεση
\item \textbf{Το εργαλείο πρέπει να υποστηρίζει την σύνδεση με SSH ακόμα
και χωρίς να διαθέτει ο χρήστης πελάτη SSH}
\item Το εργαλείο πρέπει να υποστηρίζει την διαδραστική διαμόρφωση του
αρχείου ρυθμίσεών του
\item \textbf{Το εργαλείο πρέπει να υποστηρίζει την λειτουργία εμφάνισης
όλων των εικονικών μηχανών που διαχειρίζεται}
\item Το εργαλείο πρέπει να υποστηρίζει την εκτέλεση εξωτερικού εκτελέσιμου
αρχείου στις εικονικές μηχανές με σκοπό την σκλήρυνσή τους
\item \textbf{Το εργαλείο πρέπει να εμφανίζει μηνύματα λάθους σε περίπτωση
που κάτι πάει στραβά κατά την εκτέλεση}
\item Το εργαλείο πρέπει να εγκαθιστά και να σκληραίνει και το Docker πέρα
από το λειτουργικό σύστημα
\item \textbf{Το εργαλείο πρέπει να υποστηρίζει την διαδραστική διαμόρφωση
του αρχείου ρυθμίσεων του}
\item Το εργαλείο θα ενημερώνει περιοδικά τα πακέτα της εικονικής μηχανής
και θα κλείνει αχρησιμοποίητες θύρες
\item \textbf{Το εργαλείο πρέπει να υποστηρίζει την εκτέλεση εξωτερικού
εκτελέσιμου αρχείου στις εικονικές μηχανές με σκοπό την σκλήρυνσή τους}
\item Το εργαλείο πρέπει να υποστηρίζει την εγκατάσταση δοχείων στις
εικονικές μηχανές που δημιουργεί, κατά την διάρκεια της σκλήρυνσής
τους, μέσω ενός αρχείου docker-compose.yml που θα βρίσκεται στον ίδιο
φάκελο με το εκτελέσιμο αρχείο του
\item \textbf{Το εργαλείο πρέπει να υποστηρίζει την εγκατάσταση δοχείων
στις εικονικές μηχανές που δημιουργεί, κατά την διάρκεια της
σκλήρυνσής τους, μέσω ενός αρχείου docker-compose.yml που θα
βρίσκεται στον ίδιο φάκελο με το εκτελέσιμο αρχείο του}
\item Το εργαλείο πρέπει να μπορεί να εγκαθιστά δοχεία στις εικονικές
μηχανές, κατά την διάρκεια σκλήρυνσής τους, μέσω παραμέτρων που έχει
εισάγει ο χρήστης
\item \textbf{Το εργαλείο πρέπει να διαθέτει λειτουργία εμφάνισης όλων των
διαθέσιμων εντολών του}
\item Το εργαλείο πρέπει να διαθέτει λειτουργία εμφάνισης όλων των
διαθέσιμων εντολών του
\item \textbf{Το εργαλείο πρέπει να διαθέτει λειτουργία εμφάνισης
συμπλήρωσης εντολών και για τα 3 πιο δημοφιλή κελύφη εντολών}
\item Το εργαλείο πρέπει να διαθέτει λειτουργία εμφάνισης συμπλήρωσης
εντολών και για τα 3 πιο δημοφιλή κελύφη εντολών (Bash, Zsh, tcsh)
\item \textbf{Το εργαλείο πρέπει να διαθέτει λειτουργία εμφάνισης της
έκδοσης του}
\item Το εργαλείο πρέπει να διαθέτει λειτουργία εμφάνισης της έκδοσής του
\item \textbf{Το εργαλείο πρέπει να διαθέτει παράμετρο για την προσπέραση
του βήματος επιβεβαίωσης κατά την δημιουργία εικονικών μηχανών}
\item Το εργαλείο πρέπει να διαθέτει παράμετρο για την προσπέραση
(bypassing) του βήματος επιβεβαίωσης κατά την δημιουργία εικονικών
μηχανών
\item \textbf{Το εργαλείο πρέπει να διαθέτει μηχανισμό συγκεκριμενοποίησης
περιοχής για τον πάροχο AWS}
\item Το εργαλείο πρέπει να διαθέτει μηχανισμό συγκεκριμενοποίησης περιοχής
για τον πάροχο AWS
\item \textbf{Το εργαλείο πρέπει να διαθέτει μηχανισμό επιλογής θύρας για
την λειτουργία σύνδεσης μέσω SSH}
\item Το εργαλείο πρέπει να διαθέτει μηχανισμό επιλογής θύρας για την
λειτουργία σύνδεσης μέσω SSH
\item \textbf{Το εργαλείο πρέπει να υποστηρίζει την αρχικοποίηση μονάχα
ενός παρόχου δίχως την συμπλήρωση κενών πεδίων για τους υπόλοιπους
από τον χρήστη}
\item Το εργαλείο πρέπει να υποστηρίζει την αρχικοποίηση μονάχα ενός
παρόχου δίχως την συμπλήρωση κενών πεδίων για τους υπόλοιπους από τον
χρήστη
\end{itemize}
@@ -206,36 +119,39 @@ Python, πάρθηκε επίσης η απόφαση για την υποστή
\begin{itemize}
\item \textbf{Το εργαλείο πρέπει να είναι εύκολο στην χρήση για έναν χρήστη
που έχει χρησιμοποιήσει προγράμματα γραμμής εντολών στο παρελθόν}
\item Το εργαλείο πρέπει να υποστηρίζει την χρήση των 3 μεγαλύτερων
ονομάτων στον κλάδο της νεφο-υπολογιστικής (Amazon, Google, Microsoft)
\item \textbf{Το εργαλείο πρέπει να δημιουργεί ξεχωριστό αρχείο για τις
ρυθμίσεις του στον ίδιο φάκελο που βρίσκεται και το εκτελέσιμο αρχείο
του}
\item Το εργαλείο πρέπει να υποστηρίζει την χρήση των 6 δημοφιλέστερων
διανομών για περιβάλλον διακομιστή (Debian, Ubuntu, Red Hat Enterprise
Linux, Fedora, CentOS, openSUSE Leap)
\item \textbf{Το εργαλείο πρέπει να κρατάει αρχείο των διευθύνσεων IP των
εικονικών μηχανών που δημιουργεί ώστε να μπορούν να διαμορφωθούν
περαιτέρω εάν ο χρήστης επιθυμεί να χρησιμοποιήσει άλλα προγράμματα
όπως το Ansible}
\item Το εργαλείο πρέπει να λειτουργεί μέσω της γραμμής εντολών ώστε να
μπορεί να αυτοματοποιηθεί περαιτέρω η εκτέλεση των εντολών του
\item \textbf{Το εργαλείο πρέπει να διαθέτει ένα μοτίβο εντολών που να
μπορεί ο χρήστης να καταλαβαίνει και να διαμορφώνει ανάλογα με τις
ανάγκες του}
\item Το εργαλείο πρέπει να είναι εύκολο στην χρήση για έναν χρήστη που
έχει χρησιμοποιήσει προγράμματα γραμμής εντολών στο παρελθόν
\item \textbf{Το εργαλείο πρέπει να δημιουργεί κλειδιά SSH σε περίπτωση που
δεν υπάρχουν, στον ίδιο φάκελο με το εκτελέσιμο αρχείο του}
\item Το εργαλείο θα πρέπει να είναι αξιόπιστο, δηλαδή κάθε εκτέλεση να
επιφέρει τα αναμενόμενα αποτελέσματα
\item \textbf{Το δεύτερο εκτελέσιμο αρχείο του εργαλείου πρέπει να
εγκαθιστά και να σκληραίνει και το Docker πέρα από το λειτουργικό
σύστημα}
\item Το εργαλείο πρέπει να δημιουργεί ξεχωριστό αρχείο για τις ρυθμίσεις
του στον ίδιο φάκελο που βρίσκεται και το εκτελέσιμο αρχείο του
\item \textbf{Το δεύτερο εκτελέσιμο αρχείο του εργαλείου πρέπει να
δημιουργεί στην εικονική μηχανή δύο επιπλέον εκτελέσιμα αρχεία για
περιοδική ενημέρωση των πακέτων και κλείσιμο αχρησιμοποίητων θυρών}
\item Το εργαλείο πρέπει να κρατάει αρχείο των διευθύνσεων IP των εικονικών
μηχανών που δημιουργεί ώστε να μπορούν να διαμορφωθούν περαιτέρω εάν ο
χρήστης επιθυμεί να χρησιμοποιήσει άλλα προγράμματα, όπως το Ansible
\item \textbf{Το δεύτερο εκτελέσιμο αρχείο του εργαλείου πρέπει να
εγκαθιστά προγράμματα για την περαιτέρω σκλήρυνση του Docker και την
διευκόλυνση του χρήστη κατά την εγκατάσταση δοχείων}
\item Το εργαλείο πρέπει να διαθέτει ένα μοτίβο εντολών που να μπορεί ο
χρήστης να καταλαβαίνει και να διαμορφώνει ανάλογα με τις ανάγκες του
\item Το εργαλείο πρέπει να δημιουργεί κλειδιά SSH σε περίπτωση που δεν
υπάρχουν, στον ίδιο φάκελο με το εκτελέσιμο αρχείο του
\item Το εργαλείο θα πρέπει να εγκαθιστά τις υπηρεσίες watchtower και
portainer \footfullcite{portainer} για την περαιτέρω σκλήρυνση του
Docker και την διευκόλυνση του χρήστη κατά την εγκατάσταση δοχείων
αντίστοιχα
\end{itemize}
@@ -251,14 +167,15 @@ Python, πάρθηκε επίσης η απόφαση για την υποστή
\ref{fig:useCaseDiagram} δημιουργήθηκε με την βοήθεια του εργαλείου
\textquote{yuml} \footfullcite{yuml}. Επιπλέον, με το εργαλείο
\textquote{mermaid} \footfullcite{mermaid}, δημιουργήθηκε ένα διάγραμμα ροής
για το SecDep που απεικονίζεται στο Σχήμα \ref{fig:flowchartDiagram}. Το
διάγραμμα ροής, απεικονίζει την ροή των εντολών που μπορεί να επιλεγούν από τον
χρήστη κατά την εκτέλεση του προγράμματος.
(flowchart) για το SecDep που απεικονίζεται στο Σχήμα
\ref{fig:flowchartDiagram}. Το διάγραμμα ροής αυτό, απεικονίζει την ροή των
εντολών που μπορεί να επιλεγούν από τον χρήστη κατά την εκτέλεση του
προγράμματος.
\begin{center}
\begin{figure}[!ht]
\centering
\includegraphics[width = 0.9\textwidth]{Figures/Diagrams/secdep-use-case-diagram.jpg}
\includegraphics[width = 0.8\textwidth]{Figures/Diagrams/secdep-use-case-diagram.jpg}
\captionof{figure}{Διάγραμμα περιπτώσεων χρήσης}
\label{fig:useCaseDiagram}
\end{figure}
@@ -275,8 +192,8 @@ Python, πάρθηκε επίσης η απόφαση για την υποστή
\begin{center}
\begin{figure}[!ht]
\centering
\includegraphics[width = 1.0\textwidth]{Figures/Diagrams/secdep-flowchart-diagram.png}
\captionof{figure}{Διάγραμμα ροής}
\includegraphics[width = 1.4\textwidth]{Figures/Diagrams/flowchart/1secdep-flowchart-diagram.png}
\captionof{figure}{Διάγραμμα ροής - Γενικό}
\label{fig:flowchartDiagram}
\end{figure}
\vspace*{-30pt}
@@ -284,20 +201,140 @@ Python, πάρθηκε επίσης η απόφαση για την υποστή
\end{landscape}
\begin{landscape}
\thispagestyle{empty}
\noindent Λόγω της πολυπλοκότητας του Σχήματος \ref{fig:flowchartDiagram}, αυτό
διασπάστηκε σε 6 ξεχωριστά διαγράμματα ροής, για τις εξής λειτουργίες του
SecDep:
\begin{itemize}
\item Εκτέλεση απλών μεθόδων
\begin{center}
\begin{figure}[!ht]
\centering
\includegraphics[width = 1.3\textwidth]{Figures/Diagrams/flowchart/2secdep-flowchart-diagramSimpleFunctions.png}
\captionof{figure}{Διάγραμμα ροής - Απλές λειτουργίες}
\label{fig:flowchartDiagram1}
\end{figure}
\vspace*{-30pt}
\end{center}
\end{itemize}
\end{landscape}
\clearpage
\begin{itemize}
\item Απόκτηση λίστας εικονικών μηχανών
\begin{center}
\begin{figure}[!ht]
\centering
\includegraphics[width = 0.5\textwidth]{Figures/Diagrams/flowchart/3secdep-flowchart-ListVMs.png}
\captionof{figure}{Διάγραμμα ροής - Λίστα εικονικών μηχανών}
\label{fig:flowchartDiagram2}
\end{figure}
\vspace*{-30pt}
\end{center}
\end{itemize}
\clearpage
\begin{itemize}
\item Εκτέλεση ενέργειας σε εικονική μηχανή
\begin{center}
\begin{figure}[!ht]
\centering
\includegraphics[width = 0.55\textwidth]{Figures/Diagrams/flowchart/4secdep-flowchart-ActionOnVM.png}
\captionof{figure}{Διάγραμμα ροής - Ενέργεια σε εικονική μηχανή}
\label{fig:flowchartDiagram3}
\end{figure}
\vspace*{-30pt}
\end{center}
\end{itemize}
\clearpage
\begin{itemize}
\item Σύνδεση SSH σε εικονική μηχανή
\begin{center}
\begin{figure}[!ht]
\centering
\includegraphics[width = 0.6\textwidth]{Figures/Diagrams/flowchart/5secdep-flowchart-SSHToVM.png}
\captionof{figure}{Διάγραμμα ροής - Σύνδεση SSH σε εικονική μηχανή}
\label{fig:flowchartDiagram4}
\end{figure}
\vspace*{-30pt}
\end{center}
\end{itemize}
\clearpage
\begin{itemize}
\item Απόκτηση πληροφοριών πόρων παρόχου
\begin{center}
\begin{figure}[!ht]
\centering
\includegraphics[width = 0.35\textwidth]{Figures/Diagrams/flowchart/6secdep-flowchart-ResourceInfo.png}
\captionof{figure}{Διάγραμμα ροής - Απόκτηση πληροφοριών πόρων παρόχου}
\label{fig:flowchartDiagram5}
\end{figure}
\vspace*{-30pt}
\end{center}
\end{itemize}
\clearpage
\begin{landscape}
\thispagestyle{empty}
\begin{itemize}
\item Δημιουργία εικονικής μηχανής
\begin{center}
\begin{figure}[!ht]
\centering
\includegraphics[width = 0.7\textwidth]{Figures/Diagrams/flowchart/7secdep-flowchart-CreateVM.png}
\captionof{figure}{Διάγραμμα ροής - Δημιουργία εικονικής μηχανής}
\label{fig:flowchartDiagram6}
\end{figure}
\vspace*{-30pt}
\end{center}
\end{itemize}
\end{landscape}
\clearpage
Ουσιαστικά, κατά την πραγματική χρήση του SecDep υπάρχουν πάντοτε δύο οντότητες
που αλληλεπιδρούν μεταξύ τους. Ο χρήστης και ο πάροχος νέφους. Ο χρήστης μπορεί
να ζητήσει πληροφορίες για διαθέσιμους πόρους όπως οι εικονικές του μηχανές ή
τα συστατικά που έχει στην διάθεσή του για την δημιουργία τους όπως οι
να ζητήσει πληροφορίες για διαθέσιμους πόρους, όπως οι εικονικές του μηχανές, ή
τα συστατικά που έχει στην διάθεσή του για την δημιουργία τους, όπως οι
διανομές, τα μεγέθη και οι τοποθεσίες τους. Αυτή η αλληλεπίδραση μεταξύ του
χρήστη και του παρόχου νέφους, απεικονίζεται στο Σχήμα
χρήστη και του παρόχου νέφους, απεικονίζεται καλύτερα στο Σχήμα
\ref{fig:sequenceDiagram}, το οποίο δημιουργήθηκε με το εργαλείο
\textquote{mermaid}.
\textquote{mermaid}. Πρόκειται για ένα διάγραμμα ακολουθίας (sequence diagram),
στο οποίο απεικονίζεται η αλληλεπίδραση του χρήστη με τον πάροχο νέφους μέσω
του SecDep, κατά την δημιουργία μιας εικονικής μηχανής.
\begin{center}
\begin{figure}[!ht]
\centering
\includegraphics[width = .9\textwidth]{Figures/Diagrams/secdep-sequence-diagram.png}
\captionof{figure}{Διάγραμμα αλληλεπίδρασης χρήστη - παρόχου νέφους}
\includegraphics[width = 1\textwidth]{Figures/Diagrams/secdep-sequence-diagram.png}
\captionof{figure}{Διάγραμμα ακολουθίας για την δημιουργία εικονικής μηχανής}
\label{fig:sequenceDiagram}
\end{figure}
\vspace*{-30pt}
@@ -366,8 +403,169 @@ pydeps -T png --cluster --include-missing --max-bacon=1 --noshow --reverse --ran
\vspace*{-30pt}
\end{center}
\noindent Οι παραπάνω βιβλιοθήκες, αποτελούν τους πυλώνες του SecDep. Κάθε μια
από αυτές, εξειδικεύεται σε διαφορετικούς τομείς και χρησιμοποιείται για την
κάλυψη διαφόρων λειτουργιών του SecDep. Με την σειρά που απεικονίζονται, έχουν
τις εξής αρμοδιότητες:
\begin{itemize}
\item \textbf{azure}:
Η βιβλιοθήκη της azure, χρησιμοποιείται για την επικοινωνία και
αυθεντικοποίηση με τον πάροχο νέφους Azure. Ο λόγος που χρειάζεται να
χρησιμοποιηθεί συνδυαστικά με την libcloud, είναι για επιτύχουμε την
ομοιόμορφη συμπεριφορά του εργαλείου κατά μήκος όλων των παρόχων που
αυτό υποστηρίζει. Συγκεκριμένα, την χρειαζόμαστε για την επίτευξη των
λειτουργιών δημιουργίας Resource Group και Virtual Network, καθώς αυτές
λειτουργίες δεν υποστηρίζονται από την libcloud την παρούσα στιγμή.
\item \textbf{dotenv}:
Η βιβλιοθήκη dotenv \footfullcite{dotenv} χρησιμοποιείται για την
ανάγνωση αρχείων \textquote{.env}. Το SecDep κάνει χρήση ενός αρχείου
\textquote{.env}, στο οποίο δηλώνονται οι τιμές που χρειάζεται για την
αυθεντικοποίηση με τους παρόχους νέφους.
\item \textbf{libcloud}:
Η βιβλιοθήκη libcloud είναι υπεύθυνη για την αυθεντικοποίηση με τους
παρόχους νέφους, με σκοπό την εκτέλεση διαφόρων λειτουργιών σχετικά με
τις εικονικές μηχανές του καθενός. Μας επιτρέπει να δημιουργούμε και να
διαχειριζόμαστε εικονικές μηχανές, καθώς και να λαμβάνουμε πληροφορίες
για πόρους του κάθε παρόχου νέφους.
\item \textbf{rich}:
Η βιβλιοθήκη rich \footfullcite{rich} εμπλουτίζει την εμφάνιση του
SecDep. Βοηθάει στην καλύτερη διαμόρφωση της εμφάνισης των
αποτελεσμάτων των εντολών του, με σκοπό την θετική αύξηση της εμπειρίας
χρήσης του εργαλείου.
\item \textbf{shtab}:
Η βιβλιοθήκη shtab \footfullcite{shtab} χρησιμοποιείται για την
δημιουργία συμπληρώσεων κελύφους. Αυτό αποτελεί βασικό χαρακτηριστικό
για την ευχρηστία του εργαλείου, καθώς διευκολύνει τον χρήστη στην
εύρεση των διαθέσιμων παραμέτρων και στην ταχύτερη σύνταξη εντολών.
\item \textbf{paramiko}:
Η βιβλιοθήκη paramiko \footfullcite{paramiko} αποτελεί εξάρτηση της
libcloud για την επικοινωνία με τις εικονικές μηχανές, κάνοντας χρήση
του πρωτοκόλλου SSH. Το SecDep, χρησιμοποιεί την βιβλιοθήκη αυτή για
την διαδραστική σύνδεση σε εικονικές μηχανές μέσω SSH σε περίπτωση
απουσίας πελάτη που να προσφέρει αυτή τη δυνατότητα. Επιπλέον,
χρησιμοποιείται για την δημιουργία κλειδιών SSH.
\end{itemize}
\clearpage
\section{Αποφάσεις που πάρθηκαν κατά την ανάπτυξη} \label{developmentDecisions}
Κατά την ανάπτυξη του συστήματος, προκειμένου να επιτευχθούν οι στόχοι που
θέσαμε στην Ενότητα \ref{overcomingDockerDisadvantages} και συγκεκριμένα για
την επικοινωνία και διασύνδεση με διάφορους παρόχους νέφους, επιλέχθηκε να
γίνει χρήση της βιβλιοθήκης libcloud \footfullcite{libcloud}. Μια από τις δύο
επιλογές βιβλιοθηκών της Apache \footfullcite{apache} για την επικοινωνία με
παρόχους νέφους στα πλαίσια της υλοποίησης multi-cloud εφαρμογών, πλατφορμών
και εργαλείων. Συγκριτικά με την βιβλιοθήκη jclouds \footfullcite{jclouds}, η
οποία σχεδιάστηκε για την γλώσσα Java \footfullcite{java}, η libcloud είναι πιο
απλή στην χρήση, αφού είναι σχεδιασμένη για την γλώσσα Python
\footfullcite{python}. Επιπροσθέτως, η libcloud είναι πιο διαδεδομένη, ενώ η
γλώσσα python αποτελεί μια πιο ευέλικτη επιλογή για τις ανάγκες της ανάπτυξης
του εργαλείου μας. Αυτό συμβαίνει διότι σε σχέση με την Java, η python είναι
απλούστερη στην σύνταξή της, προεγκατεστημένη σε πολλά λειτουργικά συστήματα
και διαθέτει πολλές επιβοηθητικές βιβλιοθήκες, επίσημες ή από τρίτους, οι
οποίες δύναται να εμπλουτίσουν τα προγράμματα σε python, με παραπάνω
λειτουργίες.
Η ανάγκη για μια βιβλιοθήκη που θα λειτουργεί ως μεσάζοντας μεταξύ του
εργαλείου και των παρόχων νέφους, οφείλεται στο γεγονός ότι οι πάροχοι νέφους
δεν διαθέτουν ένα κοινό API για την διαχείριση των υποδομών τους. Απεναντίας, ο
καθένας από αυτούς διαθέτει το δικό του API, το οποίο χρησιμοποιείται έμμεσα
μέσω του πίνακα ελέγχου του, που βρίσκεται στην ιστοσελίδα του, ενός δικού του
εργαλείου γραμμής εντολών, ή άμεσα μέσω της βιβλιοθήκης που παρέχει ο ίδιος. Η
libcloud αποτελεί μια προσπάθεια δημιουργίας ενός ενιαίου API, το οποίο
χρησιμοποιώντας τις ίδιες μεθόδους, επιχειρεί να προσκομίσει πανομοιότυπα
αποτελέσματα (πχ. δημιουργία εικονικής μηχανής με συγκεκριμένα χαρακτηριστικά)
ανεξαρτήτως του παρόχου νέφους που στοχεύει.
Παρ' όλη την προσπάθεια που καταβλήθηκε από την libcloud όμως, για την
ενοποίηση αυτή, οι διαφορές στους τρόπους λειτουργίας του κάθε παρόχου αρχίζουν
να εμφανίζονται σύντομα κατά την ανάπτυξη. Για το εργαλείο SecDep που προτείνει
η παρούσα διπλωματική εργασία, χρειάζεται να γίνει χρήση των λειτουργιών
\textquote{Compute} της βιβλιοθήκης libcloud. Στην αρχική σελίδα της
βιβλιοθήκης, αναφέρεται υποστήριξη για πάνω από 50 παρόχους. Κατά την σελίδα
τεκμηρίωσης \cite{libcloudProviders} για τις λειτουργίες \textquote{Compute},
αναφέρονται 48 πάροχοι σε έναν πίνακα, ο οποίος αναγράφει την υποστήριξη ή
απουσία αυτής, για διάφορες λειτουργίες/μεθόδους (διαχείρισης) εικονικών
μηχανών. Στις λειτουργίες αυτές περιλαμβάνονται η δημιουργία εικονικών μηχανών,
η εκκίνηση, η παύση, η διαγραφή τους και εν γένει όσες λειτουργίες είναι
απαραίτητες για την ολοκληρωμένη λειτουργία του προτεινούμενού μας εργαλείου.
Από αυτούς τους 48 παρόχους, οι 25 υποστηρίζουν και τις 9 λειτουργίες
διαχείρισης. Ωστόσο, από αυτούς τους 25 έπρεπε να αφαιρεθούν οι 20 για λόγους,
όπως η μη ύπαρξη τεκμηρίωσης χρήσης από την libcloud, η μη συνέχιση της
λειτουργίας τους, η έλλειψη πληροφοριών τιμής ή δοκιμαστικής περιόδου για τις
υπηρεσίες τους και η αδυναμία δημιουργίας λογαριασμού στην επίσημη σελίδα τους.
Επομένως, υπάρχουν εν τέλει 5 πάροχοι νέφους που δύναται να χρησιμοποιηθούν,
υποστηρίζοντας όλες τις πιθανές λειτουργίες διαχείρισης εικονικών μηχανών.
Τέλος, από αυτούς τους 5, επιλέχθηκαν για επίσημη υποστήριξη από το εργαλείο
που προτείνεται στην παρούσα διπλωματική εργασία, τα τρία μεγαλύτερα ονόματα
του χώρου, οι Amazon, Google και Microsoft. Οι άλλοι δύο είτε δεν παρείχαν
δοκιμαστική περίοδο των υπηρεσιών τους, είτε δεν υπήρχε εμπιστοσύνη ως προς την
ποιότητα των υπηρεσιών αυτών.
Παρακάτω θα διαπιστώσουμε πως ακόμα και με την χρήση της βιβλιοθήκης libcloud
και την επίσημη υποστήριξη όλων των λειτουργιών για κάθε πάροχο, υπήρχε η
ανάγκη χρήσης της επίσημης βιβλιοθήκης της Azure (Microsoft Azure SDK) για την
δημιουργία Resource Group \footfullcite{azure-mgmt-resource} και Virtual
Network \footfullcite{azure-mgmt-network} διότι αυτές οι λειτουργίες δεν
υποστηρίζονται μέσω της libcloud. Επιπροσθέτως, δίχως την υποστήριξη των
λειτουργιών αυτών, ο χρήστης θα ήταν υποχρεωμένος να δημιουργεί αυτούς τους
πόρους χειροκίνητα ή να είναι περιορισμένος μονάχα σε μια γεωγραφική τοποθεσία.
Οι δύο τελευταίες επιλογές πάνε ενάντια σε έναν από τους βασικότερους στόχους
του εργαλείου. Την ομοιόμορφη λειτουργία για κάθε πάροχο νέφους που
υποστηρίζεται.
Πέρα από την απόφαση για την χρήση της libcloud και την γλώσσα προγραμματισμού
Python, πάρθηκε επίσης η απόφαση για την υποστήριξη των 6 δημοφιλέστερων
επιλογών για λειτουργικά συστήματα Linux σε περιβάλλοντα διακομιστών. Οι
διανομές αυτές υποστηρίζονται και για τους 3 παρόχους νέφους και κάθε μια από
αυτές περιλαμβάνει διαφορετικές εκδόσεις της κάθε διανομής. Αυτές είναι οι εξής
για κάθε πάροχο:
\begin{savenotes}
\selectfont
\begin{table}[!ht]
\caption{Υποστηριζόμενες εκδόσεις διανομών για κάθε πάροχο}
\renewcommand{\arraystretch}{1.5}
\centering
\textgreek{\begin{tabular}{lc|c|c|c|}
\cline{3-5}
& & \multicolumn{3}{c|}{Πάροχοι} \\ \cline{3-5}
& & AWS & Azure & GCE \\ \hline
\multicolumn{1}{|c|}{\multirow{6}{*}{\rotatebox{90}{Διανομές}}} & Ubuntu \footfullcite{ubuntu} & 22.04, 22.10 & 22.04, 22.10 & Όλες \\ \cline{2-5}
\multicolumn{1}{|c|}{} & Debian \footfullcite{debian} & 10, 11 & 10, 11 & Όλες \\ \cline{2-5}
\multicolumn{1}{|c|}{} & CentOS \footfullcite{centos} & 7, 8, 9 & 8.4, 8.5 & Όλες \\ \cline{2-5}
\multicolumn{1}{|c|}{} & Fedora \footfullcite{fedora} & 37 & 36, 37 & Όλες \\ \cline{2-5}
\multicolumn{1}{|c|}{} & Red Hat Enterprise Linux \footfullcite{redhat} & 7.9, 8.6, 9 & 8.6, 9.1 & Όλες \\ \cline{2-5}
\multicolumn{1}{|c|}{} & openSUSE Leap \footfullcite{opensuse} & 15.3, 15.4 & 15.3, 15.4 & Όλες \\ \hline
\end{tabular}}
\label{table:supportedDistributions}
\renewcommand{\arraystretch}{1}
\end{table}
\end{savenotes}
Ο λόγος που οι εκδόσεις είναι συγκεκριμένες για τους παρόχους AWS και Azure,
είναι διότι ο αριθμός των διαθέσιμων διανομών και εκδόσεών τους είναι
υπερβολικά μεγάλος. Αυτό θα είχε ως αποτέλεσμα, κατά την εκτέλεση της
λειτουργίας δημιουργίας λίστας τους ή κατά τον έλεγχο της ορθότητας των
παραμέτρων που εισάγει ο χρήστης, η αντίστοιχη αιτούμενη εκτέλεση του εργαλείου
από τον χρήση, να καθυστερούσε σε τεράστιο βαθμό να ολοκληρωθεί. Επομένως, θα
υπήρχε αρνητική επίδραση στην εμπειρία του χρήστη.
\section{Αρχιτεκτονική Εργαλείου} \label{architecture}
Οι διαθέσιμες συναρτήσεις και μεταβλητές του secdep.py, απεικονίζονται στα