Amazon Web Services ha recentemente aggiunto alla sua già impressionante lista di servizi cloud una nuova soluzione di storage, chiamata Glacier.
Leggiamo nella loro presentazione:
Amazon Glacier is an extremely low-cost storage service that provides secure and durable storage for data archiving and backup. In order to keep costs low, Amazon Glacier is optimized for data that is infrequently accessed and for which retrieval times of several hours are suitable. With Amazon Glacier, customers can reliably store large or small amounts of data for as little as $0.01 per gigabyte per month, a significant savings compared to on-premises solutions.
A parte le speculazioni successive al suo lancio, circa il fatto che venissero utilizzati dischi progettati appositamente, piuttosto che i classici nastri, il servizio è veramente interessante e promettente. Un vero “Backup as a Service”, disegnato per backup a lungo termine che non devono essere acceduti frequentemente, e con un ottimo prezzo!
Il problema semmai, è che Glacier non è accessibile coi soliti protocolli come CIFS, NFS o anche WebDAV. Come molti servizi di AWS, dobbiamo usare le loro API per interagire con Glacier. Non c’è nemmeno la possibilità di fare upload o download attraverso l’interfaccia web.
Fortunatamente, molte persone su internet hanno creato numerosi tool per accedere a Glacier, e potete trovarne sia di commerciali che gratuiti, e per differenti sistemi operativi.
In questo articolo, vi mostrerò come ho configurato i miei backup locali fatti con Veeam per essere inviati su Glacier, come vengono eseguiti, e come mettere in sicurezza l’accesso a Glacier.
Creare un vault in Glacier
All’interno di Glacier, un contenitore per i backup è chiamato Vault. Potete creare quanti vault desiderate, in base alle vostre esigenze. Separare i differenti backup in vault dedicati è un’ottima pratica, sia per differenziare le politiche di retention sia per l’accesso sicuro ai differenti vault.
A parte creare e cancellare i vault, non c’è altro che potete fare dall’interfaccia web. Tutta l’interazione con Glacier avviene via API. L’unica cosa che dovete fare una volta creato un vault è copiarne l’ARN (pensatelo come un URL per accedere allo specifico vault via API); vi servirà in uno dei passi successivi.
Accedere in modo sicuro a Glacier
Anche se AWS possiede un completo sistema di autenticazione e autorizzazione di tipo role-based, molti clienti usano unicamente l’account principale. Questo secondo me è un rischio di sicurezza: dato che AWS è una piattaforma pay-as-you-go senza limiti di spesa, se il vostro account viene violato non solo si può avere accesso a tutti i vostri dati, ma può essere usato da altri per accendere innumerevoli servizi di cui però sarete voi a pagare il conto a fine mese.
Una buona pratica di sicurezza è il cosiddetto “Least Privilege”: date all’utente/servizio il privilegio minimo necessario a svolgere il task assegnato.
In AWS, il servizio da usare per configurare i permessi è IAM (Identity and Access Management). Potete addirittura federare la vostra directory locale con IA in modo da poter usare i vostri account locali per accedere ai servizi AWS.
Creiamo quindi un utente dedicato all’uso di Glacier, attraverso l’interfaccia web di IAM:
Copiatevi i codici di sicurezza o scaricateli, dovranno essere usati dopo e questo è l’unico momento in cui potete vedere la secret access key.
Una volta creato l’utente, dobbiamo assegnargli un “role” (ruolo) in modo che possa unicamente accedere a Glacier. Nel tab “permissions”, selezioniamo “Attach User Policy”. Come potete vedere ci sono numerose policy preconfigurate, ma al momento di questo articolo IAM non ne possedeva per Glacier; creeremo quindi una custom policy. Date un nome alla policy, e immettete questo testo nel policy document:
{ "Statement":[{ "Effect":"Allow", "Resource":[ "arn:aws:glacier:*:XXXXXXXXXXXX:vaults/*" ], "Action":[ "glacier:ListVaults" ] }], "Statement":[{ "Effect":"Allow", "Resource":[ "arn:aws:glacier:eu-west-1:XXXXXXXXXXXX:vaults/skunkworks-glacier-test" ], "Action":[ "glacier:UploadArchive", "glacier:InitiateMultipartUpload", "glacier:UploadMultipartPart", "glacier:UploadPart", "glacier:DeleteArchive", "glacier:ListParts", "glacier:InitiateJob", "glacier:ListJobs", "glacier:GetJobOutput", "glacier:ListMultipartUploads", "glacier:CompleteMultipartUpload", "glacier:ListVaults", "glacier:CreateVault", "glacier:DescribeVault" ] }] }
Come potete vedere, ho inserito il valore ARN recuperato precedentemente (ho solo nascosto il mio codice account con delle X), in questo modo riduciamo i permessi al singolo specifico vault. Se volete poter accedere a tutti i vault, sostituite il nome del vault con un *.
Pensate a scenari complessi come una singola azienda che gestisce numerosi uffici remoti, ognuno col proprio vault; con questa configurazione di sicurezza solo l’ufficio IT centrale potrà accedere a tutti i vault, mentre ogni ufficio remoto potrà accedere solo al proprio vault. Oppure siete un system integrator che offre servizi di backup remoto. Questi sono solo due dei possibili scenari dove questa configurazione di Glacier può risultare molto utile.
Se dovete infine creare un “Glacier Admin”, la policy da scrivere è la seguente:
{ "Statement":[{ "Effect":"Allow", "Resource":[ "arn:aws:glacier:*:XXXXXXXXXXXX:vaults/*" ], "Action":[ "glacier:*" ] }] }
La sintassi è semplice, non trovate? Se volete approfondirla, è scritta in JSON, e potete documentarvi qui.
Inviare i vostri backup su Glacier
Ora che Glacier è configurato, è tempo di fare qualche upload. Dopo diversi test, ho trovato un ottimo tool per queste attività: FastGlacier. Non dico sia il migliore, ma per le mie esigenze è perfetto, dato che gira via command line in Windows, quindi è facilissimo usarlo all’interno dei miei scripts. Il programma è gratuito per uso personale, ma anche la versione Pro è molto economica, solo 29 USD.
Una volta che FastGlacier è installato e avviato per la prima volta, vi chiede di configurare un account AWS:
Date all’account un nome facile da identificare (magari lo stesso usato per crearlo dentro IAM), e quindi inserite i codici di sicurezza che avete salvato prima. Se scegliete la corretta Amazon Zone (eu-west-1 nel mio caso) vedrete il vault:
Da qui potete già caricare e scaricare files. Dato però che vogliamo automatizzare il processo, ci serve un ulteriore passo.
FastGlacier prevede un eseguibile a riga di comando, chiamato glacier-put.exe, da usare via script. La sintassi del comando è:
glacier-put.exe account-name local-file region-code vault/folder
dove account-name è l’account salvato via interfaccia grafica. Potete ottenere i codici delle varie AWS region eseguendo il comando senza parametri. Nel mio esempio invierò un backup fatto con Veeam da 9 Gb verso il mio vault
quindi il comando sarà:
glacier-put.exe skunkworks-glacier-test BKP-fileserver2012-11-17T220148.vbk eu-west-1 skunkworks-glacier-test/
Il programma inizia subito a inviare il file verso Glacier, e potete controllare l’avanzamento direttamente da riga di comando:
Un’ultima nota: in base alla vostra connessione internet, l’upload potrebbe durare diverse ore. Se il vostro file di backup viene modificato ad ogni esecuzione del backup stesso (nel mio laboratorio uso Veeam in modalità reverse incremental, quindi il file di backup verrà sicuramente modificato) assicuratevi che l’upload termini prima che il prossimo backup parta, oppure copiatelo prima in una directory separata.
Il mio upload è iniziato alle 13:42 e ha finito alle 16.47, 3 per caricare circa 9 Gb, con una velocità media di 0.8 MB al secondo; prendetevi un attimo di tempo per fare qualche test e programmare gli upload opportunamente.