Amazon AWS - Τα βασικά

Εισαγωγή

Κάθε τρεις και λίγο έρχεται μία τεχνολογία που αλλάζει τα πάντα. Ριζικά. Στις μέρες μας αυτό είναι το Cloud Computing. Ολα τα δεδομένα βρίσκονται στο “cloud” σε διάφορα datacenters. Δείτε το google docs, ή το office365, όπου βασικά σημαίνει να τρέχεις προγράμματα χρησιμοποιώντας external resources. Ο αρχηγός στο cloud computing είναι το Amazon AWS. Η Αμαζον ανα τα χρόνια, έφτιαξε μία από τις πιο μεγάλες infrastructures στον κόσμο, με τρομακτικό scaling. Φανταστείτε ένα γιγάντιο υπολογιστή όπου μπορείς να προσθέτεις όσους CPU πυρήνες, μνήμη RAM και χωρητικότητα (δίσκο) θες. Δεν υπάρχουν ανταγωνιστές; Σίγουρα υπάρχουν, αλλά η Amazon είναι έτη φωτός μακριά τους, προσφέρει τόσα πολλά πράγματα όπου απο κει που ήθελες απλά έναν server στο cloud, στην τελική καταλήγεις με άλλα 10 πράγματα – marketing. Σε αυτή τη σειρά άρθρων θα ασχοληθούμε με τα απολύτως βασικά, με τους servers, τα websites, τους dns και ό,τιδήποτε άλλο είναι τα χρειάζεται να ξέρει ένας system administrator για να τρέξει τα services στο cloud.

Πώς θα γίνει αυτο:

  • Για να μάθετε αυτό το skill πρέπει να πραγματοποιήσετε αυτά που θα σας πω. Το διάβασμα δεν αρκεί, πρέπει να υλοποιήσετε τα tasks και συγκεκριμένα να τα επαναλάβετε τόσες φορές ώστε να το κάνετε πλέον μηχανικά.

  • Κρατήστε τις δικές σας σημειώσεις και φτιάξε τα δικά σας SOP.

  • Φτιάξτε ένα lab. Ναι, πρέπει να πληρώσετε, sorry. Θα πρέπει να έχετε πιστωτική κάρτα (συγκεκριμένα πιστωτική) και να φτιάξετε ένα account στο Amazon AWS.

  • Τέλος, να πω ξανά, ότι είναι σημαντικό να υλοποιήσετε αυτά για τα οποία θα σας μιλήσω. Είναι ένα καθαρά πρακτικό skill, το οποίο είναι ότι πιο απλό πρέπει να ξέρει ένας system administrator σήμερα, και φυσικά από κει επιβάλλεται να ψαχτείτε μόνοι σας και να βρείτε το δικό σας workflow.

  • Το interface του AWS αλλάζει συνέχεια, οπότε αν θέλετε να είστε up to date, γραφτείτε στο AWS Newsletter καθώς είναι κάτι σαν changelog.

  • Μην το φοβάσαι. Κάποτε φοβόμουν να βάλω Linux και πλέον δεν μπορώ να δουλέψω χωρίς αυτό. Ο μόνος τρόπος να αγαπήσετε το cloud computing είναι με το να το χρησιμοποιείτε. Όσο περισσότερο το χρησιμοποιείτε τόσο πιο άνετα και ευχάριστα θα νιώθετε.

Τι είναι το cloud;

Σκέψου ότι πας στην δουλειά, μπαίνεις μεσα στο server-room, φορτώνεις όλα τα μηχανήματα στο αυτοκίνητο και τα πας και τα αφήνεις σε ένα datacenter. Αυτό ήταν. Είναι ένα off-site infrastructure καθώς και κάποια όμορφα σπέσιαλ features που έρχονται μαζί με αυτό. Μιλάμε για τον παραδοσιακό τρόπο, όπου εδώ ο κυρ Μήτσος αποφάσισε να φτιάξει το δικό του προσωπικό cloud – αυτό που λέμε on-premise ή αλλιώς bare-metal. Το πρώτο πράγμα που κάνει είναι να βρει ένα datacenter (συνήθως βρίσκονται σε περιοχές που δεν έχει σεισμούς και άλλες καταστροφές).

btw έχετε μπει ποτέ σε datacenter; Αν, όχι, απλά κάντε το. Χωρίς πλάκα, κανονίστε να πάτε σε ένα μεγάλο datacenter στην Ευρώπη και να βάλετε ένα 20 raspberry pi. Όταν θα μπείτε μέσα είναι σαν να βρίσκεσαι στο Death Star! Τεράστιοι ανεμιστήρες, φωτάκια παντού, κλπ. Εκεί λοιπόν, ο κυρΜήτσος νοικιάζει ένα rack για να βάλει τον εξοπλισμό του. Για το rack αυτό (απλά και μόνο για τον χώρο) θα πληρώσει κάποια χρήματα. Για το ρεύμα, το internet και όλα τα υπόλοιπα θα πληρώσει επιπλέον χρήματα εννοείται. Εκεί, έχουμε κάποιες εταιρείες οι οποίες εδραιώνονται ενεργά μέσα στο datacenter, και είναι υπεύθυνοι για το σετάρισμα των switches, firewalls, servers, storages κλπ. Οπότε αν θέλετε να αναβαθμίσετε το δίκτυο σας σε fiber optics, πρέπει να απευθυνθείτε σε μία από αυτές, και οι engineers τους θα φροντίσουν και ό,τι χρειάζεται. Είναι σαν να χτίζεις ένα σπίτι. Επιλέγεις τα καλώδια, το firewall, το πως θα κάνεις το power cycle, τα UPS, τους servers σου, κλπ. Το rack σου είναι σαν το σπίτι σου, μέσα στο datacenter και οι network engineers οι εργολάβοι.

Θέλω λοιπόν να τρέξω έναν web server. Θελω να τρέξω ένα remote desktop server. Θελω να τρέξω έναν SFTP server. Θέλω να τρέξω έναν mail server. Ο,τι θες να τρέξεις, τώρα μπορείς να το κάνεις, χρησιμοποιώντας το off-site infrastructure σου, όπου για σένα είναι πλέον το “cloud” σου. Μπορείς να σηκώσεις ένα ωραιότατο OpenStack!

Και φυσικά, μπορείς να κάνεις expand και σε άλλο datacenter. πχ να έχεις ένα στην Ευρώπη και ένα στην Αμερική. Αν κάτι πάει στραβά, πχ χαλάσει το air-condition και αρχίσουν να ψήνονται οι servers, τι θα κάνεις; Ναι, μπορεί να σου λένε ότι έχουν 100% SLA uptime, αλλά θα το ρισκάρεις; Οι εγγύηση αυτή ισχύει εφόσον το datacenter είναι ΟΚ, αν πιάσει φωτιά τότε προφανώς και θα πέσουν offline τα services σου. Πέρα από αυτό, αν προσφέρει πχ voice over IP services, και οι πελάτες σου είναι στην Κίνα, θες ένα datacenter στην Κίνα, διαφορετικά θα υπάρχει delay και lag. Το οποίο σημαίνει, ότι με τον παραδοσιακό τρόπο, ο Μήτσος πρέπει να πάει ταξίδι στην Κίνα!

Τι είναι το AWS (Amazon Web Services);

Το πρώτο πράγμα: δεν φορτώνεις τίποτα στο αμάξι σου. Δεν αγοράζεις καλώδια, δεν αγοράζεις rack, δεν πας στην Κίνα, δεν, δεν, δεν, δεν. Απλά μπαίνεις σε ένα website και επιλέγεις τι θες να κανεις. Το πρώτο πράγμα που επιλέγεις είναι το Region, δηλαδή την περιοχή που η Amazon εχει datacenters. πχ eu-west-1, us-east-1, us-east2-, κλπ. Κάθε region εχει ένα pool από Availability Zones, τα οποία είναι datacenters που λειτουργούν ανεξάρτητα το ένα από το άλλο. Οπότε, region = περιοχή, availability-zones=datacenters στην περιοχή αυτή.

Για κάθε region υπάρχουν περισσότερα ή λιγότερα availability zones. Δεν σημαίνει ότι η τάδε region είναι καλύτερη από την άλλη. Ολα τα datacenters εχουν τις ίδιες προδιαγραφές και ISO.

Επιλέγουμε λοιπόν μία region και μία availability zone, και πλέον μπορούμε να κάνουμε provision τον server μας. Κάνουμε λοιπόν launch ενα instance (πχ ubuntu) και ένα instance type (πχ micro). Το instance type είναι το πόσο μεγάλος ή μικρός είναι αυτός ο server. Δύο πράγματα δηλαδή: το operating system και τα hardware specs (instance type). Εχοντας το server να τρέχει, πλέον μπορούμε να σηκώσουμε τα services που θέλουμε. Εναν webserver, εναν mailserver, ενα ZNC, ο,τι θέλουμε … Το επόμενο βήμα είναι να κάνει expand σε άλλο datacenter (availability zone) γιατί θέλουμε να υπάρχει redundancy. Υποθέτοντας ότι έχουμε τον server στην Αμερική στο us-west-1a datacenter, τότε μπορούμε να τον επεκτείνουμε και στην us-west-1c availability zone. Είναι στην ίδια τοποθεσία, αλλά σε διαφορετικό datacenter. Οπότε τώρα, με 2 κλικ έχω multi-datacenter redundancy. Αν έχω πάλι του Κινέζους πελάτες, τότε μπορώ να κάνω extend και σε άλλο Region, κοντά στη Κίνα, ώστε να έχω multi-region redundancy.

