Azure Storage Accounts είναι θεμελιώδεις υπηρεσίες στο Microsoft Azure που παρέχουν κλιμακούμενη, ασφαλή και υψηλής διαθεσιμότητας cloud αποθήκευση για διάφορους τύπους δεδομένων, συμπεριλαμβανομένων των blobs (binary large objects), files, queues και tables. Λειτουργούν ως containers που ομαδοποιούν αυτές τις διαφορετικές υπηρεσίες αποθήκευσης κάτω από ένα μοναδικό namespace για εύκολη διαχείριση.
Κύριες επιλογές διαμόρφωσης:
Κάθε storage account πρέπει να έχει ένα μοναδικό όνομα σε όλο το Azure.
Κάθε storage account αναπτύσσεται σε μια περιοχή (region) ή σε μια επεκταμένη ζώνη Azure
Είναι δυνατή η επιλογή της premium έκδοσης του storage account για καλύτερες επιδόσεις
Είναι δυνατή η επιλογή ανάμεσα σε 4 τύπους redundancy για προστασία από αποτυχίες rack, drive και datacenter.
Επιλογές διαμόρφωσης ασφάλειας:
Require secure transfer for REST API operations: Απαιτεί TLS σε οποιαδήποτε επικοινωνία με το storage
Allows enabling anonymous access on individual containers: Αν δεν είναι ενεργό, δεν θα είναι δυνατό να ενεργοποιηθεί anonymous access στο μέλλον
Enable storage account key access: Αν δεν είναι ενεργό, η πρόσβαση με Shared Keys θα απαγορεύεται
Minimum TLS version
Permitted scope for copy operations: Να επιτρέπεται από οποιοδήποτε storage account, από οποιοδήποτε storage account μέσα στον ίδιο Entra tenant ή από storage account με private endpoints στο ίδιο virtual network.
Blob Storage options:
Allow cross-tenant replication
Access tier: Hot (συχνά προσπελάσιμα δεδομένα), Cool και Cold (σπάνια προσπελάσιμα δεδομένα)
Networking options:
Network access:
Allow from all networks
Allow from selected virtual networks and IP addresses
Disable public access and use private access
Private endpoints: Επιτρέπει ιδιωτική σύνδεση στο storage account από ένα virtual network
Επιλογές προστασίας δεδομένων:
Point-in-time restore for containers: Επιτρέπει την αποκατάσταση containers σε προηγούμενη κατάσταση
Απαιτεί την ενεργοποίηση versioning, change feed και blob soft delete.
Enable soft delete for blobs: Ενεργοποιεί περίοδο διατήρησης σε ημέρες για διαγεγραμμένα blobs (ακόμα και αν έχουν overwritten)
Enable soft delete for containers: Ενεργοποιεί περίοδο διατήρησης σε ημέρες για διαγραμμένα containers
Enable soft delete for file shares: Ενεργοποιεί περίοδο διατήρησης σε ημέρες για διαγραμμένα file shares
Enable versioning for blobs: Διατηρεί προηγούμενες εκδόσεις των blobs
Enable blob change feed: Διατηρεί logs για δημιουργία, τροποποίηση και διαγραφή αλλαγών σε blobs
Enable version-level immutability support: Σας επιτρέπει να ορίσετε πολιτική διατήρησης με βάση τον χρόνο σε επίπεδο account που θα εφαρμόζεται σε όλες τις εκδόσεις των blobs.
Η version-level immutability support και το point-in-time restore for containers δεν μπορούν να ενεργοποιηθούν ταυτόχρονα.
Επιλογές κρυπτογράφησης:
Encryption type: Είναι δυνατό να χρησιμοποιηθούν Microsoft-managed keys (MMK) ή Customer-managed keys (CMK)
Enable infrastructure encryption: Επιτρέπει τη διπλή κρυπτογράφηση των δεδομένων “για περισσότερη ασφάλεια”
Static websites σερβίρονται από το ειδικό container $web μέσω ενός region-specific endpoint όπως https://<account>.z13.web.core.windows.net/.
Το container $web μπορεί να αναφέρει publicAccess: null μέσω του blob API, αλλά τα αρχεία εξακολουθούν να είναι προσβάσιμα μέσω του static site endpoint, οπότε τοποθετώντας config/IaC artifacts εκεί μπορεί να leak secrets.
Γρήγορη ροή ελέγχου:
# Identify storage accounts with static website hosting enabled
az storage blob service-properties show --account-name <acc-name> --auth-mode login
# Enumerate containers (including $web) and their public flags
az storage container list --account-name <acc-name> --auth-mode login
# List files served by the static site even when publicAccess is null
az storage blob list --container-name '$web' --account-name <acc-name> --auth-mode login
# Pull suspicious files directly (e.g., IaC tfvars containing secrets/SAS)
az storage blob download -c '$web' --name iac/terraform.tfvars --file /dev/stdout --account-name <acc-name> --auth-mode login
Εντοπισμός storage accounts που μπορούν να εκθέσουν δεδομένα: az storage account list | jq -r '.[] | select(.properties.allowBlobPublicAccess==true) | .name'. Αν allowBlobPublicAccess είναι false δεν μπορείτε να κάνετε τα containers δημόσια.
Επιθεώρηση επικίνδυνων storage accounts για επιβεβαίωση του flag και άλλων αδύναμων ρυθμίσεων: az storage account show --name <acc> --query '{allow:properties.allowBlobPublicAccess, minTls:properties.minimumTlsVersion}'.
Απαρίθμηση έκθεσης σε επίπεδο container όπου το flag είναι ενεργοποιημένο:
az storage container list --account-name <acc> \
--query '[].{name:name, access:properties.publicAccess}'
"Blob": επιτρέπονται ανώνυμες αναγνώσεις μόνο όταν είναι γνωστό το όνομα του blob (χωρίς δυνατότητα λίστας).
"Container": ανώνυμη λίστα + ανάγνωση όλων των blob.
null: ιδιωτικό· απαιτείται έλεγχος ταυτότητας.
Αποδείξτε πρόσβαση χωρίς διαπιστευτήρια:
Αν publicAccess είναι Container, η ανώνυμη λίστα λειτουργεί: curl "https://<acc>.blob.core.windows.net/<container>?restype=container&comp=list".
Για τόσο το Blob όσο και το Container, η ανώνυμη λήψη blob λειτουργεί όταν το όνομα είναι γνωστό:
az storage blob download -c <container> -n <blob> --account-name <acc> --file /dev/stdout
# or via raw HTTP
curl "https://<acc>.blob.core.windows.net/<container>/<blob>"
Είναι δυνατό να generate Shared Keys υπογεγραμμένα με τα access keys για να εξουσιοδοτείται η πρόσβαση σε συγκεκριμένους πόρους μέσω ενός signed URL.
Note
Σημειώστε ότι το τμήμα CanonicalizedResource αντιπροσωπεύει τον πόρο των storage services (URI). Και αν οποιοδήποτε τμήμα στο URL είναι encoded, θα πρέπει επίσης να είναι encoded μέσα στο CanonicalizedResource.
Note
Αυτό χρησιμοποιείται από προεπιλογή από το az cli για την πιστοποίηση των requests. Για να το κάνετε να χρησιμοποιήσει τα credentials του Entra ID principal, υποδείξτε την παράμετρο --auth-mode login.
Είναι δυνατό να παραχθεί ένα shared key για blob, queue και file services υπογράφοντας τις παρακάτω πληροφορίες:
Shared Access Signatures (SAS) είναι ασφαλείς, χρονικά περιορισμένα URLs που παρέχουν συγκεκριμένα δικαιώματα πρόσβασης σε πόρους σε έναν Azure Storage λογαριασμό χωρίς να αποκαλύπτουν τα κλειδιά πρόσβασης του λογαριασμού. Ενώ τα κλειδιά πρόσβασης παρέχουν πλήρη διοικητική πρόσβαση σε όλους τους πόρους, το SAS επιτρέπει λεπτομερή έλεγχο καθορίζοντας δικαιώματα (όπως ανάγνωση ή εγγραφή) και ορίζοντας χρόνο λήξης.
User delegation SAS: Δημιουργείται από έναν Entra ID principal ο οποίος θα υπογράψει το SAS και θα εκχωρήσει τα δικαιώματα από τον χρήστη στο SAS. Μπορεί να χρησιμοποιηθεί μόνο με blob and data lake storage (docs). Είναι δυνατό να ανακληθούν όλα τα δημιουργημένα user delegated SAS.
Είναι δυνατό να δημιουργηθεί ένα delegation SAS με “περισσότερα” δικαιώματα από αυτά που έχει ο χρήστης. Ωστόσο, αν ο principal δεν διαθέτει αυτά τα δικαιώματα, δεν θα λειτουργήσει (no privesc).
Service SAS: Υπογράφεται χρησιμοποιώντας ένα από τα κλειδιά πρόσβασης του storage account. Μπορεί να χρησιμοποιηθεί για να δώσει πρόσβαση σε συγκεκριμένους πόρους σε μία μόνο υπηρεσία αποθήκευσης. Εάν το κλειδί ανανεωθεί, το SAS θα σταματήσει να λειτουργεί.
Account SAS: Επίσης υπογράφεται με ένα από τα κλειδιά πρόσβασης του storage account. Παρέχει πρόσβαση σε πόρους σε υπηρεσίες ενός storage account (Blob, Queue, Table, File) και μπορεί να περιλαμβάνει λειτουργίες σε επίπεδο υπηρεσίας.
A SAS URL signed by an access key looks like this:
Κατά τη δημιουργία ενός SAS πρέπει να δηλωθούν τα δικαιώματα που θα παραχωρεί. Ανάλογα με το αντικείμενο πάνω στο οποίο δημιουργείται το SAS, μπορεί να περιλαμβάνονται διαφορετικά δικαιώματα. Για παράδειγμα:
Το Azure Blob Storage πλέον υποστηρίζει το SSH File Transfer Protocol (SFTP), επιτρέποντας ασφαλή μεταφορά και διαχείριση αρχείων απευθείας στο Blob Storage χωρίς να απαιτούνται προσαρμοσμένες λύσεις ή προϊόντα τρίτων.
Protocol Support: Το SFTP λειτουργεί με λογαριασμούς Blob Storage που έχουν ενεργοποιημένο hierarchical namespace (HNS). Αυτό οργανώνει τα blobs σε φακέλους και υποφακέλους για ευκολότερη πλοήγηση.
Security: Το SFTP χρησιμοποιεί τοπικές ταυτότητες χρηστών για αυθεντικοποίηση και δεν ενσωματώνεται με RBAC ή ABAC. Κάθε τοπικός χρήστης μπορεί να αυθεντικοποιηθεί μέσω:
Azure-generated passwords
Public-private SSH key pairs
Granular Permissions: Δικαιώματα όπως Read, Write, Delete και List μπορούν να ανατεθούν σε τοπικούς χρήστες για έως και 100 containers.
Networking Considerations: Οι SFTP συνδέσεις πραγματοποιούνται μέσω της θύρας 22. Το Azure υποστηρίζει ρυθμίσεις δικτύου όπως firewalls, private endpoints ή virtual networks για την ασφάλεια της SFTP κίνησης.
Hierarchical Namespace: Το HNS πρέπει να είναι ενεργοποιημένο κατά τη δημιουργία του storage account.
Supported Encryption: Απαιτεί κρυπτογραφικούς αλγόριθμους εγκεκριμένους από το Microsoft Security Development Lifecycle (SDL) (π.χ., rsa-sha2-256, ecdsa-sha2-nistp256).
SFTP Configuration:
Ενεργοποίηση SFTP στο storage account.
Δημιουργία τοπικών ταυτοτήτων χρηστών με κατάλληλα δικαιώματα.
Διαμόρφωση home directories για τους χρήστες ώστε να οριστεί η αρχική τους θέση εντός του container.
az storage blob show –account-name –container-name –sas-token ‘se=2024-12-31T23%3A59%3A00Z&sp=racwdxyltfmei&sv=2022-11-02&sr=c&sig=ym%2Bu%2BQp5qqrPotIK5/rrm7EMMxZRwF/hMWLfK1VWy6E%3D’ –name ‘asd.txt’