Gestión de Amazon S3 con s3cmd

30 julio 2012 at 16:05 by Adrián Pérez

cloud computingAmazon AWS ofrece un sistema de almacenamiento de archivos llamado S3. Este sistema se puede aprovechar para gestionar archivos de forma automática desde un servidor Linux, para, por ejemplo, realizar copias de seguridad o almacenar otros datos.

Para ayudarnos a gestionar S3 desde una terminal de un servidor Linux, disponemos de herramientas como s3cmd, lista para instalar con yum:

[root@server]# yum info s3cmd
Paquetes instalados
Nombre : s3cmd
Arquitectura : noarch
Versión : 1.0.1
Lanzamiento : 1.fc15
Tamaño : 319 k
Repositorio : installed
Desde el repositorio : updates
Resumen : Tool for accessing Amazon Simple Storage Service
URL : http://s3tools.logix.cz/s3cmd
Licencia : GPLv2
Descripción :S3cmd lets you copy files from/to Amazon S3
: (Simple Storage Service) using a simple to use
: command line client.

Para añadir mayor nivel de seguridad, s3cmd se puede configurar junto a GnuPG, lo cual permitirá cifrar los ficheros antes de enviarlos a Amazon. Ésto nos permitirá almacenar los datos cifrados en Amazon S3, impidiendo así que otros puedan leerlos. Podremos instalar la herramienta GnuPG desde yum:

[root@server]# yum install gnupg2.i686

Una vez instaldo tanto s3cmd como GnuPG, procederemos a configurar s3cmd. Como queremos usar GnuPG, nos vendrá bien saber el path del ejecutable:

[root@server]# whereis gpg2
gpg2: /usr/bin/gpg2 /usr/share/man/man1/gpg2.1.gz

Conociendo la ruta de GnuPG, configuraremos sc3cmd. Para ello ejecutaremos:

[root@server]# s3cmd --configure

Ésto nos pedirá la siguiente información:

  • Access key del usuario para acceder al bucket.
  • Secret Keydel usuario para acceder al bucket.
  • Encryption password: usado para cifrar con GPG.
  • Path to GPG program: En el ejemplo, " /usr/bin/gpg2"
  • Use HTTPS protocol [No]: Además de la protección GPG (que cifra los datos almacenados en S3), podemos usar HTTPS, lo cual protegerá los datos mientras los subimos a S3. A pesar de que viene marcado "No" por defecto, creo que merece la pena marcar indicar "Yes".

Finalmente, el wizard de configuración nos permitirá testear la conexión antes de salvar la configuración.

Tras la configuración, aun deberemos revisar el fichero generado (por defecto en $HOME/.s3cfg), puesto que el fichero incluye parámetros de configuración que seguramente querremos modificar, como el "bucket-location" (por defecto US). Los valores que aceptan estos parámetros se podrán ver con un "man s3cmd".

En mi caso he tenido que adaptar lo siguiente:

  • bucket_location = EU

Hecho ésto, ya podremos usar s3cmd:

  • s3cmd ls: listar los buckets que tenemos
  • s3cmd ls s3://nombrebucket: listar los ficheros del bucket
  • s3cmd put file s3://nombrebucket/file: sube el fichero "file" al bucket. El fichero se sube sin cifrar (se cifra la transferencia por HTTPS pero no se cifra el fichero una vez guardado en s3).
  • s3cmd -e put file s3://nombrebucket/file: igual que el anterior, pero almacenando el fichero cifrado.
  • s3cmd get s3://nombrebucket/file file: descarga el fichero "file" y lo deja en local, llamándolo "file". Por los tests que he realizado, si el fichero se encontraba cifrado, al bajarlo lo descifrará automáticamente.
  • s3cmd sync folder s3://nombrebucket/: sube el directorio "folder" al bucket, incluídos subdirectorios y ficheros. Ojo, el directorio no debe acabar con la barra (/) puesto que si lo hiciera no crearía el directorio en el bucket. [Fuente] 

Por otra parte, si descargásemos directamente el fichero cifrado, podríamos descifrarlo con la utilidad GnuPG:

gpg --output salidacifrado.txt -d cifrado.txt

o, según el caso

gpg2 --output salidacifrado.txt -d cifrado.txt

Flickr! Foto por karindalziel