860 lines
51 KiB
TeX
860 lines
51 KiB
TeX
\chapter{Ανάπτυξη Συστήματος} \label{projectDevelopment}
|
||
|
||
\noindent Στην παρούσα ενότητα θα αναλυθούν οι τεχνολογίες που χρησιμοποιήθηκαν
|
||
για την υλοποίηση του συστήματος, οι αποφάσεις που πάρθηκαν κατά την ανάπτυξή
|
||
του και οι σχεδιαστικές επιλογές που πραγματοποιήθηκαν. Επίσης, θα αναλυθεί η
|
||
αρχιτεκτονική του συστήματος και θα επεξηγηθούν οι λειτουργίες των συστατικών
|
||
του.
|
||
|
||
\section{Μοντέλο ανάπτυξης}
|
||
|
||
Για την ανάπτυξη του SecDep, ακολουθήθηκε το μοντέλο καταρράκτη. Στο μοντέλο
|
||
αυτό, κάθε στάδιο της δραστηριότητας ανάπτυξης εκτελείται σειριακά. Δηλαδή, για
|
||
την μετάβαση σε κάθε επόμενο στάδιο, απαιτείται η επιτυχής ολοκλήρωση του
|
||
προηγούμενου. Έτσι και εδώ, ξεκινάμε με την ανάλυση απαιτήσεων, έπειτα
|
||
προχωράμε στη σχεδίαση του συστήματος και τέλος φτάνουμε στην υλοποίησή του. Η
|
||
επίδειξη της τελικής μορφής του εργαλείου καλύπτεται στο Κεφάλαιο
|
||
\ref{installationANDShowcase}, ενώ η αποτίμηση των αποτελεσμάτων εκτέλεσής του,
|
||
στο Κεφάλαιο \ref{experimentationANDresults}.
|
||
|
||
\section{Απαιτήσεις από το εργαλείο} \label{toolRequirements}
|
||
|
||
Κατά την ανάπτυξη του εργαλείου, έγινε μια προσπάθεια να καλυφθούν ορισμένες
|
||
βασικές απαιτήσεις που θα έπρεπε αυτό να ικανοποιεί. Όπως όλα τα εργαλεία, έτσι
|
||
και αυτό έχει έναν σκοπό να εκπληρώσει. Ο σκοπός αυτός είναι η διευκόλυνση του
|
||
χρήστη ή ενός οργανισμού, στην εγκατάσταση και διαμόρφωση με αυτοματοποιημένο
|
||
τρόπο ενός ασφαλούς, κατανεμημένου περιβάλλοντος για την εγκατάσταση και
|
||
λειτουργία μιας εφαρμογής μικρο-υπηρεσιών. Για να γίνει αυτό πραγματικότητα,
|
||
πρέπει το εργαλείο να ικανοποιεί τις παρακάτω απαιτήσεις.
|
||
|
||
\subsection{Λειτουργικές απαιτήσεις}
|
||
|
||
\begin{itemize}
|
||
|
||
\item Το εργαλείο πρέπει για κάθε πάροχο να υποστηρίζει την λειτουργία
|
||
εμφάνισης λίστας των διαθέσιμων μεγεθών εικονικής μηχανής
|
||
|
||
\item Το εργαλείο πρέπει για κάθε πάροχο να υποστηρίζει την λειτουργία
|
||
εμφάνισης λίστας των διαθέσιμων τοποθεσιών
|
||
|
||
\item Το εργαλείο πρέπει για κάθε πάροχο να υποστηρίζει την λειτουργία
|
||
εμφάνισης λίστας των διαθέσιμων διανομών
|
||
|
||
\item Το εργαλείο πρέπει για κάθε εντολή που επιδέχεται παραμέτρους, να
|
||
ρωτάει τον χρήστη για κάθε παράμετρο που δεν δόθηκε
|
||
|
||
\item Το εργαλείο πρέπει να ελέγχει την εγκυρότητα κάθε παραμέτρου που
|
||
δίνεται από τον χρήστη
|
||
|
||
\item Το εργαλείο πρέπει να υποστηρίζει την λειτουργία δημιουργίας
|
||
εικονικής μηχανής
|
||
|
||
\item Το εργαλείο πρέπει να υποστηρίζει την λειτουργία παύσης εικονικής
|
||
μηχανής
|
||
|
||
\item Το εργαλείο πρέπει να υποστηρίζει την λειτουργία εκκίνησης εικονικής
|
||
μηχανής
|
||
|
||
\item Το εργαλείο πρέπει να υποστηρίζει την λειτουργία επανεκκίνησης
|
||
εικονικής μηχανής
|
||
|
||
\item Το εργαλείο πρέπει να υποστηρίζει την λειτουργία διαγραφής εικονικής
|
||
μηχανής
|
||
|
||
\item Το εργαλείο πρέπει να υποστηρίζει την σύνδεση με SSH ακόμα και χωρίς
|
||
να διαθέτει ο χρήστης πελάτη SSH
|
||
|
||
\item Το εργαλείο πρέπει να υποστηρίζει την λειτουργία εμφάνισης όλων των
|
||
εικονικών μηχανών που διαχειρίζεται
|
||
|
||
\item Το εργαλείο πρέπει να εμφανίζει μηνύματα λάθους σε περίπτωση που κάτι
|
||
πάει στραβά κατά την εκτέλεση
|
||
|
||
\item Το εργαλείο πρέπει να υποστηρίζει την διαδραστική διαμόρφωση του
|
||
αρχείου ρυθμίσεών του
|
||
|
||
\item Το εργαλείο πρέπει να υποστηρίζει την εκτέλεση εξωτερικού εκτελέσιμου
|
||
αρχείου στις εικονικές μηχανές με σκοπό την σκλήρυνσή τους
|
||
|
||
\item Το εργαλείο πρέπει να εγκαθιστά και να σκληραίνει και το Docker πέρα
|
||
από το λειτουργικό σύστημα
|
||
|
||
\item Το εργαλείο θα ενημερώνει περιοδικά τα πακέτα της εικονικής μηχανής
|
||
και θα κλείνει αχρησιμοποίητες θύρες
|
||
|
||
\item Το εργαλείο πρέπει να υποστηρίζει την εγκατάσταση δοχείων στις
|
||
εικονικές μηχανές που δημιουργεί, κατά την διάρκεια της σκλήρυνσής
|
||
τους, μέσω ενός αρχείου docker-compose.yml που θα βρίσκεται στον ίδιο
|
||
φάκελο με το εκτελέσιμο αρχείο του
|
||
|
||
\item Το εργαλείο πρέπει να μπορεί να εγκαθιστά δοχεία στις εικονικές
|
||
μηχανές, κατά την διάρκεια σκλήρυνσής τους, μέσω παραμέτρων που έχει
|
||
εισάγει ο χρήστης
|
||
|
||
\item Το εργαλείο πρέπει να διαθέτει λειτουργία εμφάνισης όλων των
|
||
διαθέσιμων εντολών του
|
||
|
||
\item Το εργαλείο πρέπει να διαθέτει λειτουργία εμφάνισης συμπλήρωσης
|
||
εντολών και για τα 3 πιο δημοφιλή κελύφη εντολών (Bash, Zsh, tcsh)
|
||
|
||
\item Το εργαλείο πρέπει να διαθέτει λειτουργία εμφάνισης της έκδοσής του
|
||
|
||
\item Το εργαλείο πρέπει να διαθέτει παράμετρο για την προσπέραση
|
||
(bypassing) του βήματος επιβεβαίωσης κατά την δημιουργία εικονικών
|
||
μηχανών
|
||
|
||
\item Το εργαλείο πρέπει να διαθέτει μηχανισμό συγκεκριμενοποίησης περιοχής
|
||
για τον πάροχο AWS
|
||
|
||
\item Το εργαλείο πρέπει να διαθέτει μηχανισμό επιλογής θύρας για την
|
||
λειτουργία σύνδεσης μέσω SSH
|
||
|
||
\item Το εργαλείο πρέπει να υποστηρίζει την αρχικοποίηση μονάχα ενός
|
||
παρόχου δίχως την συμπλήρωση κενών πεδίων για τους υπόλοιπους από τον
|
||
χρήστη
|
||
|
||
\end{itemize}
|
||
|
||
\subsection{Μη λειτουργικές απαιτήσεις}
|
||
|
||
\begin{itemize}
|
||
|
||
\item Το εργαλείο πρέπει να υποστηρίζει την χρήση των 3 μεγαλύτερων
|
||
ονομάτων στον κλάδο της νεφο-υπολογιστικής (Amazon, Google, Microsoft)
|
||
|
||
\item Το εργαλείο πρέπει να υποστηρίζει την χρήση των 6 δημοφιλέστερων
|
||
διανομών για περιβάλλον διακομιστή (Debian, Ubuntu, Red Hat Enterprise
|
||
Linux, Fedora, CentOS, openSUSE Leap)
|
||
|
||
\item Το εργαλείο πρέπει να λειτουργεί μέσω της γραμμής εντολών ώστε να
|
||
μπορεί να αυτοματοποιηθεί περαιτέρω η εκτέλεση των εντολών του
|
||
|
||
\item Το εργαλείο πρέπει να είναι εύκολο στην χρήση για έναν χρήστη που
|
||
έχει χρησιμοποιήσει προγράμματα γραμμής εντολών στο παρελθόν
|
||
|
||
\item Το εργαλείο θα πρέπει να είναι αξιόπιστο, δηλαδή κάθε εκτέλεση να
|
||
επιφέρει τα αναμενόμενα αποτελέσματα
|
||
|
||
\item Το εργαλείο πρέπει να δημιουργεί ξεχωριστό αρχείο για τις ρυθμίσεις
|
||
του στον ίδιο φάκελο που βρίσκεται και το εκτελέσιμο αρχείο του
|
||
|
||
\item Το εργαλείο πρέπει να κρατάει αρχείο των διευθύνσεων IP των εικονικών
|
||
μηχανών που δημιουργεί ώστε να μπορούν να διαμορφωθούν περαιτέρω εάν ο
|
||
χρήστης επιθυμεί να χρησιμοποιήσει άλλα προγράμματα, όπως το Ansible
|
||
|
||
\item Το εργαλείο πρέπει να διαθέτει ένα μοτίβο εντολών που να μπορεί ο
|
||
χρήστης να καταλαβαίνει και να διαμορφώνει ανάλογα με τις ανάγκες του
|
||
|
||
\item Το εργαλείο πρέπει να δημιουργεί κλειδιά SSH σε περίπτωση που δεν
|
||
υπάρχουν, στον ίδιο φάκελο με το εκτελέσιμο αρχείο του
|
||
|
||
\item Το εργαλείο θα πρέπει να εγκαθιστά τις υπηρεσίες watchtower και
|
||
portainer \footfullcite{portainer} για την περαιτέρω σκλήρυνση του
|
||
Docker και την διευκόλυνση του χρήστη κατά την εγκατάσταση δοχείων
|
||
αντίστοιχα
|
||
|
||
\end{itemize}
|
||
|
||
\clearpage
|
||
|
||
\begin{landscape}
|
||
\thispagestyle{empty}
|
||
|
||
\section{Διαγραμματική Μοντελοποίηση} \label{designModels}
|
||
|
||
Οι παραπάνω απαιτήσεις και ο τρόπος λειτουργίας του εργαλείου, μεταφράζονται
|
||
καλύτερα στον χρήστη μέσω ενός σχεδιαγράμματος περίπτωσης χρήσης. Το Σχήμα
|
||
\ref{fig:useCaseDiagram} δημιουργήθηκε με την βοήθεια του εργαλείου
|
||
\textquote{yuml} \footfullcite{yuml}. Επιπλέον, με το εργαλείο
|
||
\textquote{mermaid} \footfullcite{mermaid}, δημιουργήθηκε ένα διάγραμμα ροής
|
||
(flowchart) για το SecDep που απεικονίζεται στο Σχήμα
|
||
\ref{fig:flowchartDiagram}. Το διάγραμμα ροής αυτό, απεικονίζει την ροή των
|
||
εντολών που μπορεί να επιλεγούν από τον χρήστη κατά την εκτέλεση του
|
||
προγράμματος.
|
||
|
||
\begin{center}
|
||
\begin{figure}[!ht]
|
||
\centering
|
||
\includegraphics[width = .8\textwidth]{Figures/Diagrams/secdep-use-case-diagram.jpg}
|
||
\captionof{figure}{Διάγραμμα περιπτώσεων χρήσης}
|
||
\label{fig:useCaseDiagram}
|
||
\end{figure}
|
||
\vspace*{-30pt}
|
||
\end{center}
|
||
|
||
\end{landscape}
|
||
|
||
\clearpage
|
||
|
||
\begin{landscape}
|
||
\thispagestyle{empty}
|
||
|
||
\begin{center}
|
||
\begin{figure}[!ht]
|
||
\centering
|
||
\includegraphics[width = 1.4\textwidth]{Figures/Diagrams/flowchart/1secdep-flowchart-diagram.png}
|
||
\captionof{figure}{Διάγραμμα ροής - Γενικό}
|
||
\label{fig:flowchartDiagram}
|
||
\end{figure}
|
||
\vspace*{-30pt}
|
||
\end{center}
|
||
|
||
\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 = .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 = .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 = .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 = .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 = .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}. Πρόκειται για ένα διάγραμμα ακολουθίας (sequence diagram),
|
||
στο οποίο απεικονίζεται η αλληλεπίδραση του χρήστη με τον πάροχο νέφους μέσω
|
||
του SecDep, κατά την δημιουργία μιας εικονικής μηχανής.
|
||
|
||
\begin{center}
|
||
\begin{figure}[!ht]
|
||
\centering
|
||
\includegraphics[width = \textwidth]{Figures/Diagrams/secdep-sequence-diagram.png}
|
||
\captionof{figure}{Διάγραμμα ακολουθίας για την δημιουργία εικονικής μηχανής}
|
||
\label{fig:sequenceDiagram}
|
||
\end{figure}
|
||
\vspace*{-30pt}
|
||
\end{center}
|
||
|
||
\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, απεικονίζονται στα
|
||
Σχήματα \ref{fig:secdepFunctions}, \ref{fig:secdepVariables1} και
|
||
\ref{fig:secdepVariables2} αντίστοιχα. Η δημιουργία τους πραγματοποιήθηκε με το
|
||
εργαλείο \textquote{doxygen} \footfullcite{doxygen}.
|
||
|
||
\begin{center}
|
||
\begin{figure}[!ht]
|
||
\centering
|
||
\includegraphics[width = \textwidth]{Figures/doxygen/secdepFunctions.png}
|
||
\captionof{figure}{Συναρτήσεις του secdep.py}
|
||
\label{fig:secdepFunctions}
|
||
\end{figure}
|
||
\vspace*{-30pt}
|
||
\end{center}
|
||
|
||
\begin{center}
|
||
\begin{figure}[ht]
|
||
\centering
|
||
\includegraphics[width = \textwidth]{Figures/doxygen/secdepVariables1.png}
|
||
\captionof{figure}{Μεταβλητές του secdep.py}
|
||
\label{fig:secdepVariables1}
|
||
\end{figure}
|
||
\vspace*{-30pt}
|
||
\end{center}
|
||
|
||
\begin{center}
|
||
\begin{figure}[ht]
|
||
\centering
|
||
\includegraphics[width = \textwidth]{Figures/doxygen/secdepVariables2.png}
|
||
\captionof{figure}{Μεταβλητές του secdep.py (συνέχεια)}
|
||
\label{fig:secdepVariables2}
|
||
\end{figure}
|
||
\vspace*{-30pt}
|
||
\end{center}
|
||
|
||
\clearpage
|
||
|
||
\noindent Προκειμένου να κατανοήσουμε καλύτερα πως αλληλεπιδρούν ορισμένες από
|
||
τις συναρτήσεις μεταξύ τους, δημιουργήθηκαν δύο διαγράμματα συστατικών
|
||
(component diagrams) για τις εξής λειτουργίες:
|
||
|
||
\begin{itemize}
|
||
|
||
\item Απόκτηση λίστας εικονικών μηχανών συγκεκριμένης περιοχής του παρόχου νέφους Amazon (Σχήμα \ref{fig:secdepComponentDiagram1})
|
||
\item Απόκτηση πληροφοριών ΑΜΙ (Amazon Machine Image) (Σχήμα \ref{fig:secdepComponentDiagram2})
|
||
|
||
\end{itemize}
|
||
|
||
\noindent Τα διαγράμματα αυτά δημιουργήθηκαν με την χρήση της βιβλιοθήκης
|
||
\textquote{pydoctrace} \footfullcite{pydoctrace} και του εργαλείου ανοιχτού
|
||
κώδικα \textquote{plantuml} \footfullcite{plantuml}. Με την εκτέλεση της
|
||
Εντολής \ref{lst:pydoctraceInstall}, εγκαθίσταται η βιβλιοθήκη στο σύστημα.
|
||
Μετά την περαίωσή της και την εγκατάσταση του πακέτου plantuml, προκειμένου να
|
||
αποκτήσουμε τα διαγράμματα συστατικών χρειάστηκε να πραγματοποιηθούν ορισμένες
|
||
προσθέσεις στον κώδικα του εργαλείου.
|
||
|
||
\begin{listing}[!ht]
|
||
\begin{bashcode}
|
||
pip install pydoctrace --break-system-packages
|
||
\end{bashcode}
|
||
\caption{Εγκατάσταση της βιβλιοθήκης pydoctrace}
|
||
\label{lst:pydoctraceInstall}
|
||
\vspace*{-10pt}
|
||
\end{listing}
|
||
|
||
\noindent Οι προσθέσεις αυτές αφορούν την προσθήκη των εξής γραμμών κώδικα του
|
||
secdep.py στο σημείο που ορίζονται οι βιβλιοθήκες:
|
||
|
||
\begin{listing}[!ht]
|
||
\begin{bashcode}
|
||
from pydoctrace.doctrace import trace_to_component_puml
|
||
from pydoctrace.callfilter.presets import (
|
||
EXCLUDE_BUILTINS_PRESET,
|
||
EXCLUDE_CALL_DEPTH_PRESET_FACTORY,
|
||
EXCLUDE_DEPTH_BELOW_5_PRESET,
|
||
EXCLUDE_STDLIB_PRESET,
|
||
EXCLUDE_TESTS_PRESET,
|
||
TRACE_ALL_PRESET,
|
||
)
|
||
\end{bashcode}
|
||
\vspace*{-10pt}
|
||
\end{listing}
|
||
|
||
\noindent Έπειτα, προσθέτουμε και τις παρακάτω γραμμές κώδικα, ακριβώς πριν την
|
||
δήλωση των συναρτήσεων που θέλουμε να καλέσουμε:
|
||
|
||
\clearpage
|
||
|
||
\begin{listing}[!ht]
|
||
\begin{bashcode}
|
||
ABOVE_1_PRESET = EXCLUDE_CALL_DEPTH_PRESET_FACTORY(1)
|
||
@trace_to_component_puml(filter_presets=[EXCLUDE_BUILTINS_PRESET, ABOVE_1_PRESET, EXCLUDE_DEPTH_BELOW_5_PRESET, EXCLUDE_STDLIB_PRESET, EXCLUDE_TESTS_PRESET, TRACE_ALL_PRESET])
|
||
\end{bashcode}
|
||
\vspace*{-10pt}
|
||
\end{listing}
|
||
|
||
\noindent Mε την εκτέλεση των Εντολών \ref{lst:getAwsImage} και
|
||
\ref{lst:listAllRegionalAwsNodes}, παράγονται δύο αρχεία με κατάληξη
|
||
\textquote{.puml}, τα οποία περιέχουν οδηγίες για την απεικόνιση των
|
||
διαγραμμάτων συστατικών στα Σχήματα \ref{fig:secdepComponentDiagram1} και
|
||
\ref{fig:secdepComponentDiagram2} αντίστοιχα.
|
||
|
||
\begin{listing}[!ht]
|
||
\begin{bashcode}
|
||
python3 secdep.py --provider aws --listimages --print
|
||
\end{bashcode}
|
||
\caption{Απόκτηση πληροφοριών ΑΜΙ (Amazon Machine Image)}
|
||
\label{lst:getAwsImage}
|
||
\vspace*{-10pt}
|
||
\end{listing}
|
||
|
||
\begin{listing}[!ht]
|
||
\begin{bashcode}
|
||
python3 secdep.py --provider aws --list --awsregion eu-north-1
|
||
\end{bashcode}
|
||
\caption{Απόκτηση λίστας εικονικών μηχανών συγκεκριμένης περιοχής του παρόχου νέφους Amazon}
|
||
\label{lst:listAllRegionalAwsNodes}
|
||
\vspace*{-10pt}
|
||
\end{listing}
|
||
|
||
\noindent Τέλος, η μετατροπή των αρχείων κειμένου σε σχήματα πραγματοποιείται
|
||
με την εκτέλεση της εντολής \ref{lst:plantumlCommand}.
|
||
|
||
\begin{listing}[!ht]
|
||
\begin{bashcode}
|
||
plantuml -progress -DPLANTUML_LIMIT_SIZE=8192 <όνομα αρχείου>.puml
|
||
\end{bashcode}
|
||
\caption{Μετατροπή αρχείων \textquote{.puml} σε αρχεία \textquote{.png} χρησιμοποιώντας το plantuml}
|
||
\label{lst:plantumlCommand}
|
||
\vspace*{-10pt}
|
||
\end{listing}
|
||
|
||
\begin{center}
|
||
\begin{figure}[!ht]
|
||
\centering
|
||
\includegraphics[width = .9\textwidth]{Figures/Diagrams/component/GetAwsImage.png}
|
||
\captionof{figure}{Διάγραμμα συστατικών για την Εντολή \ref{lst:getAwsImage}}
|
||
\label{fig:secdepComponentDiagram1}
|
||
\end{figure}
|
||
\vspace*{-30pt}
|
||
\end{center}
|
||
|
||
\begin{center}
|
||
\begin{figure}[!ht]
|
||
\centering
|
||
\includegraphics[width = .9\textwidth]{Figures/Diagrams/component/ListAllRegionalAwsNodes.png}
|
||
\captionof{figure}{Διάγραμμα συστατικών για την Εντολή \ref{lst:listAllRegionalAwsNodes}}
|
||
\label{fig:secdepComponentDiagram2}
|
||
\end{figure}
|
||
\vspace*{-30pt}
|
||
\end{center}
|
||
|
||
Τα παραπάνω διαγράμματα αποτελούν απλουστευμένες εκδοχές των πραγματικών. Αυτό
|
||
συμβαίνει, διότι έχουμε ρυθμίσει το pydoctrace να παραλείπει τις εμφανίσεις
|
||
ορισμένων εσωτερικών κλήσεων συναρτήσεων, καθώς και αυτών που βρίσκονται σε
|
||
επίπεδο callstack μεγαλύτερο από ένα. Στην αντίθετη περίπτωση, τα διαγράμματα
|
||
θα ήταν αρκετά δυσνόητα και δυσανάγνωστα.
|
||
|
||
Παρατηρώντας το Σχήμα \ref{fig:secdepComponentDiagram1}, αποκτάμε μεγαλύτερη
|
||
κατανόηση σχετικά με την εξάρτηση των συναρτήσεων μεταξύ τους. Προκειμένου να
|
||
φτάσουμε στην απόκτηση πληροφοριών για το AMI που θα διαλέξουμε, αρχικά πρέπει
|
||
να λάβουμε την λίστα των διαθέσιμων διανομών. Έπειτα, επιλέγουμε μια από αυτές
|
||
και αποκτάμε την λίστα των διαθέσιμων περιοχών της Amazon. Αυτό το βήμα είναι
|
||
απαραίτητο, διότι κάθε AMI έχει ξεχωριστό αναγνωριστικό ανά περιοχή. Αφότου
|
||
επιλέξουμε την περιοχή που επιθυμούμε, το εργαλείο επικοινωνεί με τον πάροχο
|
||
νέφους εκτελώντας την συνάρτηση απόκτησης της εικόνας και μας επιστρέφει τις
|
||
πληροφορίες της.
|
||
|
||
Στο Σχήμα \ref{fig:secdepComponentDiagram2}, βλέπουμε πως γίνεται κλήση της
|
||
συνάρτησης απόκτησης του οδηγού για την αυθεντικοποίηση με την Amazon και
|
||
έπειτα λαμβάνουμε την λίστα των εικονικών μηχανών για την περιοχή που ορίσαμε
|
||
κατά την σύνταξη της εντολής, από την αντίστοιχη συνάρτηση. Οι μέθοδοι start
|
||
και stop αφορούν την εκκίνηση και την παύση ενός μηχανισμού που έχει προστεθεί
|
||
στον τρόπο εμφάνισης των εντολών, ώστε να γνωρίζει ο χρήστης πως η εκτέλεση του
|
||
προγράμματος συνεχίζεται. Αυτό αποτελεί ένα χαρακτηριστικό που αυξάνει την
|
||
εμπειρία χρήσης, ιδίως για εντολές με μεγάλης διαρκείας εκτέλεση.
|
||
|
||
Το SecDep αποτελείται από δύο εκτελέσιμα αρχεία. Το πρώτο αρχείο, το
|
||
\textquote{secdep.py}, είναι το κύριο αρχείο του προγράμματος. Αυτό το αρχείο
|
||
είναι υπεύθυνο για την επικοινωνία με τους παρόχους νέφους και την διαχείριση
|
||
των εικονικών μηχανών. Το δεύτερο αρχείο, το \textquote{harden}, είναι υπεύθυνο
|
||
για την σκλήρυνση των εικονικών μηχανών και την εγκατάσταση/σκλήρυνση του
|
||
Docker. Το harden, εκτελείται μόνο στις εικονικές μηχανές κατά την δημιουργία
|
||
τους και μόνο εάν ο χρήστης το επιθυμεί.
|
||
|
||
Οι βασικότερες συναρτήσεις του secdep.py είναι οι εξής:
|
||
|
||
\begin{itemize}
|
||
|
||
\item \textbf{create\_node}:
|
||
|
||
Η συνάρτηση \textquote{create\_node}, είναι αυτή που δημιουργεί τις
|
||
εικονικές μηχανές λαμβάνοντας ή ζητώντας από τον χρήστη τις κατάλληλες
|
||
παραμέτρους. Οι βασικές παράμετροι που μπορεί να λάβει είναι:
|
||
|
||
\begin{itemize}
|
||
|
||
\item \textbf{provider}: Ο πάροχος νέφους στο νέφος του οποίου θα
|
||
δημιουργηθεί η εικονική μηχανή (aws, gce, azure).
|
||
|
||
\item \textbf{name}: Το όνομα της εικονικής μηχανής.
|
||
|
||
\item \textbf{location}: Η περιοχή στην οποία θα δημιουργηθεί η
|
||
εικονική μηχανή.
|
||
|
||
\item \textbf{size}: Το μέγεθος της εικονικής μηχανής.
|
||
|
||
\item \textbf{image}: Η εικόνα από την οποία θα δημιουργηθεί η
|
||
εικονική μηχανή.
|
||
|
||
\item \textbf{confirm}: Χρησιμοποιείται για επιβεβαίωση της
|
||
δημιουργίας της εικονικής μηχανής χωρίς να χρειαστεί
|
||
χειροκίνητη επιβεβαίωση από τον χρήστη.
|
||
|
||
\item \textbf{deploy}: Για την εκτέλεση του harden (δηλ. την
|
||
εφαρμογή της σκλήρυνσης).
|
||
|
||
\end{itemize}
|
||
|
||
\item \textbf{node\_action}:
|
||
|
||
Η συνάρτηση \textquote{node\_action}, είναι αυτή που εκτελεί τις
|
||
ενέργειες πάνω στις εικονικές μηχανές. Στις ενέργειες αυτές
|
||
περιλαμβάνονται:
|
||
|
||
\begin{itemize}
|
||
|
||
\item \textbf{start} (εκκίνηση της εικονικής μηχανής)
|
||
\item \textbf{stop} (παύση της εικονικής μηχανής)
|
||
\item \textbf{reboot} (επανεκκίνηση της εικονικής μηχανής)
|
||
\item \textbf{delete} (διαγραφή της εικονικής μηχανής)
|
||
|
||
\end{itemize}
|
||
|
||
\clearpage
|
||
|
||
\item \textbf{list\_all\_nodes}: Η συνάρτηση \textquote{list\_all\_nodes},
|
||
είναι αυτή που εμφανίζει τις εικονικές μηχανές που διαχειρίζεται το
|
||
SecDep. Χωρίς παραμέτρους θα εμφάνιζε όλες τις εικονικές μηχανές από
|
||
όλους τους παρόχους. Επειδή, όμως, δεν είναι πάντοτε απαραίτητο να
|
||
εμφανίζονται όλες οι εικονικές μηχανές, ο χρήστης μπορεί να δώσει τις
|
||
παρακάτω παραμέτρους:
|
||
|
||
\begin{itemize}
|
||
|
||
\item \textbf{provider}
|
||
|
||
\item \textbf{filterIn}: Χρησιμοποιείται για το φιλτράρισμα της
|
||
λίστας κατά την χρήση της συνάρτησης \textquote{node\_action}.
|
||
Με βάση την τιμή της ενέργειας που θέλει να πραγματοποιήσει ο
|
||
χρήστης, δεν περιλαμβάνονται στην λίστα, οι εικονικές μηχανές
|
||
για τις οποίες δεν είναι δυνατή η εκτέλεση της ενέργειας αυτής.
|
||
|
||
\item \textbf{awsRegion}: Μόνο για τον πάροχο AWS. Χρησιμοποιείται
|
||
για την επιλογή της περιοχής. Δίχως την παράμετρο αυτή, θα
|
||
γινόταν έρευνα για εικονικές μηχανές σε όλες τις περιοχές. Κάτι
|
||
που θα έκανε την εκτέλεση της εντολής πολύ αργή, ειδικά εάν ο
|
||
χρήστης γνωρίζει πως χρησιμοποιεί μονάχα μια περιοχή.
|
||
|
||
\end{itemize}
|
||
|
||
\end{itemize}
|
||
|
||
\noindent Το αρχείο harden, αποτελείται από πολλές συναρτήσεις, οι οποίες
|
||
εκτελούνται με την σειρά προκειμένου να ασφαλιστεί το σύστημα στο οποίο
|
||
εκτελείται. Οι πιο αξιοσημείωτες αυτών είναι:
|
||
|
||
\begin{itemize}
|
||
|
||
\item \textbf{hardenSSH}:
|
||
|
||
Η συνάρτηση υπεύθυνη για την σκλήρυνση του SSH.
|
||
|
||
\item \textbf{dockerInit}:
|
||
|
||
Η συνάρτηση υπεύθυνη για την εγκατάσταση/σκλήρυνση του Docker.
|
||
|
||
\item \textbf{kernelSecurityModuleInit}:
|
||
|
||
Η συνάρτηση υπεύθυνη για την εγκατάσταση/ρύθμιση του κατάλληλου για την
|
||
διανομή (της εικονικής μηχανής) kernel security module.
|
||
|
||
\item \textbf{configureFail2ban}:
|
||
|
||
Αφότου έχει προηγηθεί η εγκατάσταση του κατάλληλου για την διανομή
|
||
προγράμματος αναχώματος ασφαλείας, η συνάρτηση αυτή ρυθμίζει το
|
||
fail2ban για την προστασία από επιθέσεις brute force.
|
||
|
||
\end{itemize}
|
||
|
||
\begin{landscape}
|
||
\thispagestyle{empty}
|
||
|
||
Mε το \textquote{code2flow} \footfullcite{code2flow} δημιουργήθηκε ένα
|
||
διάγραμμα που απεικονίζει τις κλήσεις συναρτήσεων που γίνονται κατά την
|
||
εκτέλεση του αρχείου secdep.py. Παράλληλα, το ίδιο αποτέλεσμα επιτεύχθηκε για
|
||
το αρχείο harden με την βοήθεια του \textquote{callGraph}
|
||
\footfullcite{callGraph}. Τα παραπάνω απεικονίζονται στα Σχήματα
|
||
\ref{fig:secdepFunctionCallDiagram} και \ref{fig:hardenFunctionCallDiagram}
|
||
αντίστοιχα.
|
||
|
||
\begin{center}
|
||
\begin{figure}[!ht]
|
||
\centering
|
||
\includegraphics[width = 1.1\textwidth]{Figures/Diagrams/secdep-function-relationships.png}
|
||
\captionof{figure}{Διάγραμμα κλήσεων συναρτήσεων του secdep.py}
|
||
\label{fig:secdepFunctionCallDiagram}
|
||
\end{figure}
|
||
\vspace*{-30pt}
|
||
\end{center}
|
||
|
||
\end{landscape}
|
||
|
||
\begin{landscape}
|
||
\thispagestyle{empty}
|
||
|
||
\vspace{30pt}
|
||
|
||
\begin{center}
|
||
\begin{figure}[!ht]
|
||
\centering
|
||
\includegraphics[width = 1.1\textwidth]{Figures/Diagrams/harden-function-relationships.png}
|
||
\captionof{figure}{Διάγραμμα κλήσεων συναρτήσεων του harden}
|
||
\label{fig:hardenFunctionCallDiagram}
|
||
\end{figure}
|
||
\vspace*{-30pt}
|
||
\end{center}
|
||
|
||
\end{landscape}
|
||
|
||
\noindent Επιπλέον, ένας χάρτης των σημαντικών εξαρτήσεων του secdep.py
|
||
δημιουργήθηκε με την βοήθεια του \textquote{pydeps} \footfullcite{pydeps}. Αυτό
|
||
έγινε με την εκτέλεση της παρακάτω εντολής:
|
||
|
||
\begin{listing}[!ht]
|
||
\begin{bashcode}
|
||
pydeps -T png --cluster --include-missing --max-bacon=1 --noshow --reverse --rankdir RL -o secdep-module-dependencies-organized.png secdep.py
|
||
\end{bashcode}
|
||
\caption{Εντολή δημιουργίας χάρτη εξαρτήσεων του secdep.py}
|
||
\label{lst:secdepModuleDependencies}
|
||
\vspace*{-10pt}
|
||
\end{listing}
|
||
|
||
\begin{center}
|
||
\begin{figure}[!ht]
|
||
\centering
|
||
\includegraphics[width = .9\textwidth]{Figures/Diagrams/secdep-module-dependencies-organized.png}
|
||
\captionof{figure}{Διάγραμμα σημαντικών εξαρτήσεων του secdep.py}
|
||
\label{fig:secdepModules}
|
||
\end{figure}
|
||
\vspace*{-30pt}
|
||
\end{center}
|
||
|
||
\noindent Οι παραπάνω βιβλιοθήκες, αποτελούν τους πυλώνες του SecDep. Κάθε μια
|
||
από αυτές, εξειδικεύεται σε διαφορετικούς τομείς και χρησιμοποιείται για την
|
||
κάλυψη διαφόρων λειτουργιών του SecDep. Με την σειρά που απεικονίζονται, έχουν
|
||
τις εξής αρμοδιότητες:
|
||
|
||
\begin{itemize}
|
||
|
||
\item \textbf{azure}:
|
||
|
||
Η βιβλιοθήκη της azure, χρησιμοποιείται για την επικοινωνία και
|
||
αυθεντικοποίηση με τον πάροχο νέφους Azure. Ο λόγος που χρειάζεται να
|
||
χρησιμοποιηθεί συνδυαστικά με την libcloud, είναι για επιτύχουμε την
|
||
ομοιόμορφη συμπεριφορά του εργαλείου κατά μήκος όλων των παρόχων που
|
||
αυτό υποστηρίζει. Συγκεκριμένα, την χρειαζόμαστε για την επίτευξη των
|
||
λειτουργιών δημιουργίας Resource Group και Virtual Network, καθώς αυτές
|
||
λειτουργίες δεν υποστηρίζονται από την libcloud την παρούσα στιγμή.
|
||
|
||
\clearpage
|
||
|
||
\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}
|