Ας τα βάλουμε κάτω, pros and cons:

Bare Metal / Private Cloud:

  • Πληρώνεις εξαρχής ένα σκασμό λεφτά, καθώς δεν ξερεις πόσα περίπου πράγματα θα χρησιμοποιήσεις (καλώδια, servers, UPS, κλπ), οπότε πληρώνεις ένα σκασμό λεφτά για να είσαι σίγουρος ότι θα σου φτάσουν. Επειδή δεν θες να απογοητεύσεις τους πελάτες σου, συνήθως αγοράζεις παραπάνω από ότι χρειάζεσαι, με αποτέλεσμα να πληρώνεις τζάμπα λεφτά.

  • Οι τεχνικοί στο datacenter δεν ειναι φθηνοι. Ολοι αυτοί οι δικτυάδες με τα Cisco και AT&T που συνδέουν και πατσάρουν και σετάρουν και ρυθμίζουν και συνδέουν και τρέχουν πάνω κάτω, είναι προσωπικό που παρέχει ένα service το οποίο χρειάζεσαι.

  • Και φυσικά, μιλάμε για μία custom λύση, αναλόγως την εμπειρία που έχεις και την εμπειρία που έχει ο εκάστοτε engineer που υλοποιεί τη λύση που πιστεύει ότι είναι η καλύτερη. Οπότε πολλές φορές ανακαλύπτουμε τον τροχό ξανά και ξανά, χωρίς η επόμενη φορά να είναι καλύτερη από τη προηγούμενη.

  • Πλεονέκτημα είναι προφανώς όλα αυτά σου ανοίκουν, δεν τα νοικιάζεις, αλλά είναι αγορασμένα στο όνομά σου, αλλά στην ουσία εξαρτάσαι αρκετά σε άλλους παράγοντες, στους μηχανικούς, στο datacenter το ίδιο, και ελπίζεις ότι όλα θα πάνε καλά.

  • Μπορείς να φτιάξεις όσο πιο μεγάλο “θηρίο” server θες. Δεν υπάρχειν micro, small, medium, large, xxl, και άλλα μεγέθη. Οργίασε όσο θες με τα specs.

Amazon AWS

  • Εδώ το μοντέλο είναι pay-as-you-go και μάλιστα σου δίνουν και δωρεάν services για τον πρώτο χρόνο για το transitioning period. Μπορείς πολύ εύκολο να αυξήσεις και να μειώσεις ότι resources θες, απλά με μερικά κλικ.

  • Δεν θες να πληρώνεις ένα σκασμό λεφτά για πράγμτα που δε χρειάζεσαι, σωστά; Αυτό λέγεται ELASTIC. Καλώς ήρθες στο Elastic Computing, οπου λέξη κλειδί είναι το: grow-as-needed. Οταν βλέπεις οτι ο χώρος στο δίσκο αρχίζει να τελειώνει, τότε automagically (μου αρέσει αυτή η λέξη) σηκώνεται κι άλλα μηχανήματα και μεγαλέι έτσι η χωρητικότητα! Φυσικά αυτό το ρυθμίζεις, πχ όταν ο του πελάτη φρικάρει λόγω κίνησης, το οποίο συμβαίνει συνήθως σε ώρες αιχμής (πχ 13:00 με 16:00), τότε θέλω για αυτό το διάστημα να σηκώσεις άλλους δύο servers για να μοιράσει το φόρτο. Μόλις πάει 16:00 να σκοτώσεις τον έναν, και μόλις πάει 17:00 να σκοτώσεις και τον άλλο, ώστε να μείνει πάλι με αυτόν που είχε. Φυσικά αυτό μπορεί να ρυθμιστεί και με άλλα quota, οχι απαραίτητα με βάση την ώρα. Λεφτά να έχεις, και pricing models θα βρεις. Στο Amazon λοιπόν, αυτό λέγεται EC2 - Elastic Computing: το οποίο είπαμε ότι σημαίνει add-more-as-you-need και τα αφαιρείς όταν είσαι ΟΚ. Οπως είπα στην αρχή, η Amazon δεν έχει πρόβλημα με το scaling, οπότε ότι κι αν ζητήσετε, οι τύποι θα το κάνουν deliver.

  • Επίσης έχουν ένα κάρο security compliances, όπου εκεί έχουμε τα legal/δικηγορικά στη μέση. Μερικοί πελάτες λένε: “παιδιά εμείς παίζουμε μόνο με το X ISO, ή με το Y ISO”. Εχοντας το infrastructure στο AWS, είναι 100% σίγουρο (ότι καν χρειάζεται να το σκεφτείς) ότι είναι compliant με το πρότυπο που ζητάει ο πελάτης.

  • Πολλαπλά datacenters, με ένα κλικ. Διαφορετικά, δοκιμάστε να φορτώσετε τα πάντα σε ένα αμάξι και να στήσετε δεύτερο infrastructure.

  • Οι Engineers στο Amazon δουλεύουν στην αιχμή της τεχνολογία όσον αφορά τα datacenters. Πρώτα θα το ανακαλύψουν αυτοί, και μετά θα το πάρουν όλοι οι άλλοι. Οπότε η εξειδίκευση που υπάρχει είναι τεράστια, συνεπώς έχεις το καλύτερο support που θα μπορούσες να έχεις από την άποψη του consulting – και θα πληρώσεις για αυτό.

  • Horizontal Scaling. Τι είναι αυτό; Υπάρχει και vertical scaling; Ναι! πχ Θέλεις περισσότερη επεξεργαστική ισχύ; Αγοράζεις περισσότερους επεξεργαστές. Θέλεις περισσότερη RAM, αγοράζεις περισσότερη RAM. Με το Amazon είναι λίγο διαφορετική η φιλοσοφία. Αντί να προσθέτεις hardware, προσθέτεις instances. Στο AWS τα πάντα είναι virtualized. Προφανώς αυτά τρέχουν σε κάποιο bare metal hardware, αλλά η φάση είναι ότι μέσω ένος wizard μπορούμε να φτιάξουμε ένα custom server, virtualized, το οποίο λέγεται AMI. Οπότε αντί να κάνουμε το AMI μεγαλύτερο (πχ να προσθέσουμε περισσότερους επεξεργαστές σε αυτό, ή περισσότερη RAM), αντί δηλαδή να κάνουμε vertical scaling, το AWS σου προτείνει να σηκώσει ένα δεύτερο AMI. πχ ας πούμε ότι τρέχεις ένα website που έχει πολλή κίνηση και γίνεται χαμός. Ολη μέρα όλοι μπαίνουν στο site σου, και βλέπεις ότι 8:00 - 17:00, μπαίνουν όλοι μέσα και κάνουν το ΑΜΙ σου να βογκάει. Οπότε, εδώ έρχεται το horizontal scaling του AWS όπου σου επιτρέπει να κάνεις clone το AMI, και να φτιάξεις όσους κλώνους του webserver θες. (btw Όλοι αυτοί μιλάνε με την ίδια database προφανώς). Σηκώνεις και έναν loadbalancer μπροστά, ο οποίος ανακατευθύνει το traffic και έτσι σώθηκες. Το website σου παραμένει online και παρόλο που δεν είχε υπολογίσει ότι θα γίνει τόσο χαμός, με 5 κλικ σηκώθηκαν αμέσως τα cloned AMIs και έβαλες μπροστά τους και έναν LB. Αυτό είναι το horizontal scaling.

Με απλά λόγια: wow! Αυτό είναι μία τεχνολογία που αλλάζει τα πράγματα! Το AWS εντάσεται στην κατηγορία του public cloud, δηλαδή όλα τα τα features, λίγο-πολύ, τα παρέχουν κι άλλοι, όπως Microsoft Azure, Google GCP, DigitalOcean, OVH κλπ. Φυσικά, το public cloud δεν είναι καινούριο, ο κόσμος το χρησιμοποιεί εδώ και αρκετό καιρό.

Οπότε:

  1. Πρέπει να μάθεις να χρησιμοποιείς το public cloud.
  2. Το AWS είναι μακράν το πιο ευρέως διαδεδομένο public cloud. Ξεκίνα από αυτό!

ΥΣ: Το 70% των public cloud services παγκοσμίως τρέχουν σε AWS. Με άλλα λόγια, αν πάτε να πιάσετε δουλειά σήμερα: ΠΡΕΠΕΙ ΝΑ ΞΕΡΕΤΕ ΤΑ ΒΑΣΙΚΑ ΤΟΥ AWS.

11 «Μου αρέσει»

1 - Οι υπηρεσίες που προσφέρει το AWS

Καταρχάς να πω ότι ήδη ίσως χρησιμοποιείτε αρκετά cloud services χωρίς να το γνωρίζετε. Το Gmail είναι ένα e-mail cloud service. Το Dropbox, είναι ένα storage on demand, το οποίο τρέχει στο AWS. To Netflix, το οποίο τρέχει εξολοκλήρου σε AWS. Το AirBNB τα ίδια. Αρκετά services της NASA επίσης. κ.α. Αναλόγως τις ανάγκες κάθε εταιρεία επιλέγει τι αρμόζει σε αυτήν.

