Το Amazon S3 είναι μια υπηρεσία που σας επιτρέπει να αποθηκεύετε μεγάλες ποσότητες δεδομένων.
Το Amazon S3 παρέχει πολλές επιλογές για να επιτευχθεί η προστασία των δεδομένων σε κατάσταση αδράνειας. Οι επιλογές περιλαμβάνουν Άδεια (Πολιτική), Κρυπτογράφηση (Πλευρά Πελάτη και Πλευρά Διακομιστή), Έκδοση Κάδου και διαγραφήβάσει MFA. Ο χρήστης μπορεί να ενεργοποιήσει οποιαδήποτε από αυτές τις επιλογές για να επιτύχει την προστασία των δεδομένων. Η αναπαραγωγή δεδομένων είναι μια εσωτερική δυνατότητα της AWS όπου το S3 αναπαράγει αυτόματα κάθε αντικείμενο σε όλες τις Ζώνες Διαθεσιμότητας και η οργάνωση δεν χρειάζεται να την ενεργοποιήσει σε αυτή την περίπτωση.
Με άδειες βάσει πόρων, μπορείτε να ορίσετε άδειες για υποκαταλόγους του κάδου σας ξεχωριστά.
Έκδοση Κάδου και διαγραφή βάσει MFA
Όταν η έκδοση κάδου είναι ενεργοποιημένη, οποιαδήποτε ενέργεια που προσπαθεί να τροποποιήσει ένα αρχείο μέσα σε ένα αρχείο θα δημιουργήσει μια νέα έκδοση του αρχείου, διατηρώντας επίσης το προηγούμενο περιεχόμενο του ίδιου. Επομένως, δεν θα αντικαταστήσει το περιεχόμενό του.
Επιπλέον, η διαγραφή βάσει MFA θα αποτρέψει τις εκδόσεις αρχείων στον κάδο S3 από το να διαγραφούν και επίσης την απενεργοποίηση της Έκδοσης Κάδου, έτσι ώστε ένας επιτιθέμενος να μην μπορεί να τροποποιήσει αυτά τα αρχεία.
Καταγραφές πρόσβασης S3
Είναι δυνατόν να ενεργοποιήσετε την καταγραφή πρόσβασης S3 (η οποία από προεπιλογή είναι απενεργοποιημένη) σε κάποιον κάδο και να αποθηκεύσετε τις καταγραφές σε έναν διαφορετικό κάδο για να γνωρίζετε ποιος έχει πρόσβαση στον κάδο (και οι δύο κάδοι πρέπει να βρίσκονται στην ίδια περιοχή).
Προκαθορισμένα URLs S3
Είναι δυνατόν να δημιουργήσετε ένα προκαθορισμένο URL που μπορεί συνήθως να χρησιμοποιηθεί για πρόσβαση στο συγκεκριμένο αρχείο στον κάδο. Ένα προκαθορισμένο URL φαίνεται έτσι:
Ένα προυπογεγραμμένο URL μπορεί να δημιουργηθεί από το cli χρησιμοποιώντας διαπιστευτήρια ενός κύριου με πρόσβαση στο αντικείμενο (αν ο λογαριασμός που χρησιμοποιείτε δεν έχει πρόσβαση, θα δημιουργηθεί ένα συντομότερο προυπογεγραμμένο URL αλλά θα είναι άχρηστο)
Η μόνη απαιτούμενη άδεια για να δημιουργηθεί μια presigned URL είναι η άδεια που παρέχεται, οπότε για την προηγούμενη εντολή η μόνη άδεια που χρειάζεται ο κύριος είναι s3:GetObject
Είναι επίσης δυνατό να δημιουργηθούν presigned URLs με άλλες άδειες:
DEK σημαίνει Κλειδί Κρυπτογράφησης Δεδομένων και είναι το κλειδί που δημιουργείται πάντα και χρησιμοποιείται για την κρυπτογράφηση των δεδομένων.
Κρυπτογράφηση από τον διακομιστή με κλειδιά διαχειριζόμενα από το S3, SSE-S3
Αυτή η επιλογή απαιτεί ελάχιστη διαμόρφωση και όλη η διαχείριση των κλειδιών κρυπτογράφησης που χρησιμοποιούνται διαχειρίζεται από την AWS. Το μόνο που χρειάζεται να κάνετε είναι να ανεβάσετε τα δεδομένα σας και το S3 θα αναλάβει όλες τις άλλες πτυχές. Κάθε κάδος σε έναν λογαριασμό S3 ανατίθεται σε ένα κλειδί κάδου.
Κρυπτογράφηση:
Δεδομένα Αντικειμένου + δημιουργημένο κλειδί DEK σε απλή μορφή --> Κρυπτογραφημένα δεδομένα (αποθηκευμένα μέσα στο S3)
Δημιουργημένο κλειδί DEK σε απλή μορφή + Κύριο Κλειδί S3 --> Κρυπτογραφημένο DEK (αποθηκευμένο μέσα στο S3) και το κείμενο σε απλή μορφή διαγράφεται από τη μνήμη
Αποκρυπτογράφηση:
Κρυπτογραφημένο DEK + Κύριο Κλειδί S3 --> Κλειδί DEK σε απλή μορφή
Κλειδί DEK σε απλή μορφή + Κρυπτογραφημένα δεδομένα --> Δεδομένα Αντικειμένου
Παρακαλώ σημειώστε ότι σε αυτή την περίπτωση το κλειδί διαχειρίζεται από την AWS (περιστροφή μόνο κάθε 3 χρόνια). Αν χρησιμοποιήσετε το δικό σας κλειδί, θα μπορείτε να περιστρέφετε, να απενεργοποιείτε και να εφαρμόζετε έλεγχο πρόσβασης.
Κρυπτογράφηση από τον διακομιστή με κλειδιά διαχειριζόμενα από το KMS, SSE-KMS
Αυτή η μέθοδος επιτρέπει στο S3 να χρησιμοποιεί την υπηρεσία διαχείρισης κλειδιών για να δημιουργήσει τα κλειδιά κρυπτογράφησης δεδομένων σας. Το KMS σας δίνει πολύ μεγαλύτερη ευελιξία στο πώς διαχειρίζεστε τα κλειδιά σας. Για παράδειγμα, μπορείτε να απενεργοποιήσετε, να περιστρέψετε και να εφαρμόσετε ελέγχους πρόσβασης στο CMK, και να παραγγείλετε κατά της χρήσης τους χρησιμοποιώντας το AWS Cloud Trail.
Κρυπτογράφηση:
Το S3 ζητά κλειδιά δεδομένων από το KMS CMK
Το KMS χρησιμοποιεί ένα CMK για να δημιουργήσει το ζεύγος DEK σε απλή μορφή και DEK κρυπτογραφημένο και τα στέλνει στο S3
Το S3 χρησιμοποιεί το κλειδί σε απλή μορφή για να κρυπτογραφήσει τα δεδομένα, αποθηκεύει τα κρυπτογραφημένα δεδομένα και το κρυπτογραφημένο κλειδί και διαγράφει από τη μνήμη το κλειδί σε απλή μορφή
Αποκρυπτογράφηση:
Το S3 ζητά από το KMS να αποκρυπτογραφήσει το κρυπτογραφημένο κλειδί δεδομένων του αντικειμένου
Το KMS αποκρυπτογραφεί το κλειδί δεδομένων με το CMK και το στέλνει πίσω στο S3
Το S3 αποκρυπτογραφεί τα δεδομένα του αντικειμένου
Κρυπτογράφηση από τον διακομιστή με κλειδιά που παρέχονται από τον πελάτη, SSE-C
Αυτή η επιλογή σας δίνει την ευκαιρία να παρέχετε το δικό σας κύριο κλειδί που μπορεί ήδη να χρησιμοποιείτε εκτός της AWS. Το κλειδί που παρέχεται από τον πελάτη θα σταλεί μαζί με τα δεδομένα σας στο S3, όπου το S3 θα εκτελέσει την κρυπτογράφηση για εσάς.
Κρυπτογράφηση:
Ο χρήστης στέλνει τα δεδομένα του αντικειμένου + Κλειδί Πελάτη στο S3
Το κλειδί πελάτη χρησιμοποιείται για να κρυπτογραφήσει τα δεδομένα και τα κρυπτογραφημένα δεδομένα αποθηκεύονται
μια αλατισμένη τιμή HMAC του κλειδιού πελάτη αποθηκεύεται επίσης για μελλοντική επικύρωση του κλειδιού
το κλειδί πελάτη διαγράφεται από τη μνήμη
Αποκρυπτογράφηση:
Ο χρήστης στέλνει το κλειδί πελάτη
Το κλειδί επικυρώνεται σε σχέση με την αποθηκευμένη τιμή HMAC
Το κλειδί που παρέχεται από τον πελάτη χρησιμοποιείται στη συνέχεια για να αποκρυπτογραφήσει τα δεδομένα
Κρυπτογράφηση από τον πελάτη με KMS, CSE-KMS
Παρόμοια με το SSE-KMS, αυτό χρησιμοποιεί επίσης την υπηρεσία διαχείρισης κλειδιών για να δημιουργήσει τα κλειδιά κρυπτογράφησης δεδομένων σας. Ωστόσο, αυτή τη φορά το KMS καλείται μέσω του πελάτη και όχι του S3. Η κρυπτογράφηση πραγματοποιείται από τον πελάτη και τα κρυπτογραφημένα δεδομένα αποστέλλονται στο S3 για αποθήκευση.
Κρυπτογράφηση:
Ο πελάτης ζητά ένα κλειδί δεδομένων από το KMS
Το KMS επιστρέφει το κλειδί DEK σε απλή μορφή και το κρυπτογραφημένο DEK με το CMK
Και τα δύο κλειδιά επιστρέφονται
Ο πελάτης στη συνέχεια κρυπτογραφεί τα δεδομένα με το κλειδί DEK σε απλή μορφή και στέλνει στο S3 τα κρυπτογραφημένα δεδομένα + το κρυπτογραφημένο DEK (το οποίο αποθηκεύεται ως μεταδεδομένα των κρυπτογραφημένων δεδομένων μέσα στο S3)
Αποκρυπτογράφηση:
Τα κρυπτογραφημένα δεδομένα με το κρυπτογραφημένο DEK αποστέλλονται στον πελάτη
Ο πελάτης ζητά από το KMS να αποκρυπτογραφήσει το κρυπτογραφημένο κλειδί χρησιμοποιώντας το CMK και το KMS στέλνει πίσω το κλειδί DEK σε απλή μορφή
Ο πελάτης μπορεί τώρα να αποκρυπτογραφήσει τα κρυπτογραφημένα δεδομένα
Κρυπτογράφηση από τον πελάτη με κλειδιά που παρέχονται από τον πελάτη, CSE-C
Χρησιμοποιώντας αυτόν τον μηχανισμό, μπορείτε να χρησιμοποιήσετε τα δικά σας παρεχόμενα κλειδιά και να χρησιμοποιήσετε έναν πελάτη AWS-SDK για να κρυπτογραφήσετε τα δεδομένα σας πριν τα στείλετε στο S3 για αποθήκευση.
Κρυπτογράφηση:
Ο πελάτης δημιουργεί ένα DEK και κρυπτογραφεί τα δεδομένα σε απλή μορφή
Στη συνέχεια, χρησιμοποιώντας το δικό του προσαρμοσμένο CMK, κρυπτογραφεί το DEK
υποβάλλει τα κρυπτογραφημένα δεδομένα + το κρυπτογραφημένο DEK στο S3 όπου αποθηκεύεται
Αποκρυπτογράφηση:
Το S3 στέλνει τα κρυπτογραφημένα δεδομένα και το DEK
Καθώς ο πελάτης έχει ήδη το CMK που χρησιμοποιήθηκε για να κρυπτογραφήσει το DEK, αποκρυπτογραφεί το DEK και στη συνέχεια χρησιμοποιεί το κλειδί DEK σε απλή μορφή για να αποκρυπτογραφήσει τα δεδομένα
Αναγνώριση
Ένας από τους παραδοσιακούς κύριους τρόπους για να παραβιαστούν οι οργανισμοί AWS ξεκινά με την παραβίαση δημόσια προσβάσιμων κάδων. Μπορείτε να βρείτεδημόσιους αναγνωριστές κάδων σε αυτή τη σελίδα.
# Get buckets ACLsawss3apiget-bucket-acl--bucket<bucket-name>awss3apiget-object-acl--bucket<bucket-name>--keyflag# Get policyawss3apiget-bucket-policy--bucket<bucket-name>awss3apiget-bucket-policy-status--bucket<bucket-name>#if it's public# list S3 buckets associated with a profileawss3lsawss3apilist-buckets# list content of bucket (no creds)awss3lss3://bucket-name--no-sign-requestawss3lss3://bucket-name--recursive# list content of bucket (with creds)awss3lss3://bucket-nameawss3apilist-objects-v2--bucket<bucket-name>awss3apilist-objects--bucket<bucket-name>awss3apilist-object-versions--bucket<bucket-name># copy local folder to S3awss3cpMyFolders3://bucket-name--recursive# deleteawss3rbs3://bucket-name–-force# download a whole S3 bucketawss3syncs3://<bucket>/.# move S3 bucket to different locationawss3syncs3://oldbuckets3://newbucket--source-regionus-west-1# list the sizes of an S3 bucket and its contentsawss3apilist-objects--bucketBUCKETNAME--outputjson--query"[sum(Contents[].Size), length(Contents[])]"# Update Bucket policyawss3apiput-bucket-policy--policyfile:///root/policy.json--bucket<bucket-name>##JSON policy example{"Id":"Policy1568185116930","Version":"2012-10-17","Statement": [{"Sid":"Stmt1568184932403","Action": ["s3:ListBucket"],"Effect":"Allow","Resource":"arn:aws:s3:::welcome","Principal":"*"},{"Sid":"Stmt1568185007451","Action": ["s3:GetObject"],"Effect":"Allow","Resource":"arn:aws:s3:::welcome/*","Principal":"*"}]}# Update bucket ACLawss3apiget-bucket-acl--bucket<bucket-name># Way 1 to get the ACLawss3apiput-bucket-acl--bucket<bucket-name>--access-control-policyfile://acl.jsonawss3apiget-object-acl--bucket<bucket-name>--keyflag#Way 2 to get the ACLawss3apiput-object-acl--bucket<bucket-name>--keyflag--access-control-policyfile://objacl.json##JSON ACL example## Make sure to modify the Owner’s displayName and ID according to the Object ACL you retrieved.{"Owner":{"DisplayName":"<DisplayName>","ID":"<ID>"},"Grants": [{"Grantee":{"Type":"Group","URI":"http://acs.amazonaws.com/groups/global/AuthenticatedUsers"},"Permission":"FULL_CONTROL"}]}## An ACL should give you the permission WRITE_ACP to be able to put a new ACL
dual-stack
Μπορείτε να αποκτήσετε πρόσβαση σε ένα S3 bucket μέσω ενός dual-stack endpoint χρησιμοποιώντας ένα virtual hosted-style ή ένα path-style endpoint name. Αυτά είναι χρήσιμα για την πρόσβαση στο S3 μέσω IPv6.
Οι dual-stack endpoints χρησιμοποιούν την εξής σύνταξη:
bucketname.s3.dualstack.aws-region.amazonaws.com
s3.dualstack.aws-region.amazonaws.com/bucketname
Privesc
Στην επόμενη σελίδα μπορείτε να ελέγξετε πώς να καταχραστείτε τις άδειες S3 για να κλιμακώσετε τα προνόμια:
Σύμφωνα με αυτή την έρευνα ήταν δυνατό να αποθηκευτεί η απάντηση ενός αυθαίρετου bucket σαν να ανήκε σε ένα διαφορετικό. Αυτό θα μπορούσε να έχει καταχραστεί για να αλλάξει, για παράδειγμα, τις απαντήσεις αρχείων javascript και να συμβιβάσει αυθαίρετες σελίδες χρησιμοποιώντας το S3 για να αποθηκεύσει στατικό κώδικα.
Amazon Athena
Η Amazon Athena είναι μια διαδραστική υπηρεσία ερωτημάτων που διευκολύνει την ανάλυση δεδομένων απευθείας στην Υπηρεσία Απλής Αποθήκευσης της Amazon (Amazon S3) χρησιμοποιώντας τυπικό SQL.
Πρέπει να ετοιμάσετε έναν πίνακα σχεσιακής βάσης δεδομένων με τη μορφή του περιεχομένου που θα εμφανιστεί στα παρακολουθούμενα S3 buckets. Και στη συνέχεια, η Amazon Athena θα είναι σε θέση να γεμίσει τη βάση δεδομένων από τα logs, ώστε να μπορείτε να κάνετε ερωτήσεις.
Η Amazon Athena υποστηρίζει την ικανότητα να ερωτά δεδομένα S3 που είναι ήδη κρυπτογραφημένα και αν έχει ρυθμιστεί να το κάνει, η Athena μπορεί επίσης να κρυπτογραφήσει τα αποτελέσματα της ερώτησης που μπορούν στη συνέχεια να αποθηκευτούν στο S3.
Αυτή η κρυπτογράφηση των αποτελεσμάτων είναι ανεξάρτητη από τα υποκείμενα κρυπτογραφημένα δεδομένα S3, πράγμα που σημαίνει ότι ακόμη και αν τα δεδομένα S3 δεν είναι κρυπτογραφημένα, τα αποτελέσματα της ερώτησης μπορούν να είναι κρυπτογραφημένα. Μερικά σημεία που πρέπει να γνωρίζετε είναι ότι η Amazon Athena υποστηρίζει μόνο δεδομένα που έχουν κρυπτογραφηθεί με τις εξής μεθόδους κρυπτογράφησης S3, SSE-S3, SSE-KMS και CSE-KMS.
Η SSE-C και η CSE-E δεν υποστηρίζονται. Επιπλέον, είναι σημαντικό να κατανοήσετε ότι η Amazon Athena θα εκτελεί μόνο ερωτήσεις κατά κρυπτογραφημένα αντικείμενα που βρίσκονται στην ίδια περιοχή με την ερώτηση αυτή καθαυτή. Εάν χρειάζεστε να κάνετε ερώτηση σε δεδομένα S3 που έχουν κρυπτογραφηθεί χρησιμοποιώντας KMS, τότε απαιτούνται συγκεκριμένες άδειες από τον χρήστη Athena για να τους επιτραπεί να εκτελέσουν την ερώτηση.
Enumeration
# Get catalogsawsathenalist-data-catalogs# Get databases inside catalogawsathenalist-databases--catalog-name<catalog-name>awsathenalist-table-metadata--catalog-name<catalog-name>--database-name<db-name># Get query executions, queries and resultsawsathenalist-query-executionsawsathenaget-query-execution--query-execution-id<id># Get query and meta of resultsawsathenaget-query-results--query-execution-id<id># This will rerun the query and get the results# Get workgroups & Prepared statementsawsathenalist-work-groupsawsathenalist-prepared-statements--work-group<wg-name>awsathenaget-prepared-statement--statement-name<name>--work-group<wg-name># Run queryawsathenastart-query-execution--query-string<query>