Gli Azure Storage Accounts sono servizi fondamentali in Microsoft Azure che forniscono storage cloud scalabile, sicuro e altamente disponibile per vari tipi di dati, inclusi blob (oggetti binari di grandi dimensioni), file, code e tabelle. Servono come contenitori che raggruppano questi diversi servizi di storage sotto un unico namespace per una gestione facile.
Opzioni di configurazione principali:
Ogni storage account deve avere un nome unico in tutti gli Azure.
Ogni storage account è distribuito in una regione o in una zona estesa di Azure.
È possibile selezionare la versione premium dello storage account per migliori prestazioni.
È possibile scegliere tra 4 tipi di ridondanza per proteggere contro guasti di rack, disco e datacenter.
Opzioni di configurazione della sicurezza:
Richiedere trasferimento sicuro per le operazioni API REST: Richiedere TLS in qualsiasi comunicazione con lo storage.
Consente di abilitare l’accesso anonimo su contenitori individuali: In caso contrario, non sarà possibile abilitare l’accesso anonimo in futuro.
Abilitare l’accesso con chiave dello storage account: In caso contrario, l’accesso con chiavi condivise sarà vietato.
Versione minima TLS.
Ambito consentito per le operazioni di copia: Consenti da qualsiasi storage account, da qualsiasi storage account dello stesso tenant Entra o da storage account con endpoint privati nella stessa rete virtuale.
Opzioni di Blob Storage:
Consenti replicazione cross-tenant.
Livello di accesso: Hot (dati accessibili frequentemente), Cool e Cold (dati raramente accessibili).
Opzioni di rete:
Accesso di rete:
Consenti da tutte le reti.
Consenti da reti virtuali e indirizzi IP selezionati.
Disabilita l’accesso pubblico e utilizza l’accesso privato.
Endpoint privati: Consente una connessione privata allo storage account da una rete virtuale.
Opzioni di protezione dei dati:
Ripristino point-in-time per contenitori: Consente di ripristinare i contenitori a uno stato precedente.
Richiede versioning, change feed e blob soft delete per essere abilitati.
Abilitare soft delete per i blob: Abilita un periodo di retention in giorni per i blob eliminati (anche sovrascritti).
Abilitare soft delete per i contenitori: Abilita un periodo di retention in giorni per i contenitori eliminati.
Abilitare soft delete per le condivisioni di file: Abilita un periodo di retention in giorni per le condivisioni di file eliminate.
Abilitare versioning per i blob: Mantieni le versioni precedenti dei tuoi blob.
Abilitare blob change feed: Tieni traccia dei log di creazione, modifica ed eliminazione dei blob.
Abilitare il supporto per l’immutabilità a livello di versione: Consente di impostare una politica di retention basata sul tempo a livello di account che si applicherà a tutte le versioni dei blob.
Il supporto per l’immutabilità a livello di versione e il ripristino point-in-time per i contenitori non possono essere abilitati simultaneamente.
Opzioni di configurazione della crittografia:
Tipo di crittografia: È possibile utilizzare chiavi gestite da Microsoft (MMK) o chiavi gestite dal cliente (CMK).
Abilitare la crittografia dell’infrastruttura: Consente di crittografare i dati “per maggiore sicurezza”.
È possibile generare Chiavi Condivise firmate con le chiavi di accesso per autorizzare l’accesso a determinate risorse tramite un URL firmato.
Note
Nota che la parte CanonicalizedResource rappresenta la risorsa dei servizi di storage (URI). E se qualche parte nell’URL è codificata, dovrebbe essere codificata anche all’interno del CanonicalizedResource.
Note
Questo è utilizzato per impostazione predefinita da az cli per autenticare le richieste. Per farlo utilizzare le credenziali del principale Entra ID, indica il parametro --auth-mode login.
È possibile generare una chiave condivisa per i servizi blob, queue e file firmando le seguenti informazioni:
Le Shared Access Signatures (SAS) sono URL sicuri e limitati nel tempo che concedono permessi specifici per accedere a risorse in un account di Azure Storage senza esporre le chiavi di accesso dell’account. Mentre le chiavi di accesso forniscono accesso amministrativo completo a tutte le risorse, la SAS consente un controllo granulare specificando i permessi (come lettura o scrittura) e definendo un tempo di scadenza.
User delegation SAS: Questa viene creata da un Entra ID principal che firmerà la SAS e delega i permessi dall’utente alla SAS. Può essere utilizzata solo con blob e data lake storage (docs). È possibile revocare tutte le SAS delegate generate dall’utente.
Anche se è possibile generare una SAS di delega con “più” permessi di quelli che l’utente ha. Tuttavia, se il principal non li ha, non funzionerà (no privesc).
Service SAS: Questa è firmata utilizzando una delle chiavi di accesso dell’account di storage. Può essere utilizzata per concedere accesso a risorse specifiche in un singolo servizio di storage. Se la chiave viene rinnovata, la SAS smetterà di funzionare.
Account SAS: È anch’essa firmata con una delle chiavi di accesso dell’account di storage. Concede accesso a risorse attraverso i servizi di un account di storage (Blob, Queue, Table, File) e può includere operazioni a livello di servizio.
Un URL SAS firmato da una chiave di accesso appare così:
Quando si genera una SAS è necessario indicare i permessi che dovrebbe concedere. A seconda dell’oggetto su cui viene generata la SAS, potrebbero essere inclusi permessi diversi. Ad esempio:
Azure Blob Storage ora supporta il protocollo SSH File Transfer Protocol (SFTP), consentendo il trasferimento e la gestione sicura dei file direttamente su Blob Storage senza richiedere soluzioni personalizzate o prodotti di terze parti.
Supporto del protocollo: SFTP funziona con gli account di Blob Storage configurati con namespace gerarchico (HNS). Questo organizza i blob in directory e sottodirectory per una navigazione più semplice.
Sicurezza: SFTP utilizza identità utente locali per l’autenticazione e non si integra con RBAC o ABAC. Ogni utente locale può autenticarsi tramite:
Password generate da Azure
Coppie di chiavi SSH pubbliche-private
Permessi granulari: Permessi come Lettura, Scrittura, Cancellazione e Elenco possono essere assegnati agli utenti locali per un massimo di 100 contenitori.
Considerazioni di rete: Le connessioni SFTP vengono effettuate tramite la porta 22. Azure supporta configurazioni di rete come firewall, endpoint privati o reti virtuali per proteggere il traffico SFTP.
Namespace gerarchico: L’HNS deve essere abilitato durante la creazione dell’account di storage.
Crittografia supportata: Richiede algoritmi crittografici approvati dal Microsoft Security Development Lifecycle (SDL) (ad es., rsa-sha2-256, ecdsa-sha2-nistp256).
Configurazione SFTP:
Abilitare SFTP sull’account di storage.
Creare identità utente locali con permessi appropriati.
Configurare le directory home per gli utenti per definire la loro posizione di partenza all’interno del contenitore.
# Get storage accounts
az storage account list #Get the account name from here
# BLOB STORAGE
## List containers
az storage container list --account-name <name>
## Check if public access is allowed
az storage container show-permission \
--account-name <acc-name> \
-n <container-name>
## Make a container public
az storage container set-permission \
--public-access container \
--account-name <acc-name> \
-n <container-name>
## List blobs in a container
az storage blob list \
--container-name <container name> \
--account-name <account name>
## Download blob
az storage blob download \
--account-name <account name> \
--container-name <container name> \
--name <blob name> \
--file </path/to/local/file>
## Create container policy
az storage container policy create \
--account-name mystorageaccount \
--container-name mycontainer \
--name fullaccesspolicy \
--permissions racwdl \
--start 2023-11-22T00:00Z \
--expiry 2024-11-22T00:00Z
# QUEUE
az storage queue list --account-name <name>
az storage message peek --account-name <name> --queue-name <queue-name>
# ACCESS KEYS
az storage account keys list --account-name <name>
## Check key policies (expiration time?)
az storage account show -n <name> --query "{KeyPolicy:keyPolicy}"
## Once having the key, it's possible to use it with the argument --account-key
## Enum blobs with account key
az storage blob list \
--container-name <container name> \
--account-name <account name> \
--account-key "ZrF40pkVKvWPUr[...]v7LZw=="
## Download a file using an account key
az storage blob download \
--account-name <account name> \
--account-key "ZrF40pkVKvWPUr[...]v7LZw==" \
--container-name <container name> \
--name <blob name> \
--file </path/to/local/file>
## Upload a file using an account key
az storage blob upload \
--account-name <account name> \
--account-key "ZrF40pkVKvWPUr[...]v7LZw==" \
--container-name <container name> \
--file </path/to/local/file>
# SAS
## List access policies
az storage <container|queue|share|table> policy list \
--account-name <acc name> \
--container-name <container name>
## Generate SAS with all permissions using an access key
az storage <container|queue|share|table|blob> generate-sas \
--permissions acdefilmrtwxy \
--expiry 2024-12-31T23:59:00Z \
--account-name <acc-name> \
-n <container-name>
## Generate SAS with all permissions using via user delegation
az storage <container|queue|share|table|blob> generate-sas \
--permissions acdefilmrtwxy \
--expiry 2024-12-31T23:59:00Z \
--account-name <acc-name> \
--as-user --auth-mode login \
-n <container-name>
## Generate account SAS
az storage account generate-sas \
--expiry 2024-12-31T23:59:00Z \
--account-name <acc-name> \
--services qt \
--resource-types sco \
--permissions acdfilrtuwxy
## Use the returned SAS key with the param --sas-token
## e.g.
az storage blob show \
--account-name <account name> \
--container-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'
#Local-Users
## List users
az storage account local-user list \
--account-name <storage-account-name> \
--resource-group <resource-group-name>
## Get user
az storage account local-user show \
--account-name <storage-account-name> \
--resource-group <resource-group-name> \
--name <local-user-name>
## List keys
az storage account local-user list \
--account-name <storage-account-name> \
--resource-group <resource-group-name>