Mit Amazon Glacier erhält man einen äußerst günstigen Speicherdienst zum langfristigen Sichern seiner Daten. Im Gegensatz zu Amazons Simple Storage Service S3 ist Glacier für Daten optimiert, die selten abgerufen werden. Die Abrufzeit kann bei Amazon Glacier mehrere Stunden betragen, ist dafür aber äußerst kostengünstig.

Dieser Beitrag zeigt, wie man ein clientseitig verschlüsseltes Backup unter Ubuntu-Linux erstellt und mittels Amazon Glacier CLI in Amazon Glacier speichert.

Installation von Amazon Glacier CLI

Auf GitHub gibt es ein praktisches Python-Script zur Up- und Download Verwaltung: Amazon Glacier CLI

$ git clone https://github.com/uskudnik/amazon-glacier-cmd-interface.git
$ cd amazon-glacier-cmd-interface
$ sudo python setup.py install

Das war es schon:

$ glacier-cmd -h
usage: glacier-cmd [-h] [-c FILE] [--logtostdout] --aws-access-key
                   AWS_ACCESS_KEY --aws-secret-key AWS_SECRET_KEY --region
                   REGION [--bookkeeping] [--no-bookkeeping]
                   [--bookkeeping-domain-name BOOKKEEPING_DOMAIN_NAME]
                   [--logfile LOGFILE]
                   [--loglevel {-1,DEBUG,0,INFO,1,WARNING,2,ERROR,3,CRITICAL}]
                   [--output {print,csv,json}]
                   [--sdb-access-key SDB_ACCESS_KEY]
                   [--sdb-secret-key SDB_SECRET_KEY] [--sdb-region SDB_REGION]
                   {mkvault,lsvault,describevault,rmvault,upload,listmultiparts,abortmultipart,inventory,getarchive,download,rmarchive,search,listjobs,describejob,treehash,sns}
                   ...

Konfiguration

Glacier Zugriffsberechtigung einrichten

Um Zugriff auf Amazon Glacier zu erhalten, benötigt man einen AWS_ACCESS_KEY und den dazugehörigen AWS_SECRET_KEY. Diese kann man sich über die IAM Management Console erzeugen:

In diesem Beispiel habe ich einen User „CLI“ angelegt, der zur Gruppe „Glacier“ gehört:


amazon glacier iam user


amazon glacier iam group

Die benötigten Keys erhält man über den Tab „Security Credentials“ des Users. Der Gruppe „Glacier“ habe ich über die „Managed Policies“ vollen Zugriff auf Amazon Glacier erteilt.

glacier-cmd konfigurieren

Damit man die Credentials nicht bei jedem glacier-cmd als Parameter hinterlegen muss, kann man diese in der Datei .glacier-cmd im eigenen Home-Verzeichnis oder global in /etc/glacier-cmd.conf speichern:

[aws]
access_key=your_access_key
secret_key=your_secret_key

[glacier]
region=eu-west-1
bookkeeping=false
bookkeeping-domain-name=your_simple_db_domain_name
logfile=~/.glacier-cmd.log
loglevel=INFO
output=print

Zum Testen kann man bspw. ein Vault anlegen, ausgeben lassen und wieder löschen:

$ glacier-cmd mkvault Test
+-----------+-------------------------------------------------+
|   Header  |                      Value                      |
+-----------+-------------------------------------------------+
| RequestId | eBJQemYicLaPOL0hEOO7iPrXVy_6eaLhZVG4IaQPXMiOTGw |
|  Location |            /949026493531/vaults/Test            |
+-----------+-------------------------------------------------+

$ glacier-cmd lsvault
+-------------+-------------------------------------------------------------------------------------+--------------------------+---------------------------------------+
|     Size    |                                         ARN                                         |         Created          |               Vault name              |
+-------------+-------------------------------------------------------------------------------------+--------------------------+---------------------------------------+
|      0      |                  arn:aws:glacier:eu-west-1:949026493531:vaults/Test                 | 2015-10-30T11:17:00.194Z |                  Test                 |
+-------------+-------------------------------------------------------------------------------------+--------------------------+---------------------------------------+