Το AWS ξεκίνησε το 2002 και σήμερα είναι ο βασιλιάς του public cloud. Πίσω του ακολουθούν (αρκετά μέτρα πίσω) η Microsoft και πίσω της βρίσκεται η Google. Μιλώντας με νούμερα, το οικονομικό έτος του 2019 το AWS είχε 35.2 δις εσοδα. Είχε το 47% της αγοράς, με την Microsoft να βρίσκεται δεύτερη στο 22%. Το 2020 έχει μεγαλώσει αρκετά το νούμερο, και αρκετοί πελάτες δεν ήταν ευχαριστημένοι με τα υπόλοιπα services και κάνουν migrate στο AWS, οπότε τα έσοδα του για το 2020, παρά την πανδημία, αναμένονται μεγαλύτερα. Οι μικρότεροι παίκτες, πχ Google, προσπαθούν να μπουν στο παιχνίδι δίνοντας δωρεάν vouchers για να χρησιμοποιεί κάποιος τις υπηρεσίες τους, με ελπίδα να συνεχίσει να τις χρησιμοποιεί. Ωστόσο ακολουθούν μία αρκετά aggressive πολιτική στο κομμάτι αυτό, αφού δίνουν πολλά περισσότερα for free με σκοπό να δελεάσουν τον κόσμο. To Amazon κυριαρχεί λοιπόν στο public cloud και έχει πάνω από 1.000.000 ενεργούς χρήστες.

3 είδη cloud computing

  1. IaaS (Infrastructure As A service): Είναι όλα τα μηχανήματα, τα virtual machines, το storage, το networking, οι servers. Ο,τι χρειάζεστε δηλαδή για να τρέξετε software πανω σε αυτό. Πόσες φορές πήγατε να φτιάξε ένα site και στο τέλος σπαταλήσατε άπειρο χρόνο στο provisioning και σετάρισμα το υserver; No more! πχ στο Amazon έχουμε το EC2 (θα το δούμε αργότερα), ενώ σε άλλα public cloud εχουμε Google GCP, Digital Ocean, Linode ή και εκτός public cloud αλλά on-premise εχουμε πχ την Rackspace. Για να πάρετε μία ιδέα για το global infrastructure, πάντε τώρα στο https://infrastructure.aws/ και κάντε το virtual tour ;) Αυτό θα σας βοηθήσει να ξεκαθαρίσετε μερικούς όρους. Ενα ακόμα site είναι το https://aws.amazon.com/about-aws/global-infrastructure/
  2. PaaS (Platform As A Service) είναι όλα τα παραπάνω + Operating System και οποιαδήποτε middleware. Ενα λειτουργικό σύστημα δηλαδή optimized για το workload. Στο Amazon εχουμε εδώ το Elastic Beanstalk, το οποίο στήνει ολόκληρο το pipeline (webservers, storage, databases, monitoring, cost payment, scaling, ο,τι θες) για να μην κάτσεις και ασχοληθείς με αυτά. Εκτός του Αμαζον, άλλα παραδείγματα είναι το Heroku, Google App Engine στο GCP, Windows Azure (Microsoft).
  3. SaaS (Software As A service) είναι όλα τα παραπάνω + Application και τα data αυτής. Για παράδειγμα είσαι ερευνητής και θες να κανεις machine learning, οποτε θες optimized hardware για να τρέχεις και να εκπαιδεύεις το νευρωνικό δίκτυο. Στο Αμαζον υπάρχουν άπειρα optimized/special services, πχ το Recognition. Αντίστοιχα παρόμοιες υπηρεσίες εκτός Αμαζον είναι πχ το Gmail, το Dropbox, το Zoom, κλπ.

Εγώ θα σας μιλήσω για τα core services του AWS, δηλαδή αυτά που πρέπει να ξέρουν όλοι ή τουλάχιστον να έχουν ακούσει για αυτά, είναι τα εξής (κατά τη γνώμη μου πάντα):

Elastic Compute Cloud (EC2)
Είναι το μέρος που φτιάχνετε virtual machines που τρέχουν στο cloud. πχ αν θελω ενα Ubuntu server ο οποίος να είναι διαθέσιμος από οπουδήποτε τον κόσμο, θα πάω στο EC2 και θα κάνω generate ενα instance ενός virtual server.

Simple Storage Service (s3)
Πού αποθηκεύει τα δεδομένα του ο παραπάνω server; Το s3 είναι ένα redundant storage, το οποίο σημαίνει ότι ό,τι αποθηκεύω σε αυτό, τότε αυτόματα αντιγράφεται 2 φορές. Δηλαδή το s3 bucket είναι μία περιοχή που μπορείτε να αποθηκεύσετε δεδομένα, όπως πχ τα mp3 σας. Κάτι σαν το dropbox δηλαδή ή το GoogleDrive, με την διαφορά όμως ότι είναι redundant, δηλαδή όταν θα κάνε upload το mp3 αρχείο σας (λέμε τώρα…) τότε αυτό γράφεται (αποθηκεύεται) ταυτόχρονα σε 2 διαφορετικά μέρη μέσα στο s3 bucket, στο storage destination 1 και στο storage destination 2. Το “write” operation του mp3 δεν θα επιστρέψει “success” μέχρι να δημιουργηθούν επιτυχημένα και τα δύο αυτά αρχεία. Διαφορετικά η αντιγραφή του mp3 που κάνατε, θα αποτύχει. Αλλά … εξαιτίας αυτού (της διπλής αντιγραφής) το s3 είναι αρκετά αργό!

Τι ίσχυε πριν μερικά χρόνια:

Οταν φτιάχνουμε λοιπόν το instance μας, δημιουργείτε μαζί του και το s3 bucket. Όλο μαζί, αυτό λέγεται AMI. Στο s3 υπάρχει λοιπόν το image/template από το οποίο φορτώνει τo instance για να ξεκινήσει.

Το instance φορτώνει από το image που βρίσκεται στο s3 bucket, αλλά όταν τρέχει αυτό το image θα χρησιμοποιεί ένα άλλο storage service που λέγεται ephemeral storage, η οποία είναι πολύ πιο γρήγορη από το s3. Το storage αυτό βρίσκεται στο ίδιο το physical server που τρέχει πάνω του το virtual machine. Συνήθως είναι κάτι πολύ γρήγορο, σαν RAID5, αλλά δεν είναι permanent …

Πάμε ξανά, καθώς είναι σημαντικό: Αν αποθηκεύσετε κάτι στην ephemeral storage και κάνετε shutdown το instance, ΠΟΥΦ. Πάει, χάθηκαν τα δεδομένα σας. Την επόμενη φορά που θα ξεκινήσετε το instance θα φορτώσει ξανά το image/template που βρίσκεται στο s3 bucket και προφανώς δεν θα έχει τα δεδομένα που είχατε αποθηκεύσει (κακώς) στην ephemeral storage.

Με λίγα λόγια οι πελάτες ήταν αρκετά δυσαρεστημένοι γιατί θέλανε κάτι το οποίο να έιναι ΚΑΙ γρήγορο ΚΑΙ να έχει και redundancy. Θα μπορούσαν δηλαδή οι τύποι στο Amazon, να φτιάξουν ένα τρόπο όπου η ephemeral storage να μιλάει με το s3 bucket και του λεει: “πάρε και αποθήκευσε αυτά, γιατί είναι σημαντικά data”.

Τι ισχύει τώρα:

Η λύση λέγεται Elastic Block Store (EBS). Αυτό έχει να κάνει με το horizontal scaling που συζητήσαμε πριν και στην ουσία είναι μία permanent storage η οποία είναι ΠΙΟ ΓΡΗΓΟΡΗ από το s3 bucket.

