Introduzione ad Amazon S3
Amazon Simple Storage Service (Amazon S3) è un servizio di archiviazione di oggetti che offre scalabilità, disponibilità dei dati, sicurezza e prestazioni all’avanguardia nel settore. Milioni di clienti lo utilizzano per qualsiasi caso d’uso, dai data lake alle applicazioni cloud. Grazie a svariate classi di archiviazione e un controllo capillare sulla gestione è possibile ottimizzare i costi, organizzare i dati e configurare controlli di accesso volti a soddisfare ogni tipo di requisito.
Bucket, oggetti, chiavi, versioning…
Per capire come funziona effettivamente Amazon S3, dobbiamo introdurre le principali entità con cui abbiamo a fare nel corso del processo di archiviazione.
Un bucket è un container per gli elementi archiviati. Quando accediamo alla sezione S3 del nostro account, sono le prime entità che l’interfaccia ci mostra. Non esiste un limite al numero di elementi che è possibile archiviare in un singolo bucket mentre il limite di bucket a disposizione per un singolo account AWS è di 10.000. Già questo rende l’idea di quanto materiale è possibile archiviare in maniera organizzata su S3, ma è utile sapere che è possibile aumentare questo limite tramite apposite richieste.
Quando creiamo un bucket, inseriamo un nome e la regione AWS dove esso verrà salvato. E’ importante che non ci siano bucket con quello stesso nome all’interno della regione scelta – in caso contrario sarà l’interfaccia di AWS a chiederci di cambiare il nome. Vedremo più avanti come configurare un bucket e quali impostazioni abbiamo a nostra disposizione.
Gli oggetti sono gli elementi veri e propri archiviati in Amazon S3 e sono composti da dati e metadata. I metadati sono un set di coppie nome-valore che descrivono l’oggetto, ad esempio la data dell’ultima modifica e l’estensione. È anche possibile specificare metadata personalizzati in fase di archiviazione.
Un oggetto viene identificato in modo univoco in un bucket tramite un nome e, eventualmente un ID versione. Infatti Amazon S3 ci dà la possibilità di archiviare diverse versioni dello stesso oggetto se abbiamo abilitato il meccanismo di Controllo delle versioni (in inglese versioning) in fase di creazione del bucket. Si tratta di un sistema utile per archiviare oggetti sottoposti a modifiche frequenti di cui vogliamo tenere traccia.
Gestione delle classi di archiviazione
A ogni oggetto di Amazon S3 è associata una classe di storage. Per impostazione predefinita, gli oggetti sono archiviati nella classe di storage S3 Standard; tuttavia Amazon S3 offre una gamma di altre classi a seconda del caso d’uso, della frequenza di accesso e dei tempi di recupero. La scelta di una classe è fondamentale per ottimizzare i costi di archiviazione e le prestazioni nelle applicazioni. Possiamo distinguere 4 macroclassi:
- Classi di storage per oggetti con accesso frequente, ideale per quei dati che vengono richiesti molto spesso nelle nostre applicazioni. Hanno un tempo di recupero nell’ordine dei millisecondi. Vi troviamo la classe S3 Standard e la S3 Express One Zone, la più veloce in assoluto tra tutte quelle a disposizione su AWS.
- Classi di storage per oggetti con accesso infrequente, ideale per dati a cui non accediamo spesso nelle nostre applicazioni. Anche essi hanno un tempo di recupero nell’ordine dei millisecondi. Vi troviamo la classe S3 Standard-IA e la S3 One Zone-IA, dove IA sta per Infrequent Access. Queste classi hanno dei costi di archiviazione più bassi rispetto alle loro controparti, mentre presentano dei costi di recupero decisamente più alti, motivo per cui assegnare questa classe a un oggetto cui si accede spesso diventa un errore molto dispendioso.
- Classi di storage Glacier, ideale per dati a cui non accediamo quasi mai nelle nostre applicazioni. Vi troviamo la S3 Glacier Instant, la S3 Glacier Flexible e la S3 Glacier Deep Archive. Sono le classi che garantiscono i costi di archiviazione più bassi in assoluto; di contro sia la Glacier Flexible sia la Glacier Deep Archive hanno tempi di recupero troppo lunghi per essere utilizzati da un’applicazione in tempo reale, mentre la Glacier Instant rende i dati disponibili entro millisecondi ma il costo di recupero è altissimo.
- Classe di storage S3 Intelligent-Tiering, ideale per dati di cui non conosciamo a priori la frequenza di accesso. Questa classe monitora la frequenza di accesso al singolo oggetto e lo sposta automaticamente al livello più conveniente economicamente.
Gestione del ciclo di vita degli oggetti
Il ciclo di vita (S3 Lifecycle) è una funzionalità che consente di archiviare gli oggetti in modo conveniente trasferendoli in classi di storage a costi inferiori o eliminando gli oggetti scaduti per conto dell’utente. Nel concreto, consiste nella possibilità per l’utente di creare un insieme di regole che definiscono le operazioni che Amazon S3 applica agli oggetti.
Esistono due macroazioni:
- Azioni di transizione, definiscono quando gli oggetti passano a una classe di storage differente. Ad esempio, si può scegliere di trasferire gli oggetti alla classe di archiviazione S3 Standard-IA 30 giorni dopo la creazione o di archiviarli nella classe di archiviazione S3 Glacier Flexible un anno dopo la creazione.
- Azioni di scadenza, consentono di specificare la scadenza degli oggetti che una volta scaduti vengono automaticamente eliminati da Amazon. Ad esempio, si può scegliere di far scadere gli oggetti dopo che sono stati archiviati per un periodo di conformità normativa.
Crittografia
Amazon S3 offre diversi livelli di protezione per i dati archiviati e ovviamente la crittografia ne fa parte. I dati da caricare su S3 possono essere crittografati sia lato server sia lato client.
Nel primo caso, è Amazon S3 stesso a occuparsi della cifratura dei dati una volta ricevuti. Esistono più modalità di crittografia lato server, ognuna associata a una sigla:
–SSE-S3, in cui Amazon gestisce completamente le chiavi di cifratura e l’utente non deve preoccuparsi di nulla.
–SSE-KMS, che sfrutta il servizio AWS Key Management Service per una gestione più fine delle chiavi e dei permessi; in questo caso, l’utente può scegliere se affidarsi alla rotazione automatica delle chiavi o gestirla manualmente in base alle proprie policy di sicurezza.
–SSE-C, dove è il cliente a fornire direttamente la propria chiave di cifratura in fase di caricamento dell’oggetto.
In alternativa, la crittografia lato client permette agli utenti di cifrare i dati prima di inviarli al cloud, mantenendo così il pieno controllo sulla gestione delle chiavi. La scelta tra le diverse modalità dipende dalle esigenze specifiche di sicurezza.
Vediamo ora una serie di tutorial per operare effettivamente con le entità e i concetti presentati finora.
Tutorial 1: creare un bucket S3
Accediamo alla console di AWS direttamente nella sezione dedicata a S3 tramite il seguente link: https://console.aws.amazon.com/s3/ , dopodiché clicchiamo sul tasto arancione Create bucket.
In questa nuova schermata possiamo inserire il nome del nostro bucket e scegliere la regione AWS all’interno della quale sarà salvato cliccando sul menù a tendina in alto a destra, accanto al nome utente del nostro account.
Manteniamo l’impostazione consigliata nella sezione Object Ownership e facciamo lo stesso anche nella successiva sezione Block Public Access settings for this bucket, che disabilita l’accesso pubblico al bucket.
La sezione successiva riguarda il versioning, cioè la possibilità di gestire più versioni dello stesso file in modo da tenerne costantemente traccia: per ora manteniamo l’impostazione di default Disable, vedremo poi come abilitarla in un secondo momento.
L’ultima sezione si chiama Default Encryption e riguarda le diverse possibilità che AWS mette a disposizione per crittografare i nostri dati in maniera sicura. Toccheremo questo argomento più avanti nel corso di questo articolo: per il momento limitiamoci a lasciare l’impostazione di default Server-side encryption with Amazon S3 managed keys (SSE-S3).
Per concludere la procedura, clicchiamo nuovamente sul pulsante arancione Create bucket.
Tutorial 2: caricare un oggetto nel nostro bucket S3
Accediamo nuovamente al link https://console.aws.amazon.com/s3/: se la procedura è andata a buon fine, dovremmo essere in grado di vedere il bucket appena creato. Clicchiamo su di esso nella colonna Name.
Clicchiamo sul pulsante arancione Upload.
L’interfaccia ci permette di aggiungere file trascinandoli nell’area tratteggiata blu in alto, oppure possiamo utilizzare i tasti Add files e Add folder per aggiungere rispettivamente dei file o una cartella dal nostro filesystem locale. Una volta aggiunto correttamente l’oggetto, scorriamo verso il basso fino al menù a tendina Properties e clicchiamoci.
Nella sezione Storage class possiamo selezionare la classe di storage più appropriata secondo i criteri presentati in precedenza. Ricordiamo che questa è un’impostazione a livello di singolo oggetto, non di bucket.
Nella sezione Server-side encryption non dobbiamo specificare nessuna chiave crittografica perché in fase di creazione del bucket abbiamo affidato a AWS la crittografia di tutti gli oggetti al suo interno. Tuttavia è possibile cliccare su Specify an encryption key e usare una chiave crittografica nello specifico, andando così a sovrascrivere l’impostazione di default nel bucket.
Tutorial 3: scaricare un oggetto dal nostro bucket S3
Accediamo al link https://console.aws.amazon.com/s3/ e clicchiamo sul bucket dove si trova l’oggetto che vogliamo scaricare.
Spuntiamo la casella accanto all’oggetto da scaricare. A questo punto appariranno cliccabili tutta una serie di nuovi pulsanti in alto, tra cui Download e Actions. Il primo consente di scaricare nella cartella download del nostro filesystem, mentre il secondo permette di scaricare in una destinazione specifica tramite l’opzione Download as.
Tutorial 4: eliminazione di oggetti e bucket
Accediamo al link https://console.aws.amazon.com/s3/ e clicchiamo sul bucket dove si trova l’oggetto che vogliamo eliminare. Spuntiamo la casella accanto all’oggetto, come nel tutorial precedente appaiono dei nuovi pulsanti cliccabili, tra cui Delete. Clicchiamo su di esso.
Questa nuova schermata serve unicamente a garantire una protezione contro l’eliminazione accidentale di un oggetto. Infatti, non è possibile procedere senza prima scrivere nella apposita barra permanently delete, cioè cancella in modo permanente. Solo al corretto inserimento di questa stringa, diventerà visibile il pulsante arancione Delete objects. Clicchiamoci e l’operazione andrà a buon fine.
L’eliminazione di un intero bucket è un’operazione molto delicata, perché comporta la perdita di tutti i contenuti al suo interno.
Da https://console.aws.amazon.com/s3/ spuntiamo la casella accanto al bucket da eliminare: vedremo cliccabili i pulsanti Empty e Delete accanto a quello arancione Create Bucket. Se clicchiamo su Delete per eliminare l’intero bucket mentre ci sono dei contenuti al suo interno, l’interfaccia ci blocca: infatti è fondamentale che il bucket sia vuoto!
Torniamo dunque indietro, clicchiamo su Empty per svuotare il bucket. Come prima, questa operazione richiede la conferma dell’utente tramite l’inserimento della stringa permanently delete. A quel punto diventa visibile il pulsante arancione Empty, che procede effettivamente allo svuotamento.
Ora tornando alla lista dei bucket possiamo spuntare nuovamente la casella, cliccare su Delete, inserire il nome del bucket come forma di conferma e cliccare su Delete bucket.
Tutorial 5: abilitare il versioning
Il versioning, o controllo delle versioni, è un’impostazione a livello di bucket. Dunque andiamo al link https://console.aws.amazon.com/s3/ e clicchiamo sul bucket dove abilitarlo. Prima di procedere, è opportuno avere già un file caricato all’interno del nostro bucket.
Nella scheda Properties, cerchiamo la sezione Bucket Versioning. L’impostazione che dovremmo vedere è quella scelta in fase di creazione del bucket, quindi con il controllo delle versioni disabilitato. Andiamo su Edit e nella nuova schermata che si apre clicchiamo su Enable e poi sul pulsante arancione Save changes.
Per verificare la modifica, ritorniamo alla scheda Objects ed eseguiamo nuovamente l’upload dello stesso file già presente all’interno del bucket.
E’ importante notare come ora, di fianco alla barra di ricerca, sia visibile un interruttore con scritto Show versions.
Cliccando su di esso, dovremmo vedere le diverse versioni del file che abbiamo caricato. La prima versione, quella più vecchia, riporta la dicitura null nella colonna corrispondente a Version ID, perché era stata caricata in un momento in cui il versioning era disabilitato. La più recente invece presenta un id vero e proprio nel formato di una stringa alfanumerica e può essere usato come identificatore.
Tutorial 6: creazione del ciclo di vita (lifecycle rules)
Accediamo al link https://console.aws.amazon.com/s3/ e clicchiamo sul bucket dove vogliamo creare delle regole per gestire il ciclo di vita degli oggetti ivi contenuti.
Selezioniamo la scheda Management e clicchiamo su Create lifecycle rule.
Nella nuova schermata possiamo dare innanzitutto un nome alla nostra regola per trovarla facilmente nella tab Management vista in precedenza.
Ci sono due possibilità: possiamo fare sì che la regola venga applicata indistintamente a tutti gli oggetti nel bucket, oppure limitarne la portata attraverso uno o più filtri. I filtri possono agire sul prefisso dei nomi degli oggetti, sui tag (una sorta di etichetta, possiamo assegnarla in fase di upload dei singoli oggetti) oppure sulla loro grandezza: magari siamo disposti a tenere per un tempo maggiore oggetti leggeri mentre vogliamo cestinarne altri più pesanti.
Per semplicità selezioniamo la prima.
Qui vediamo i diversi tipi di azioni a nostra disposizione:
– transition current versions… : azioni di transizione sulla versione corrente degli oggetti. Se il bucket non ha il versioning abilitato, tutte gli oggetti sono presenti unicamente nella loro versione corrente. In caso contrario, per ogni oggetto solo l’ultima versione sarà influenzata da questo tipo di regola
– transition noncurrent versions…: azioni di transizione sulle versioni precedenti degli oggetti. Questo tipo di regola ha senso solo se il bucket ha il versioning abilitato.
–expire current versions… : azioni di scadenza sulla versione corrente degli oggetti.
–permenantly delete noncurrent versions… : cancellazione permanente delle versioni precedenti degli oggetti.
– delete expired objects delete markers… : quando un bucket è soggetto a versioning, la cancellazione di un elemento non è effettiva ma consiste nella creazione di una nuova versione: un delete marker. Se non ci sono versioni attive di quell’oggetto perché le abbiamo eliminate manualmente o tramite altre regole del ciclo di vita, quel delete marker diventa obsoleto e inutile. Può essere eliminato dunque in maniera automatica da questo tipo di azione.
In questa stessa schermata, per ogni casella spuntata possiamo gestire un set di regole:
È possibile inserire un’unica regola o numerose tramite il pulsante Add transition ed eliminare quella regola tramite il pulsante Remove. Lo standard quando si gestisce il ciclo di vita è di passare a classi più “profonde”, che comportano un costo di archiviazione più basso, man mano che aumentano i giorni dal momento della creazione dell’oggetto. Per ogni transizione possiamo scegliere la classe di storage che preferiamo dall’apposito menù a tendina.
Per le azioni di scadenza e cancellazione l’interfaccia è ancora più semplice: basta scegliere il numero di giorni dopo il quale l’azione diventerà effettiva. Infine clicchiamo sul pulsante arancione Create rule in basso a destra.
Tutorial 7: modifica del tipo di crittografia
Accediamo al link https://console.aws.amazon.com/s3/, clicchiamo sul nostro bucket e in seguito sull’oggetto che ci interessa. Nella scheda Properties, scendiamo fino alla sezione Server-Side encryption settings
La modalità di crittografia è un’impostazione a livello del singolo oggetto, nonostante di default venga ereditata quella selezionata per il bucket cui appartiene. Poichè in fase di creazione del bucket abbiamo scelto l’impostazione completamente gestita da Amazon S3, dovremmo vedere la dicitura SSE-S3. Per modificarla, clicchiamo su Edit.
Abbiamo la facoltà di sovrascrivere le impostazioni di default e possiamo scegliere la nuova modalità tra SSE-KMS o DSSE-KMS: concettualmente non ci sono differenze, la seconda utilizza solo due layer di chiavi anziché uno solo. Questo si traduce in una maggiore differenza ma anche un maggiore attenzione ai permessi e alla scadenza delle chiavi.
Per i nostri scopi, è sufficiente SSE-KMS: l’interfaccia ci dà la possibilità di creare delle nuove chiavi tramite il pulsante blu Create a KMS Key. Dopodiché sarà sufficiente inserire nella apposita barra l’ARN di quella chiave (Amazon Resource Name, ossia il suo identificativo univoco per Amazon) e terminare l’operazione cliccando sul tasto arancione Save changes.
Conclusione
In questo articolo abbiamo esplorato le funzionalità fondamentali di S3: dai concetti base di bucket e oggetti, alle diverse classi di storage, fino alle regole per automatizzare il ciclo di vita dei dati e alle opzioni di crittografia per garantire la sicurezza. Ciascuna di queste funzionalità può essere configurata in modo efficace per rispondere a esigenze reali. Sfruttare il servizio di archiviazione messo a disposizione da Amazon non è mai stato così semplice!
Vuoi integrare i servizi AWS nelle tue soluzioni?
Affidati ai nostri esperti e compila i campi qui sotto, ti ricontatteremo quanto prima.