$ glacier-cmd rmvault Test
+-----------+-------------------------------------------------+
|   Header  |                      Value                      |
+-----------+-------------------------------------------------+
| RequestId | jllEx3kEvz-Qh8W3jJ-u1uLT5iZTxiicCf0aNgsfb-d5Sj8 |
+-----------+-------------------------------------------------+

Das Backup

Bash-Script

Das nachfolgende Script kann zum Anlegen von Webserver Backups verwendet werden. Der Aufruf kann beispielsweise über einen täglichen Cronjob erfolgen.

#!/bin/bash

TIMESTAMP=$(date +"%F")
BACKUP_BASE_DIR=/opt/backups
BACKUP_DIR=/opt/backups/$TIMESTAMP
MYSQL_USER=backup
MYSQL_PASSWORD=y1OyXDnX6lONrxv4hQ
MYSQL=/usr/bin/mysql
MYSQLDUMP=/usr/bin/mysqldump
DATA_BACKUP_URI=$BACKUP_BASE_DIR/www_$TIMESTAMP.tar.gz
OPENSSL_BIN=/usr/bin/openssl
OPENSSL_PASS=HE&qADPnMNq6@aiqfk
GLACIER_VAULT=backup

### MySQL
mkdir -p "$BACKUP_DIR/mysql"

databases=`$MYSQL --user=$MYSQL_USER -p$MYSQL_PASSWORD -e "SHOW DATABASES;" | grep -Ev "(Database|mysql|information_schema|performance_schema)"`

for db in $databases; do
  $MYSQLDUMP --force --opt --user=$MYSQL_USER -p$MYSQL_PASSWORD --databases $db | gzip > "$BACKUP_DIR/mysql/$db.sql.gz"
done

### data
cp -ra /var/www/vhosts $BACKUP_DIR

### create tar
tar cfz $DATA_BACKUP_URI $BACKUP_DIR

### encrypt tar-file
$OPENSSL_BIN enc -aes-256-cbc -e -k $OPENSSL_PASS -in "$DATA_BACKUP_URI" -out "$DATA_BACKUP_URI.enc"

### upload data to amazon glacier
glacier-cmd upload $GLACIER_VAULT $DATA_BACKUP_URI.enc --description "Backup"

### local cleanup
rm -rf $BACKUP_DIR
rm $DATA_BACKUP_URI
rm $DATA_BACKUP_URI.enc

Erläuterungen

Der Ablauf des Backups ist wie folgt:

  1. Erstellen eines Dump-Files pro MySQL Tabelle
  2. Speichern aller Web-Daten der Virtual Hosts
  3. Verschlüsseln der Daten mittels OpenSSL
  4. Upload zu Amazon Glacier
  5. Löschen aller lokalen Backupdaten

Wer aufmerksam war, der sieht sofort, dass kein inkrementelles Backup angelegt wird. Aufgrund der clientseitigen Verschlüsselung habe ich auf ein inkrementelles Vorgehen verzichtet. Ansonsten müsste man jede Datei einzeln verschlüsseln und die Checksummen vergleichen. Über den Dateinamen wären dann aber wieder Rückschlüsse auf den Inhalt möglich.

Die Amazon Glacier Archive werden auch nicht automatisch gelöscht. Das ist bewusst so implementiert, um die sogenannten „early delete“ Kosten zu sparen. Bei Glacier fallen zusätzliche Gebühren an, sollte eine Datei vor Ablauf von 90 Tagen entfernt werden. Da die Preise für Backup-Storage so günstig ist, lohnt es sich meistens den Löschvorgang mittels glacier-cmd rmarchive nach Ablauf der 3 Monate durchzuführen.

Bitte bewerten Sie meinen Beitrag:
grauenhafteinfach nur schlechtich habe es geschafft ohne einzuschlafengut ist gut genugsehr gut, bitte mehr davon (bewerten Sie als erster)
Loading...