Οπότε πάμε ξανά:

  • Εχουμε την virtual machine instance. Το image αυτής (λέγεται AMI), βρίσκεται στο s3 bucket. Είναι extremely stable και redundant αλλά είναι αρκετά αργό.
  • Όταν μπουτάρεις το instance από αυτο το image (AMI) τότε σε ρωτάει ποιά από τις άλλες δύο storages θες να χρησιμοποιήσεις: την Ephemeral Storage (η οποία βρίσκεται πάνω στον ίδιο τον physical server (hypervisor) που τρέχει το virtual machine, οπότε είναι υπερβολικά γρήγορο αλλά όταν κλείσεις τον server τότε θα χαθούν όλα τα δεδομένα σου) ή η άλλη επιλογή είναι να το τρέξεις στο EBS (το οποίο είναι ένα μικρό group από server, το οποίο σου δίνει πιο γρήγορο performance από το s3, και πιο αργό από το ephemeral, και ΔΕΝ χάνονται τα δεδομένα.
  • Το EBS κοστίζει λεφτά γιατι το Amazon πρέπει να κρατάει τα δεδομένα σας, ενώ το ephemeral storage είναι τζάμπα.

Cloudwatch
Είναι το monitoring ολων των παραπάνω. πχ κάθε 5 λεπτά θέλω να ξέρω πόσο storage έχω free, πόση επεξεργαστική ισχύ, πόση RAM, κλπ. Εδώ τώρα έρχοναι μερικοί πελάτες και λένε ότι θέλουν ακόμα πιο γρήγορο monitoring. πχ αν γεμίσει ο δίσκος μου, θέλω να το ξέρω το επόμενο δευτερόλεπτο και όχι 5 λεπτά αργότερα. Οπότε μπορούν να μειώσουν τους timers. Οσο τους πειράζεις και τους κατεβάζεις, τόσο πιο ακριβό είναι το service. Το default timer είναι δωρεάν.

SimpleDB/DynamoDB/RDS
Τo Amazon προσφέρει database services. Η SimpleDB σχεδιάστηκε για να είναι μικρή, αργή (access) αλλά είναι αρκετά φθηνή και εύκολη στο σετάρισμα. Η DynamoDB είναι scalable και πολύ γρήγορη και αρκετά μεγάλη, αλλά κοστίζει. Η RDS είναι η relational database. Η καθεμία έχει τα δικα της ±.

Route53
Είναι το DNS. Εκεί μπορείτε να φτιάξετε name records για τα domain σας. πχ έστω ότι έχω το linux-user.gr. Μπορώ να το βάλω στο Route53. Οπότε όποιος πάει στο www.linux-user.gr τότε θα τον ανακατευθύνει στο κατάλληλο webserver που τρέχει. Μπορώ να φτιάξω s3.linux-user.gr που θα πηγαίνει σε κάποιο άλλο location, κλπ. Εκεί γράφουμε όλα μας τα DNS records.

Virtual Private Cloud (VPC)
Αυτό είναι killer feature. Σου επιτρέπει να ελέγξεις το δίκτυο που τρέχουν τα instances του EC2. Οταν φτιάχνεις instances, το Amazon σετάρει αυτόματα το network από πίσω. Το routing, τα hostnames, οι public IP addresses, οι private IP address, κλπ. Αν λοιπόν κάποιος θέλει να τα κάνει μόνος του ή να πει “οκ, Αμαζον, ευχαριστώ για το service αλλά θέλω να δώσω εγώ καρφωτά τις IP που θέλω εγώ στους servers μου” ή αυτό που έχουν σχεδόν ΟΛΕΣ οι εταιρείες ιδιαίτερα σήμερα λόγω covid: “θέλω να έχω site-to-site VPN οπου τρέχουν οι servers στο cloud”. Σκεφτείτε το εξής: έχετε τα γραφεία σας στην Θεσσαλονίκη και οι servers σας βρίσκονται στο AWS. Το VPC μπορεί να σετάρει ένα private connection μεταξύ των γραφείων σας στην Θεσσαλονίκη και των server σας, έτσι ώστε μόνο όσοι έχουν πρόσβαση στο εταιρικό δίκτυο της Θεσσαλονίκης να μπορούν να έχουν πρόσβαση στους servers αυτούς. Ναι προφανώς θέλουμε ο υπόλοιπος κόσμος να μπορεί να επικοινωνεί με αυτά τα services, αλλά εδώ μιλάμε για την full private access στο backend, δηλαδή SSH στον ίδιο τον server να μπορεί να γίνει μόνο αυτό τον το τρόπο. Ή για παράδειγμα να έχετε Hybrid Cloud: δηλαδή να έχετε κάποιος secure servers στη Θεσσαλονίκη οι οποίο να είναι διαθέσιμοι μόνο από το VPN την εταιρείας, και μεσω του VPC Peering να μιλάνε με το AWS, χωρίς να γίνονται exposed. Εδώ θα παίξουμε με multi-tenancy. Αυτό το feature είναι από τα πιο δυνατά feature: Virtual Private Cloud κυρίες και κύριοι.

Auto Scaling
Επιτρέπει στο Amazon να προσθέτει επιπλέον instances όταν τα χρειάζεστε και να τα αφαιρεί όταν δεν τα χρειάζεστε. Μπορεί να ορίσετε ένα threshold και να πείτε: “Οταν το load φτάνει στο 80% CPU για συνεχόμενα 5 λεπτά, τότε σήκωσε 2 instances”. Αυτό είναι αυτόματο horizontal scaling, grow as needed.

Cloud Formation
Σας επιτρέπει να φτιάξετε templates για τους servers σας. Είναι ένα πιο advanced customized configuration, το οποίο λείπει από το EC2. πχ με το EC2 και το Autoscaling μπορείτε να φτιάξετε ένα AMI (το οποίο είναι η ονομασία ενός virtual machine στο AWS) για τον webserver μου, ή την database μου ή ο,τι θέλω και να γίνεται auto-clone οταν υπάρχει ανάγκη. Αλλά με το Cloud Formation μπορώ να φτιάξω templates of templates. Δηλαδή για να τρέξω πχ αν για να σηκώσω ένα service χρειάζομαι: 2 webservers, 3 databases, 1 linux και ένα windows server, τότε μπορώ να ορίσω όλα αυτά στo clouformation και να “σηκώσει” ολόκληρο το pipeline, ενα full-blown σύστημα. Γιατί να το θέλω αυτό; Γιατί μπορεί να θέλω να αντιγράψω ολόκληρο το σύστημά μου σε κάποιο άλλο datacenter (availability zone) ή σε κάποιο άλλο region. Για αυτό χρειάζομαι ένα cloud formation template. Κάποιες είναι δωρεάν (για κάτι απλό) πχ για ένα wordpress site ή ένα ecommerce store. Εχουν δηλαδή κάποια preconfigured templates δωρεάν, κι αν πληρώσεις μπορείς να στήσεις ότι θες.

IAM (Identity and Access Management)
Εχετε την δυνατότητα να φτιάξετε όλων των ειδών τα credentials, από πρόσβαση σε storage s3 buckets, από απλά password, public key, μέχρι blockchain tokens και ό,τι είδους access σύστημα σκέφτεστε θα το βρείτε εδώ.

Elastic Load Balancing (ELB)
Εστω οτι έχετε 4 webservers και θέλετε κάνετε load balancing ώστε να μοιράσετε τον φόρτο. Το Amazon μπορεί να φτιάξει ένα loadbalancer μπροστά από το website σας, τον FTP server σας, το remote desktop, το ο,τιδήποτε service σας τέλος πάντων, όπου παίρνει το request (το οποίο έρχεται από το internet) και το στέλνει πρώτα στον ELB. Ο ELB με την σειρά του το δίνει σε κάποιον από τους server σας. Σε ποιόν όμως; Αυτό εξαρτάται από τις ρυθμήσεις το ELB. Μπορεί να το έχετε σε round-robin ή να πείτε το 50% των requests να πηγαίνουν στον τάδε server, το 10% στον άλλον, κλπ Μπορείτε ορίσετε δηλαδή το πως γίνεται το load balancing.

Φυσικά υπάρχουν … ΠΟΛΛΑ περισσότερα services, ούτε και εγώ ξέρω πόσα. Αυτά νομίζω όμως είναι τα απολύτως βασικά όπου μπορεί να ξεκινήσει κάποιος και απο κει και πέρα να ψαχτεί μόνος του για το τι παραπάνω μπορεί να πετύχει. Αυτά ήταν απλά η κορυφή του παγόβουνου.To AWS εχει ΠΑΝΩ ΑΠΟ 200 services :sunglasses:

Λίγα από τα τα services είναι Global Scope. πχ το IAM, Route53, CloudFront, WAF. Ολα τα υπόλοιπα είναι region-based, οπότε αναλόγως το region που χρησιμοποιείτε θα έχετε (ή δεν θα έχετε) μερικά services. Για την λίστα των services που παρέχονται ανα region δείτε εδώ: https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/

Στην συνέχεια θα συνεχίσω γράφοντας πως μπορούμε να χρησιμοποιήσουμε το καθένα από τα παρακάτω services συγκεκριμένα. Μπορείτε να ακολουθήσετε τις οδηγίες μου και το πιο πιθανό είναι να μην σας χρεώσει τίποτα.

Πάτε στο: https://aws.amazon.com/free – εκεί μπορείτε να δείτε όλα τα services και να δείτε πόσο κοστίζει το καθένα και πόσο free είναι το καθένα. πχ

Για 12 μήνες, μπορείτε να τρέξετε δωρεάν:

  • 750 hours per month of Linux, RHEL, or SLES t2.micro or t3.micro instance dependent on region
  • 5 GB storage
  • Windows licences for free :stuck_out_tongue:
  • 30 GB Amazon EBS storage
  • και άλλα …

Αν πληρώσετε, τότε πάτε σε Paid Tier, όπου σας χρεώνει ανά ώρα. πχ ας υποθέσουμε ότι η μία ώρα για τον τάδε server κοστίζει 1 Ευρώ. Ακόμα κι αν εσείς τρέξετε για 10 λεπτά, θα χρεωθείτε μια ολόκληρη ώρα. Φυσικά υπάρχουν διαφορετικές χρεώσεις και λογική ανάλογα το service, το configuration αυτού, το region που τρέχει και το availability zone. Οπότε όσοι πάτε σε paid tier, ψάξτε το, γιατί στο τέλος μπορεί να σας έρθει φουσκωμένος λογαριασμός … μπορείτε να συμβουλευτείτε το Amazon Cost Calculator: https://calculator.s3.amazonaws.com/index.html

Φυσικά η συμβουλή μου είναι να μείνετε στο free tier

Οπότε:

  1. Φτιάξτε ένα account (ναι θέλετε πιστωτική κάρτα κ verification μέσω τηλεφώνου σαν 2FA)
  2. Διαβάστε για τα επιμέρους services και ψάξτε το λίγο μόνοι σας επιπλέον.
  3. Δοκιμάστε τα. Είναι δωρεαν για έναν χρόνο.
4 «Μου αρέσει»

IAM: Identity and Access Management

Θα δουμε λιγο αυτο το service πρωτο, για να τελειώνουμε με αυτό το άχαρο κομμάτι. Καταρχάς προφέρεται: Άι Εμ. Σαν να λέμε δηλαδή: “I am”. Είναι Global service, και όχι region scoped. Μας επιτρέπει να φτιάξουμε χρήστες και να του βάλουμε σε groups.

Τι ρυθμίσεις μπορούμε να κανουμε:
Με το φτιάξατε το AWS account είστε o root user. Μην το μοιράσετε με κανέναν άλλο – προφανώς.
Τωρα απο κει και πέρα αν δουλεύετε με άλλους ανθρώπους θα πρέπει να τους φτιάξετε users. πχ αν είστε στην εταιρεία 6 άτομα, ο Τακης, ο Μπάμπης και ο Γιώργος είναι developers, οπότε φτιάχνετε ένα group “Developers” και τους βάζετε μέσα. Ο Δημήτρης και η Μαρία είναι Admins, οπότε φτιάχνετε ένα group “Operators” και τους βάζετε εκεί μέσα. Το 6ο άτομο είναι η Αννα, η οποία είναι project manager και δεν ανοικει σε κάποιο από τα παραπάνω groups, οπότε φτιάχνετε τον user της και δεν την προσθέτετε σε καποιο group. Ειναι δηλαδή user χωρίς να ανοίκει σε καποιο group. Τα groups ΔΕΝ μπορούν να έχουν μέσα τους άλλα υπο-groups. Δεν μπορείς να φτιάξεις ένα κεντρικό group developers και να τους χωρίσεις (μέσα σε αυτό) σε senior και junior. Ωστόσο όμως οι users μπορουν να ανοίκουν σε περισσότερα από ένα groups, συνεπώς μπορούμε να πούμε ότι ο Δημήτρης και ο Γιώργος είναι παράλληλα και Auditors, οπότε φτιάχνουμε ένα group και τους βάζουμε εκεί. Ετσι αυτοί ανοίκουν σε 2 groups ο καθένας τους.

Permissions
Κάθε user ή group σχετίζεται με κάποιο policy, το οποίο είναι είναι ένα JSON document το οποίο δηλώνει τι “allow” μπορεί να κάνει κάποιος. Δηλαδή δεν μπορεί ο καθένας να κάνει τα πάντα. Πας σε αυτο το policy και λες: Οσοι ειναι στο group developers εχουν access στο τάδε service. Μετά φτιάχνεις άλλο policy και λες: Οσοι είναι στο group Operators εχουν access να πειράζουν τα EC2 instances και τον ELB. Οπότε αυτό το JSON document είναι το definition των permissions που έχει ο καθένας. By default κανένας user ή group δεν έχει πρόσβαση σε τίποτα. Η πρόσβαση δίνεται μέσω αυτού του document. Φυσικα αυτο το document μπορεί να είναι και per group και per user.

Πάμε να φτιάξουμε έναν χρήστη για εμάς τους ίδιους καθώς δεν είναι καλό να χρησιμοποιείται τον root χρήστη. Καθώς είστε στην AWS console, ψάξτε για “IAM”

1

Επιλέγω το “IAM” και φορτώνει το service. Οταν φορτώσει, στα αριστερά, κάνω κλικ στο “Users”:

2

και στην συνέχεια επιλέγω το κουμπάκι “Add User”:

3

Εκεί γράφω το username μου “drpaneas” και μετά επιλέγω ότι θέλω να δώσω στον εαυτό μου σε πρώτη φάση πρόσβαση στην AWS console, οπότε επιλέγω το checkbox. Μετά θέλω να δώσω το δικό μου password οπότε επιλέγω “custom password”. Μετά ξε-επιλέγω το επόμενο checkbox γιατί δεν θέλω να με ζητήσει να αλλάξω ξανά το password την πρώτη φορά που θα συνδεθώ με αυτόν τον user.

Συνεχίζω πατώντας “Next”. Στην επόμενη σελίδα μας ρωτάει τι permissions θελουμε να δώσουμε στον drpaneas. Μπορούμε είτε να τον προσθέσουμε σε κάποιο group είτε να του δώσουμε απευθείας permissions μέσα από κάποιο policy document. Θα ακολουθήσω τα best practices και θα φτιάξω group, οπότε θα πατήσω στο “Create group”.

Θελω να φτιάξω ένα group και να το ονομάσω “admins”, οπου όπως λεει και το όνομά του, μέσα θα βάλω μόνο τους users που θέλω να είναι administrators του AWS account. Σε δεύτερο βήμα, επιλέγω τι policy θα δώσω στους χρήστες αυτού του group. Επιλέγω το “AdministratorAccess” policy το οποίο θα δώσει full admin access. Τέλος πατάω “Create Group”.

Θα με πετάξει στην προηγούμενη σελίδα, όπου εκει θα επιλέξω το group που μόλις έφτιαξα:

Στην συνέχεια, πάμε “Next”. Στο επόμενο βήμα, μας ρωτάει αν θελουμε να ταγκάρουμε τον user μας. Τα tags είναι ένας ακόμα τρόπος να κατηγοριοποίησεις τους χρήστες. Είναι καθαρά cosmetic, για εσάς και τα μάτια σας και πως σας βολεύει να δουλεύετε. Προφανώς είναι optional δεν χρειάζεται να βάλετε κάτι, αλλά για παράδειγμα θα βάλω ένα να δείτε απλά τη χρήση του:

Στο επόμενο βήμα μας δείχνει μία συνολική εικόνα για το τι καναμε μεχρι τωρα, σας overview.

Ολα φαίνονται κομπλέ, οπότε πατάω το κουμπί “Create User” στο κάτω μέρος και μπαμ! Μόλις φτιάξαμε τον πρώτο μας admin user με username drpaneas :D

Προσέξτε ότι μας δίνει ένα link το οποίο μπορούμε να το χρησιμοποιήσουμε για sign-in. Θα σας δείξω στη συνέχεια πως μπορούμε να το αλλάξουμε. Επίσης μπορούμε να κατεβάσουμε το CSV το οποίο περιέχει λεπτομέρειες σχετικά με το πως θα κανουμε login. Δεν κάνουμε τίποτα από τα δύο για την ώρα, απλά ήθελα να σας τα δέιξω. Πατάμε “Close” button και κλείνουμε την όλη διαδικασία μιας και ολοκληρώθηκε.

Βλέπουμε λοιπόν πλέον ότι όταν κάνουμε κλικ στο “Users” από το Dashboard στα αριστερά, τότε μας εμφανίζει τον “drpaneas”, ο οποίος μέρος του group “admins”

Αν κάνουμε κλικ στο “Groups” από το Dashboard στα αριστερά, τότε δούμε ότι έχουμε φτιάξει και ένα group “admins”. Κάντε κλικ πάνω στο όνομα “admins”.

Εκεί βλέπουμε ότι το group εχει μόνο έναν user και αυτός λέγεται “drpaneas”. Στην συνέχεια κάντε κλικ στο “Permissions” tab.

Εκεί βλέπουμε ότι η “AdministratorAccess” policy εχει γίνει attach στο group και κάθε user του group την κάνει αυτόματα inherit.

Αντίστοιχα, αν κάνω κλικ στον user “drpaneas” και πάω στο δικό του permissions tab, θα δω όντως ότι έχει το AdministratorAccess policy και θα δω συγκεκριμένα ότι την παίρνει μέσω του group.

Οπότε πάμε να κανουμε login σαν drpaneas. Για να το κάνουμε αυτό θέλουμε το λινκ που μας είχε βγάλει όταν ολοκληρώσαμε το user creation. Σας είχα πει οτι δεν χρειάζεστε να το θυμάστε γιατί μπορούμε να το βρούμε και αργότερα αν θελουμε. Πάμε λοιπόν αριστερά κάνοντας κλικ στο Dashboard.

Εδώ βρίσκεται το link. Μπορούμε να το κάνουμε customize πατώντας το Customize link και δίνουμε ότι όνομα θέλουμε. Εγω θα δώσω “drpaneas-ccp”

17

Πατάμε το “Yes, create” button και βλέπουμε ότι πλέον το link στο dashboard αλλαξε αυτό που θέλουμε.

18

Για να δοκιμάσουμε να κανω login ανοίγω στον Chrome ενα “Νέο Παράθυρο Ανώνυμης Περιήγησης” έτσι ώστε να μη χρειαστεί να κάνω login από το άλλο και δοκιμάζω το λινκ.

Βαζω λοιπόν το link και εκεί βλέπω ότι μου έχει ήδη pre-filled το “drpaneas-cpp”. Συμπληρώνω και τα υπόλοιπα στοιχεία και κάνω login.

Οντως λοιπόν, με συνδέει στο AWS Console ως drpaneas και έχει το σύμβολο @ Κάθε φορά που βλέπετε το παπάκι να ξέρετε ότι είστε συνδεδεμένοι σαν IAM user και όχι σαν root.:

Δείτε την διαφορά αυτή που σας λέω. Στο πανω browser είμαι συνδεμένος σαν root (drpaneas) και στο άλλο σαν IAM drpaeas (με το @ ).

23

TIP: Στην περίπτωση που δεν θυμάστε το link, μπορείτε να δοκιμασετε να κανετε login σαν root. Εκει θα σας ρωτήσει πως θέλετε να συνδεθείτε. Επιλέξετε το IAM user και δώστε το “drpaneas-cpp”. Κατόπιν θα σας κάνει redirect στο link που δεν θυμόσασταν ;)

