AWS - Elastic Beanstalk Enum
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Η Amazon Elastic Beanstalk παρέχει μια απλοποιημένη πλατφόρμα για την ανάπτυξη, διαχείριση και κλιμάκωση διαδικτυακών εφαρμογών και υπηρεσιών. Υποστηρίζει μια ποικιλία γλωσσών προγραμματισμού και πλαισίων, όπως Java, .NET, PHP, Node.js, Python, Ruby και Go, καθώς και κοντέινερ Docker. Η υπηρεσία είναι συμβατή με ευρέως χρησιμοποιούμενους διακομιστές όπως Apache, Nginx, Passenger και IIS.
Η Elastic Beanstalk παρέχει έναν απλό και ευέλικτο τρόπο για να αναπτύξετε τις εφαρμογές σας στο AWS cloud, χωρίς να χρειάζεται να ανησυχείτε για την υποκείμενη υποδομή. Αυτόματα διαχειρίζεται τις λεπτομέρειες της παροχής ικανότητας, της εξισορρόπησης φόρτου, της κλιμάκωσης και της παρακολούθησης της υγείας της εφαρμογής, επιτρέποντάς σας να εστιάσετε στη συγγραφή και ανάπτυξη του κώδικά σας.
Η υποδομή που δημιουργείται από την Elastic Beanstalk διαχειρίζεται από Autoscaling Groups σε EC2 (με έναν εξισορροπητή φόρτου). Αυτό σημαίνει ότι στο τέλος της ημέρας, αν συμβιβάσετε τον διακομιστή, θα πρέπει να γνωρίζετε για το EC2:
Επιπλέον, αν χρησιμοποιείται Docker, είναι δυνατή η χρήση του ECS.
Στην AWS Elastic Beanstalk, οι έννοιες της "εφαρμογής" και του "περιβάλλοντος" εξυπηρετούν διαφορετικούς σκοπούς και έχουν διακριτούς ρόλους στη διαδικασία ανάπτυξης.
Μια εφαρμογή στην Elastic Beanstalk είναι ένα λογικό δοχείο για τον πηγαίο κώδικα της εφαρμογής σας, τα περιβάλλοντα και τις ρυθμίσεις. Ομαδοποιεί διαφορετικές εκδόσεις του κώδικα της εφαρμογής σας και σας επιτρέπει να τις διαχειρίζεστε ως μία οντότητα.
Όταν δημιουργείτε μια εφαρμογή, παρέχετε ένα όνομα και περιγραφή, αλλά δεν παρέχονται πόροι σε αυτό το στάδιο. Είναι απλώς ένας τρόπος οργάνωσης και διαχείρισης του κώδικα και των σχετικών πόρων σας.
Μπορείτε να έχετε πολλές εκδόσεις εφαρμογής μέσα σε μια εφαρμογή. Κάθε έκδοση αντιστοιχεί σε μια συγκεκριμένη έκδοση του κώδικά σας, η οποία μπορεί να αναπτυχθεί σε ένα ή περισσότερα περιβάλλοντα.
Ένα περιβάλλον είναι μια παρεχόμενη παρουσία της εφαρμογής σας που εκτελείται στην υποδομή AWS. Είναι όπου αναπτύσσεται και εκτελείται ο κώδικας της εφαρμογής σας. Η Elastic Beanstalk παρέχει τους απαραίτητους πόρους (π.χ., EC2 instances, load balancers, auto-scaling groups, βάσεις δεδομένων) με βάση τη ρύθμιση του περιβάλλοντος.
Κάθε περιβάλλον εκτελεί μια μόνο έκδοση της εφαρμογής σας, και μπορείτε να έχετε πολλαπλά περιβάλλοντα για διαφορετικούς σκοπούς, όπως ανάπτυξη, δοκιμή, staging και παραγωγή.
Όταν δημιουργείτε ένα περιβάλλον, επιλέγετε μια πλατφόρμα (π.χ., Java, .NET, Node.js, κ.λπ.) και έναν τύπο περιβάλλοντος (π.χ., web server ή worker). Μπορείτε επίσης να προσαρμόσετε τη ρύθμιση του περιβάλλοντος για να ελέγξετε διάφορες πτυχές της υποδομής και των ρυθμίσεων της εφαρμογής.
Web Server Environment: Είναι σχεδιασμένο να φιλοξενεί και να εξυπηρετεί διαδικτυακές εφαρμογές και APIs. Αυτές οι εφαρμογές συνήθως διαχειρίζονται εισερχόμενα HTTP/HTTPS αιτήματα. Το περιβάλλον web server παρέχει πόρους όπως EC2 instances, load balancers, και auto-scaling groups για να διαχειρίζεται την εισερχόμενη κίνηση, να διαχειρίζεται την ικανότητα και να εξασφαλίζει την υψηλή διαθεσιμότητα της εφαρμογής.
Worker Environment: Είναι σχεδιασμένο να επεξεργάζεται εργασίες φόντου, οι οποίες είναι συχνά χρονοβόρες ή απαιτητικές σε πόρους και δεν απαιτούν άμεσες απαντήσεις στους πελάτες. Το περιβάλλον worker παρέχει πόρους όπως EC2 instances και auto-scaling groups, αλλά δεν έχει εξισορροπητή φόρτου καθώς δεν διαχειρίζεται άμεσα HTTP/HTTPS αιτήματα. Αντίθετα, καταναλώνει εργασίες από μια Amazon Simple Queue Service (SQS) queue, η οποία λειτουργεί ως buffer μεταξύ του περιβάλλοντος worker και των εργασιών που επεξεργάζεται.
Όταν δημιουργείτε μια εφαρμογή στο Beanstalk, υπάρχουν 3 πολύ σημαντικές επιλογές ασφάλειας για να επιλέξετε:
EC2 key pair: Αυτό θα είναι το SSH key που θα μπορεί να έχει πρόσβαση στα EC2 instances που εκτελούν την εφαρμογή.
IAM instance profile: Αυτό είναι το instance profile που θα έχουν τα instances (IAM privileges).
Ο αυτοματοποιημένος ρόλος ονομάζεται aws-elasticbeanstalk-ec2-role
και έχει κάποιες ενδιαφέρουσες προσβάσεις σε όλα τα ECS, όλα τα SQS, DynamoDB elasticbeanstalk και elasticbeanstalk S3 χρησιμοποιώντας τις διαχειριζόμενες πολιτικές AWS: AWSElasticBeanstalkWebTier, AWSElasticBeanstalkMulticontainerDocker, AWSElasticBeanstalkWorkerTier.
Service role: Αυτός είναι ο ρόλος που θα χρησιμοποιήσει η υπηρεσία AWS για να εκτελέσει όλες τις απαραίτητες ενέργειες. Όσο γνωρίζω, ένας κανονικός χρήστης AWS δεν μπορεί να έχει πρόσβαση σε αυτόν τον ρόλο.
Αυτός ο ρόλος που δημιουργείται από την AWS ονομάζεται aws-elasticbeanstalk-service-role
και χρησιμοποιεί τις διαχειριζόμενες πολιτικές AWS AWSElasticBeanstalkEnhancedHealth και AWSElasticBeanstalkManagedUpdatesCustomerRolePolicy
Από προεπιλογή, η έκδοση μεταδεδομένων 1 είναι απενεργοποιημένη:
Τα δεδομένα του Beanstalk αποθηκεύονται σε ένα S3 bucket με το εξής όνομα: elasticbeanstalk-<region>-<acc-id>
(αν δημιουργήθηκε στην κονσόλα AWS). Μέσα σε αυτό το bucket θα βρείτε τον ανεβασμένο πηγαίο κώδικα της εφαρμογής.
Η διεύθυνση URL της δημιουργηθείσας ιστοσελίδας είναι http://<webapp-name>-env.<random>.<region>.elasticbeanstalk.com/
Αν αποκτήσετε πρόσβαση ανάγνωσης στο bucket, μπορείτε να διαβάσετε τον πηγαίο κώδικα και ακόμη και να βρείτε ευαίσθητα διαπιστευτήρια σε αυτό.
Αν αποκτήσετε πρόσβαση εγγραφής στο bucket, θα μπορούσατε να τροποποιήσετε τον πηγαίο κώδικα για να συμβιβάσετε τον ρόλο IAM που χρησιμοποιεί η εφαρμογή την επόμενη φορά που θα εκτελείται.
Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)