Azure Storage Accounts su fundamentalne usluge u Microsoft Azure koje obezbeđuju skalabilno, sigurno i visoko dostupno cloud skladištenje za razne tipove podataka, uključujući blobs (binary large objects), files, queues, i tables. Služe kao kontejneri koji grupišu ove različite storage servise pod jednim namespace-om radi lakšeg upravljanja.
Glavne opcije konfiguracije:
Svaki storage account mora imati uniq name across all Azure.
Svaki storage account je deploy-ovan u region ili u Azure extended zone
Moguće je odabrati premium verziju storage account-a za bolje performanse
Moguće je izabrati među 4 types of redundancy to protect protiv rack, drive i datacenter failures.
Opcije bezbednosne konfiguracije:
Require secure transfer for REST API operations: Zahteva TLS u svakoj komunikaciji sa storage-om
Allows enabling anonymous access on individual containers: Ako nije omogućeno, neće biti moguće omogućiti anonymous access u budućnosti
Enable storage account key access: Ako nije, pristup pomoću Shared Keys će biti zabranjen
Minimum TLS version
Permitted scope for copy operations: Dozvoljeno sa bilo kog storage account-a, sa bilo kog storage account-a iz istog Entra tenant-a ili sa storage account-a sa private endpoints u istoj virtualnoj mreži.
Blob Storage options:
Allow cross-tenant replication
Access tier: Hot (često pristupani podaci), Cool i Cold (retko pristupani podaci)
Dozvoljeno sa izabranih virtualnih mreža i IP adresa
Onemogući javni pristup i koristi privatni pristup
Private endpoints: Omogućava privatnu konekciju do storage account-a iz virtualne mreže
Opcije zaštite podataka:
Point-in-time restore for containers: Dozvoljava vraćanje containera u ranije stanje
Zahteva da su enabled versioning, change feed, i blob soft delete.
Enable soft delete for blobs: Omogućava period zadržavanja u danima za obrisane blobs (čak i prepisane)
Enable soft delete for containers: Omogućava period zadržavanja u danima za obrisane containere
Enable soft delete for file shares: Omogućava period zadržavanja u danima za obrisane file shares
Enable versioning for blobs: Čuva prethodne verzije vaših blobs
Enable blob change feed: Čuva logove kreiranja, modifikacije i brisanja promena za blobs
Enable version-level immutability support: Omogućava postavljanje vremenski zasnovane politike zadržavanja na nivou naloga koja će se primenjivati na sve verzije blobs.
Version-level immutability support i point-in-time restore for containers ne mogu biti enabled istovremeno.
Opcije konfiguracije enkripcije:
Encryption type: Moguće je koristiti Microsoft-managed keys (MMK) ili Customer-managed keys (CMK)
Enable infrastructure encryption: Omogućava dvostruku enkripciju podataka “for more security”
Static websites are served from the special $web container over a region-specific endpoint such as https://<account>.z13.web.core.windows.net/.
The $web container may report publicAccess: null via the blob API, but files are still reachable through the static site endpoint, so dropping config/IaC artifacts there can leak secrets.
Brzi audit workflow:
# 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
Pronađite storage naloge koji mogu izložiti podatke: az storage account list | jq -r '.[] | select(.properties.allowBlobPublicAccess==true) | .name'. Ako je allowBlobPublicAccessfalse, ne možete postaviti kontejnere kao javne.
Ispitajte rizične naloge da potvrdite postavku i druga slaba podešavanja: az storage account show --name <acc> --query '{allow:properties.allowBlobPublicAccess, minTls:properties.minimumTlsVersion}'.
Enumerišite izloženost na nivou kontejnera gde je opcija omogućena:
az storage container list --account-name <acc> \
--query '[].{name:name, access:properties.publicAccess}'
"Blob": anonimno čitanje dozvoljeno samo kada je ime bloba poznato (bez listanja).
"Container": anonimno listanje + čitanje svakog bloba.
null: privatno; potrebna autentifikacija.
Dokaži pristup bez kredencijala:
Ako je publicAccessContainer, anonimno listanje radi: curl "https://<acc>.blob.core.windows.net/<container>?restype=container&comp=list".
Za oba, Blob i Container, anonimno preuzimanje bloba radi kada je ime poznato:
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>"
Moguće je generate Shared Keys potpisane access keys-ovima da bi se autorizovao pristup određenim resursima preko potpisanog URL-a.
Note
Imajte na umu da deo CanonicalizedResource predstavlja resurs storage servisa (URI). Ako je bilo koji deo URL-a enkodovan, treba biti enkodovan i unutar CanonicalizedResource.
Note
Ovo se koristi podrazumevano od strane az cli za autentifikaciju zahteva. Da bi se koristili kredencijali Entra ID principala, navesti parametar --auth-mode login.
Moguće je generisati shared key for blob, queue and file services potpisujući sledeće informacije:
Shared Access Signatures (SAS) su sigurni, vremenski ograničeni URL-ovi koji dodjeljuju specifične dozvole za pristup resursima u Azure Storage nalogu bez izlaganja access keys naloga. Dok access keys omogućavaju punu administratorsku kontrolu nad svim resursima, SAS omogućava granularnu kontrolu definisanjem dozvola (npr. read ili write) i vremena isteka.
User delegation SAS: Kreira se od strane Entra ID principal koji potpisuje SAS i delegira dozvole sa user-a na SAS. Može se koristiti samo sa blob and data lake storage (docs). Moguće je revoke-ovati sve generisane user delegated SAS.
Moguće je generisati delegation SAS sa “više” dozvola nego što user poseduje. Međutim, ako principal nema te dozvole, SAS neće funkcionisati (no privesc).
Service SAS: Potpisuje se koristeći jedan od storage account access keys. Može se koristiti da dodeli pristup specifičnim resursima u jednoj storage službi. Ako se key obnovi, SAS prestaje da radi.
Account SAS: Takođe se potpisuje jednim od storage account access keys. Dodeljuje pristup resursima preko servisa u okviru storage account-a (Blob, Queue, Table, File) i može uključivati operacije na nivou servisa.
A SAS URL potpisan pomoću access key izgleda ovako:
Prilikom generisanja SAS-a potrebno je navesti dozvole koje treba dodeliti. U zavisnosti od objekta nad kojim se SAS generiše, mogu biti uključene različite dozvole. Na primer:
Azure Blob Storage sada podržava SSH File Transfer Protocol (SFTP), omogućavajući siguran transfer fajlova i upravljanje direktno u Blob Storage bez potrebe za custom rešenjima ili third-party proizvodima.
Protocol Support: SFTP radi sa Blob Storage nalozima konfigurisanim sa hierarchical namespace (HNS). Ovo organizuje blobs u direktorijume i poddirektorijume radi lakše navigacije.
Security: SFTP koristi lokalne korisničke identitete za autentifikaciju i ne integriše se sa RBAC ili ABAC. Svaki lokalni korisnik može da se autentifikuje putem:
Azure-generated passwords
Public-private SSH key pairs
Granular Permissions: Dozvole kao što su Read, Write, Delete i List mogu se dodeliti lokalnim korisnicima za do 100 containers.
Networking Considerations: SFTP konekcije se prave preko porta 22. Azure podržava mrežne konfiguracije poput firewalla, private endpoints ili virtual networks za zaštitu SFTP saobraćaja.
Hierarchical Namespace: HNS mora biti omogućen prilikom kreiranja storage account-a.
Supported Encryption: Zahteva Microsoft Security Development Lifecycle (SDL)-odobrene kriptografske algoritme (npr. rsa-sha2-256, ecdsa-sha2-nistp256).
SFTP Configuration:
Enable SFTP on the storage account.
Create local user identities with appropriate permissions.
Configure home directories for users to define their starting location within the 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’