22

Κατανόηση αυτών που μόλις φτιάξαμε

Για να δείξω καλύτερα τι σημασία των permissions θα κανουμε το εξής. Στα αριστερά θα έχω τον browser logged in σαν root drpaneas και στα δεξιά θα έχω έναν άλλο browser logged in σαν IAM user drpaneas. Θα πειράζω πράγματα από αριστερά, και θα κάνω refresh στα δεξιά να δω το effect τους. Πάμε:

Λοιπόν σε πρώτη φαση είπαμε ότι δώσαμε AdministratorAccess στον IAM drpaneas, σωστά; Πάμε να δοκιμάσουμε να φτιάξουμε ένα group με το όνομα “developers”.

  1. IAM > Groups > Create New Group
  2. Set Group Name: developers
  3. Next Step
  4. Next Step (δεν δίνω καποιο policy)
  5. Create Group

Οντως λοιπόν φτιάχτηκε! Πάμε τώρα να δούμε κατι άλλο. Στο αριστερο browser που ειμαι σαν root, κάνω:

  1. IAM > Groups
  2. Click στο group “admins”
  3. Πάνε στο “drpaneas” user και πάτα το “Remove this user from the group”

Θα ανοίξει pop-up:
26

Ωραία, μόλις βγάλαμε τον IAM drpaneas από το admins group. Δοκιμάστε να κάνετε refresh στο δεξί browser, ο οποίο βρίσκεται στο “IAM > Groups”.

Μπούμ! Φάγαμε πόρτα! Ο IAM drpaneas δεν μπορεί να κάνει list τα groups γιατί δεν είναι admin. Αν δω τον χρήστη με το root account μου, θα δω να μου λεει πλεον ο IAM drpaneas δεν έχει κανένα permission policy.

Θα πατήσω λοιπόν το κουμπάκι να τον δώσω κάποια policy. Αντί να τον προσθέσω στο admins group θα του δώσω directly ενα policy.

  1. Add Permissions
  2. Attach Existing Policy directly
  3. Πάτα “IAM” στο filter search πεδίο
  4. Επέλεξε το “IAMReadOnlyAccess”

Αυτό θα πρέπει να διορθώσει το πρόβλημά μας. Οπότε πατάω επόμενο, επόμενο, επόμενο και βλέπω ότι πλέον ο IAM drpaneas εχει attached αυτό το policy.

Πάμε στο δεξί browser και κάνουμε refresh:

Το φτιάξαμε! Δεν υπάρχει error πλέον. Πάμε τώρα να δοκιμάσουμε να φτιάξουμε ακόμα ένα group, που λέγεται Operators. Ας δοκιμάσουμε να το φτιάξουμε με τον IAM drpaneas user. Από το δεξί browser λοιπον, κάνουμε:

  1. IAM > Groups > Create New Group
  2. Set Group Name: “operators”
  3. Next Step
  4. Next Step (δεν δίνω καποιο policy)
  5. Create Group

Βλέπουμε λοιπόν ότι δεν μπορουμε να φτιαξουμε group, γιατί δεν έχουμε full admin permissions, αλλά μόνο την δυνατότητα να κάνουμε listing. Για να μην καθόμαστε να βάζουμε ένα-ένα τα σωστά permissions, θα βάλω τον IAM user πίσω στο admins groups για να τελειώνουμε. Πιστεύω το πιάσατε το νόημα.

Από το αριστερό root browser:

  1. IAM > Groups
  2. Κλικ στο “admins”
  3. Κλικ στο κουμπί “Add users to Group”
  4. Επέλεξε τον χρήστη “drpaneas”
  5. Πάτα “Add User”

Αυτό ήταν. Για να είμαστε λίγο πιο σωστοί, θέλω να πάμε να να αφαιρέσουμε αυτό το direct listing policy. Οποτε πάμε στον user drpaneas, στο tab permissions και κάνουμε detach το συγκεκριμένο.

Θα εμφανιστεί ένα pop-up:
34

Και πλέον ο IAM drpaneas είναι όπως ήταν και πριν, μελος του admins group που κάνει inherit το AdministratorAccess policy μέσω του group ;)

Για περισσότερο ψάξιμο, πάτε στα Policies από το Dashboard στα αριστερά και αφιερωστε μερικά λεπτά, να πάρετε μία ιδέα τι είδους policies μπορείτε να χρησιμοποιήσετε. Βλέπουμε ότι το type τους είναι είτε AWS managed είτε Job function είτε μπορείτε να φτιάξετε μία δική σας policy από το μυαλό σας. Σε πρώτη φάση ας δούμε τι κάνει αυτή η AdministratorAccess policy:

IAM > Policies > AdministratorAccess > Policy Summary

Βλέπουμε πως δίνει access σε όλα τα 238 services του AWS!!! Αν κάνουμε κλικ στο JSON tab θα δουμε το ιδιο το policy document που σας έλεγα:

37

Είναι ένα απλό statement, το οποίο λέει ότι σας κάνει allow να κάνετε τα πάντα (το actions: *) στα πάντα (το Resource: *).

Πάμε να δούμε το άλλο που του είχαμε βάλει, το IAMReadOnlyAccess:


39

Εδώ βλέπουμε ότι επιτρέπει μόνο ένα service, το IAM. Και συγκεκριμένα δεν σου επιτρέπει να κάνεις ότι θες, αλλά συγκεκριμένα actions. Το JSON είναι αρκετά πιο συγκεκριμένο τώρα. Τα σημαντικά είναι το “iam:List*” και το “iam:Get*”. Σου δίνει και κάποια άλλα οπως βλέπετε, που δεν ξερω τι κανουν ακριβώς.

Τέλος μπορείτε να φτιάξετε μία δική σας policy, κάνοντας κλικ στο Create Policy. Εκεί ο visual editor σας επιτρέπει να κανετε κλικ σε οτι θελετε από Effect, σε ότι θελετε από Actions και σε ότι θέλετε από Resources, ενώ ταυτόχρονα από πίσω γράφει δυναμικά το JSON για εσάς.

Δεν πρόκειται να φτιαξω κατι, αλλα ηθελα να σας δειξω ποσο ευκολο ειναι να το κανετε, αν θελετε να το κανετε. Συνήθως χρησιμοποιείται για να φτιάχνετε API calls, δηλαδή αν θέλετε να δώσετε developer access και θελετε να περιορισετε πράγματα που μπορεί να κανει κάποιος, και να τα κάνετε customize ακριβώς όπως θέλετε, τόσο συνήθως όλοι φτιάχνουν ένα δικό τους custom policy.

5 «Μου αρέσει»

Πώς να προστατεύσετε το IAM Account σας

Αν καποιος καταφερει και αποκτήσει πρόσβαση στον AWS λογαριασμό σας, τότε τα πράγματα θα είναι πολύ άσχημα για το πορτοφόλι σας. Για αυτό το λόγο θα πρέπει να προστατεύσετε το account σας όσο το δυνατόν περισσότερο γίνεται.

Password Policy
Το Amazon σας προφέρει την δυνατότητα να παραμετροποιήσετε το password policy και να το κάνετε όσο ισχυρό θέλετε. Μπορείτε να εφαρμόσετε κάποιους κανόνες σε όλα τα accounts, δηλαδή:

  • Strong Password, το οποίο σημαίνει να επιλέξετε minimum length, κεφαλαία και μικρά, νούμερα, άλλα σύμβολα
  • Να μπορούν οι άλλοι χρήστες να αλλάζουν τον κωδικό τους
  • Να τους υποχρεώνεται να αλλάζουν τον κωδικό τους μετά από κάποιο χρονικό διάστημα (διαφορετικά password expiration)
  • Να μην μπορούν να βάλουν ξανά έναν κωδικό που είχαν χρησιμοποιήσει στο παρελθόν

MFA - Multi Factor Authentication
Αυτός είναι ο δεύτερος τρόπος που παρέχει το Amazon για να ασφαλίσουμε το account μας. Στην ουσία είναι το 2FA, όπου ο κωδικός αποτελείται από το password + ένα PIN που γίνεται generate σε μία συσκευή που έχετε συνδέση με τον λογαριασμό σας. Το τελικό password δηλαδή για να κάνετε login είναι ένας συνδυασμός των δύο. Ετσι ακόμα κι αν σας κλέψουν τον κωδικό, τότε δεν θα μπορέσουν να κάνουν και πολλά. Θα πρέπει να κλέψουν και τον κωδικό σας, και το κινητό σας (στην περίπτωση που αυτή είναι η συσκευή)

  • Virtual MFA device: ένα app στο κινητό
  • Universal 2nd Factor Securoty Key (U2F): Ενα φλασάκι σαν το YubiKey. Γκουγκλάρε το
  • Hardware Key Fob MFA Device: πχ το Gemalto

Πάμε να φτιάξουμε κατι από αυτά

Πάμε λοιπόν στο IAM service σαν root user, και εδώ να θυμήσω ξανά ότι αυτό είναι global scope, το οποίο μπορούμε να το δούμε και πάνω στο μενού που γράφει Global:

Screenshot 2020-08-24 at 15.12.03

Και εκεί βλέπουμε ότι το Amazon μας δίνει ένα πρώτο feedback για την ασφάλεια του λογαριασμού μας. Μας ζητάει να φτιάξουμε ένα IAM Password Policy και ένα MFA. Πάμε να το κάνουμε λοιπόν:

Κάνουμε κλικ στο κουμπί Manage Password Policy:

Και επιλέγουμε Set Password Policy
Screenshot 2020-08-24 at 15.15.26

Επιλέξτε τους κανόνες που θέλετε εσείς, πχ να οι δικοί μου:

Στην συνέχεια κάντε κλικ στο Save Changes
Screenshot 2020-08-24 at 15.17.17

Και έτσι φτιάξαμε την Password Policy και ολοκληρώσαμε το ένα από τα δύο βήματα.
Screenshot 2020-08-24 at 15.18.03

Για τους κανόνες του password policy συμβουλεύτε το security τμήμα της εταιρείας σας. Αν είστε ιδιώτης όπως εγώ, κάντε ότι θέλετε εσείς (προφανώς). Πηγαίνοντας ξανά πίσω στο IAM Dashboard βλέπουμε ότι έχει γίνει πράσινο το Apply an IAM password policy πεδίο :)

Ενεργοποίηση του MFA

Επιλέγουμε Manage MFA

Πάμε στο Multi-factor authentication (MFA) και επιλέγουμε Activate MFA

Τώρα έχουμε τις 3 επιλογές που σας έλεγα στην αρχή:

Εγώ θα χρησιμοποιήσω την πρώτη (Virtual MFA device) όπου θα χρησιμοποιήσω το κινητό μου και ένα app.

Κατεβάστε μία compatible εφαρμογή από τη λίστα που σας προτείνει και σκανάρετε το QR code. Μολις το κάνατε θα σας δώσει ένα κωδικό και θα αρχίχει ένα χρονόμετρο. Βάλτε το κωδικό πριν τελειώσει ο χρόνος. Μόλις περάσει ο χρόνος, θα ανανεωθεί ο κωδικός και θα ξεκινήσει πάλι ένα χρονόμετρο. Βάλτε και τον δεύτερο κωδικό στο δεύτερο πεδίο. Αυτό ήταν.

Οπότε την επόμενη φορά που θα κάνετε login θα πρέπει να χρησιμοποιήσετε και το κινητό σας. Πάμε λίγο όμως πίσω στο Dashboard να δούμε ένα 5/5 πράσινο για να χαρούμε λίγο πρώτα:

Οκ, τώρα δοκιμάστε να κάνετε logout και ξανά login. Σε πρώτη φάση μου ζητάει τον κωδικό μου:
Screenshot 2020-08-24 at 15.31.36

Και σε δεύτερη φάση ζητάει το MFA code. Δες στο κινητό σου και βάλε τον ;)
Screenshot 2020-08-24 at 15.32.20

Αυτό ήταν. Πλέον συνδεθήκαμε χρησιμοποιώντας 2FA :D ή αλλιώς MFA όπως το λέει η Amazon.

ΥΣ: Προσωπικά χρησιμοποιώ το 1PasswordX το οποίο αν και δεν είναι στο compatible list φαίνεται να δουλεύει. Αυτός είναι ο προσωπικός μου password manager, για τον οποίο πληρώνω κάποια συνδρομή, αλλά με βολεύει αρκετά οπότε τα έχω όλα εκεί. Λειτουργέι και στο κινητό και στο browser, οπότε στη συγκεκριμένη περίπτωση δε χρειάζεται να ανοίξω το κινητό. Δεν σας προτρέπω να κάνετε κ εσείς το ίδιο όμως, καθώς μπορεί να έχετε πρόβλημα αφού δεν είναι compatible. Οσο για μένα, this is a risk I have to take :smile:

2 «Μου αρέσει»

Πώς μπορούμε να επικοινωνήσουμε με το AWS

  1. Ο πρώτος τρόπος είναι προφανώς μέσα από τον browser, πηγαίνοντας στο AWS Management Console που χρησιμοποιούμε εδώ και αρκετή ώρα. Κάνετε login με το password και το MFA code και όλα μια χαρά. Κλικ-εδώ, κλικ-εκεί, κλικ-παρακεί, κλπ.

  2. Ο δεύτερος τρόπος είναι μέσω του τερματικού (CLI - Command Line Interface). Εκεί μας δίνει η Amazon ένα δικό της binary που πρέπει να κατεβάσουμε και να εγκατασήσουμε στο PC μας. Παίζει σε όλα τα λειτουργικά και υπάρχουν οδηγίες για αυτό. Εκεί, αντί για τους κωδικούς που είχαμε στον browser, θα πρέπει να φτιάξουμε κάποια κλειδιά, που λέγονται protected access keys.

  3. Ο τρίτος τρόπος είναι μεσω SDK (Software Development Kit). Εκεί χρησιμοποιούμε μία γλώσσα προγραμματισμού, Java, Python, Go, κλπ, και μέσω του API μπορούμε να κάνουμε διάφορα calls. Για να μπορέσουν να περάσουν τα calls αυτά και να πάρουμε μία μία authenticated απάντηση από τον AWS APIServer θα πρέπει να χρησιμοποιήσουμε πάλι protected access keys, σας αυτά που χρειάζεται η μέθοδος του τερματικού.

Απόκτηση των Access Keys

Για να πάρουμε ένα access key θα πάμε στην AWS Console. Ο κάθε user διαχειρίζεται τα δικά του κλειδιά. Προφανώς τα κλειδιά αυτά είναι εξίσου σημαντικά σαν το password και το MFA. Μην τυχόν και τα μοιράζετε από δω και από κει στο Internet.

Στην ουσία ένα access key αποτελείται από:

  • Access Key ID = το οποίο είναι ένα username
  • Secret Access Key = το οποίο είναι σαν ένα password

Οπότε κάνω login σαν drpaneas και όχι σαν root! Προσοχή, τo root account στην ουσία δεν θα το χρησιμοποιούμε σχεδόν καθόλου, είναι μόνο για το αρχικό setup. Οπότε ο κάθε user πρέπει να κάνει generate τα δικά του κλειδιά. Μπαίνω λοιπόν σαν drpaneas @ drpaneas-cpp (που έφτιαξα νωρίτερα). Πάω λοιπόν:

IAM > Users > drpaneas > Security Credentials tab > Create Access Key

Στην συνέχεια, σας δείχνει το Access Key, και είναι η μόνη φορά που θα το δείτε. Οπότε αποθηκεύστε το κάπου και μην το χάσετε. Εννοείται ότι αυτό που σας δείχνω το έχω ήδη διαγράψει, οπότε αν δοκιμάσετε να συνδεθείτε με το account μου θα αποτύχετε. Μπορείτε να διαγράψετε και να προσθέσετε πολλά access keys.

Εγκατάσταση του CLI

Πάτε εδώ: https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2-linux.html και ακολουθήστε τις οδηγίες.

Ανοίξτε ένα terminal και δώστε:

aws --version

Θα πρέπει να σας επιστρέψει την έκδοση. πχ εμενα αυτη τη στιγμη που γραφω το αρθρο που εβγαλε aws-cli/2.0.42. Αυτο σημαίνει ότι το aws cli εγκαταστάθηκε κανονικά χωρίς πρόβλημα.

Ρύθμιση του aws cli

Πατήστε aws configure στο τερματικό και δώστε τo access key του IAM user (όχι του root, είπαμε δεν θελουμε να χρησιμοποιούμε τον root).

aws configure
AWS Access Key ID [None]: βαλε το δικο σου
AWS Secret Access Key [None]: βάλε το δικο σου
Default region name [None]: eu-central-1 (βάλε οποια είναι πιο κοντά σε εσένα)
Default output format [None]: (τίποτα, απλά πάντα Enter)

Τώρα, ας δοκιμάσουμε να δούμε αν δουλεύει:

aws iam list-users

Και επιστρέφει:

{
    "Users": [
        {
            "Path": "/",
            "UserName": "drpaneas",
            "UserId": "AIDASGYP3OJMQ3MYF5AGV",
            "Arn": "arn:aws:iam::151967724121:user/drpaneas",
            "CreateDate": "2020-08-24T01:57:54+00:00",
            "PasswordLastUsed": "2020-08-24T13:47:07+00:00"
        }
    ]
}

Οι πληροφορίες που βλέπετε είναι οι ΙΔΙΕΣ που βλέπετε και στον browser με το AWS Console.

Αν αφαιρέσω permissions από αυτόν τον user (δεν το θα το κανω τωρα, απλα σας λέω το θα γίνει) τότε δεν θα μπορέσετε να κάνετε list-users.

Ετσι λοιπόν μπορούμε να επικοινωνήσουμε με το AWS μέσω του τερματικού

Επικοινωνία μέσω API

Οταν γράφουμε ένα πρόγραμμα, πχ κάποιον controller ή καποιο service που θέλει να επικοινωνήσει με το AWS, τότε μην κάνει κανένας πίθηκος και γράψει BASH το οποίο αποτελείται από “aws” cli εντολές. Χρησιμοποιείστε μία γλώσσα προγραμματισμού για να έχετε maintainable κώδικα, σωστό error checking, και logging. Το bash ειναι για να κανένα prototyping.

Πάμε εδώ: https://aws.amazon.com/tools/ όπου έχει οδηγίες πώς να γράψετε έναν δικό σας client σε διάφορες γλώσσες, όπως C++, Go, Java, Javascript, .NET, Node.js, PHP, Python και Ruby. Εγώ θα επιλέξω την Go, και θα γράψω γρήγορα ένα πρόχειρο script που μου κάνει list τους IAM users – ότι καναμε δηλαδή και πριν με το aws cli πριν.

package main

import (
	"fmt"

	"github.com/aws/aws-sdk-go/aws"
	"github.com/aws/aws-sdk-go/aws/session"
	"github.com/aws/aws-sdk-go/service/iam"
)

func main() {
	sess, err := session.NewSession(&aws.Config{
		Region: aws.String("eu-central-1")},
	)

	// Create a IAM service client.
	svc := iam.New(sess)

	// List IAM users
	result, err := svc.ListUsers(&iam.ListUsersInput{
		MaxItems: aws.Int64(10),
	})

	if err != nil {
		fmt.Println("Error", err)
		return
	}

	for i, user := range result.Users {
		if user == nil {
			continue
		}
		fmt.Printf("%d UserName %s\n UserId: %s\n Arn: %s\n CreateDate: %v\n PasswordLastUsed: %v \n", i, *user.UserName, *user.UserId, *user.Arn, user.CreateDate, user.PasswordLastUsed)
	}
}

To script θα τραβήξει τα access keys από κει που τα αποθήκευσε νωρίτερα το aws configure. Μπορείτε να το επαληθεύσετε κάνοντας: cat ~/.aws/credentials.

Τρέχουμε το Go script:

$ ./awsclient
0 UserName drpaneas
 UserId: AIDASGYP3OJMQ3MYF5AGV
 Arn: arn:aws:iam::151967724121:user/drpaneas
 CreateDate: 2020-08-24 01:57:54 +0000 UTC
 PasswordLastUsed: 2020-08-24 13:47:07 +0000 UTC

Με αυτό τον τρόπο λοιπόν μπορούμε να γράψουμε έναν δικό μας client και να μιλήσουμε με το AWS. Υπάρχει απίστευτο documentation και παραδείγματα για να κάνετε ό,τι θέλετε. Χρόνο και όρεξη να έχετε ;)

TIP: Στην περίπτωση μου χρειάζεται να κανω login σε διαφορα AWS accounts. Συνεπως υπαρχει φοβος να ξεχαστω καμια φορα και να τρεχω εντολες με το aws στο terminal για το account Β ενώ θα επρεπε να τις τρέχω για στο account A. Για να μην υπαρχει μπερδεμα, μπορείτε να πάτε στο:

vim ~/.aws/credentials
[panos]
aws_access_key_id = βαλε εδω το access key του Πάνου
aws_secret_access_key = βάλε εδώ το secret του Πάνου

[george]
aws_access_key_id = βαλε εδω το access key του Γιώργου
aws_secret_access_key = βάλε εδώ το secret του Γιώργου

Ετσι τώρα οταν τρεχω μία εντολη, πρέπει να διευκρινίζω αναγκαστηκά το profile.
πχ aws --profile=panos iam list-users

Αν θελω να τρεχω εντολες χωρίς να δίνω profile, τότε πρέπει να φτιάξω ένα default profile. πχ αντί για [panos] θα μπορούσα να γράψω [default]. Βεβαια ετσι εχω το προβλημα οτι μπορει να ξεχαστω και να τρεχω ολες τις εντολες στο account μου.

Αντίστοιχα μπορούμε να ρυθμίσουμε και τις regions:

vim ~/.aws/config

[panos]
region = eu-central-1

[george]
region = eu-central-1
3 «Μου αρέσει»

IAM Roles

Το τελευταίο κομμάτι (και τελειώσαμε με το IAM) είναι οι Ρόλοι. Αυτό είναι στην ουσία permissions οχι για άνθρωπο αλλά για μηχάνημα. Οκ, όταν λέω “μηχάνημα” εννοώ κάποιο AWS service, δηλαδή κάποιο από τα s3, EC2, κλπ. Οταν θέλετε να αυτοματοποιήσετε πράγματα, τότε πρέπει το ένα service να μπορεί να μιλάει με το άλλο και να αλλάζει καταστάσεις. Για αυτό το λόγο σκέφτηκαν να φτιάξουν AWS Roles έτσι ώστε να μπορούμε να δώσουμε permissions στα AWS Services, με σκοπό να δουλεύουν αυτόματα μόνα τους χωρίς να μας πρίζουν.

Θέλουμε να σηκώσουμε ένα virtual server, το οποίο είναι EC2 instance (θα μιλήσουμε για αυτό αργότερα). Για να μπορεί αυτό το instance να πειράξει πράγματα στο AWS, πρέπει να του δώσω ένα IAM role. Πάμε να το κάνουμε:

IAM > Roles > Create Role

Μπορούμε να φτιάξουμε Role για 4 πράγματα, αλλά μην σας απασχολεί αυτό για την ώρα. Εμείς είπαμε: θα φτιάξουμε Roles για AWS Services. Οπότε επιλέγουμε AWS Service.

Αυτό το Service μπορεί να είναι οτιδήποτε. Απλά κάντε scroll down και θα δείτε τις επιλογές που έχετε. Σε πρώτη φάση είπαμε θέλουμε έναν ρόλο για EC2:

Screenshot 2020-08-24 at 21.19.47

Στην συνέχεια επιλέγω το policy. Ας πούμε ότι θέλω IAMReadOnlyAccess, οπότε γράφω IAM στο filter για να το βρω πιο εύκολα:

Στα tags δεν βάζω κάτι, οπότε πατάω επόμενο προσπερνώντας τα. Και στο τελευταίο screen όπου μου δείχνει το τελικό review, γράφω το όνομα του ρόλου DemoRoleForEC2.

Για να φτιαχτεί, πατάμε “Create Role”.
Screenshot 2020-08-24 at 21.23.25

Αυτό ήταν, μόλις φτιάξαμε ένα Role για το EC2 Service. Δεν θα το χρησιμοποιήσουμε ακόμα, θα δείτε στη συνέχεια.

Γενικά να ξέρετε: Roles είναι permissions για AWS Services. Τα χρησιμοποιούμε για αυτοματισμούς.

4 «Μου αρέσει»

AWS Budget

Πριν ξεκινήσουμε να σηκώνουμε EC2 instances στο AWS, θα σιγουρευτούμε ότι ξέρουμε να χειριζόμαστε το billing για να έχουμε το κεφάλι μας ήσυχο για παν ενδεχόμενο. Κάνουμε κλικ πάνω δεξιά στο όνομά μας, και επιλέγουμε Billing Dashboard.

Screenshot 2020-09-21 at 13.55.49

Εκεί ενδέχεται να συναντήσουμε το πρώτο μας σφάλμα:

Αυτό συμβαίνει ότι χρησιμοποιώ έναν IAM User και όχι τον root account. Το error απλά δηλώνει ότι ο συγκεκριμένος IAM user δεν έχει access στο billing & cost management dashboard. Πρέπει λοιπόν να συνδεθώ με τον root account και να δώσω permissions στον IAM user.

Συνδεόμαστε λοιπόν με τον root account. Κάνουμε κλικ πάνω του (πάνω δεξία) και επιλέγουμε My account:

Screenshot 2020-09-21 at 14.00.05

Στην σελίδα που θα φορτώσει, πατήστε CTRL+F και ψάξτε για IAM User and Role Access:

Πατήστε στο edit και κάντε Activate IAM Access και τέλος πατήστε το Update κουμπί.
Screenshot 2020-09-21 at 14.02.52

Μόλις το κάνετε θα δείτε το μύνημα:

IAM user/role access to billing information is activated.

Βγαίνουμε τώρα από root, και μπαίνουμε πάλι με τον IAM user. Πάω ξανά στο billing και βλέπω ότι τώρα φορτώνει κανονικά. Κάνοντας λίγο scroll down, βλέπω ότι μέχρι στιγμής δεν έχω χρεωθεί για κάτι:

Αυτό θα αλλάξει σύντομα. Για να σιγουρευτούμε όμως ότι δεν θα υπερβούμε κάποιο συγκεκριμένο ποσό, μπορούμε να φτιάξουμε ένα άνω όριο. Για να το κάνουμε αυτό, επιλέγουμε από αριστερά, Budgets:

Screenshot 2020-09-21 at 14.07.20

Επιλέγουμε Create a budget

To οποίο θα είναι τύπου Cost Budget:

Του δίνουμε ένα όνομα, ό,τι όνομα θέλετε:

Θα είναι ανά μήνα (Monthly period), και θα ανανεώνεται κάθε μήνα (recurring). Βάζω λοιπόν fixed 12 δολλάρια που είναι περίπου 10 Ευρώ:

Συνεχίζουμε πατώντας το επόμενο κουμπί Configure Alerts:

Screenshot 2020-09-21 at 14.11.41

Εκεί θέλω να μου στέλνει ένα mail, αν έχω ξοδέψει το 80% του budget. Βάλτε την διεύθυνση email σας:

Screenshot 2020-09-21 at 14.13.50

Πρόσθεσε και ένα δεύτερο alert, για να κάνει πρόβλεψη στο 80%. Δηλαδή αν την πρωτη εβδομάδα αρχίζω και ξοδεύω πολλά, το Amazon θα προβλέψει ότι κατά πάσα πιθανότητα θα ξεπεράσω το 80% αρκετά γρήγορα, και θα μου στείλει mail να το κοιτάξω – πριν φτάσω το 80%.

Screenshot 2020-09-21 at 14.14.49

Τέλος πατήστε στο Confirm Budget.

Δείτε ότι όλα καλά, και πατάμε Create:
Screenshot 2020-09-21 at 14.17.16

Αυτό ήταν! Μόλις φτιάξατε ένα άνω όριο για το AWS:

Στην περίπτωση που ξεπεράσετε το budget των 10 Ευρώ, μπορείτε να κάνετε κλικ στο ** Bills** στα αριστερά και να δείτε ακριβώς το service το οποίο σας κοστίζει επιπλέον χρήματα.

Screenshot 2020-09-21 at 14.19.51

2 «Μου αρέσει»