0
1
1
0
1
1
0
1
0
1
1
1
1
0
1
0
0
0

MONTAR BUCKET S3 DE AWS EN UN SERVIDOR LINUX

  LINUX
01:47 hrs   5790
MONTAR BUCKET S3 DE AWS EN UN SERVIDOR LINUX

En esta oportunidad estaremos viendo como poder montar un bucket s3 en una instancia EC2 de AWS, es importante mencionar que también funciona con un servidor creado fuera de la nube de Amazon, como puede ser Google Cloud, Azure, DigitalOcean, etc.

El montaje de un Bucket S3 en nuestro servidor puede llegar a ser de mucha utilidad, sobre todo si necesitamos realizar respaldos de nuestro sistema, esta sería una excelente oportunidad para poder guardar externamente copias de seguridad de forma segura en un bucket S3.

Crear un Bucket S3 en AWS

Si no tienes un Becket S3 creado lo primero es crear uno, para ello desde la pantalla principal de AWS nos ubicamos en Almacenamiento y luego seleccionamos en S3.

AWS nos listará todos los bucket que hayamos creado con anterioridad, en caso de no tener ninguno o querer crear uno nuevo seleccionamos en el botón Crear bucket.

Para configurarlo le asignamos un nombre al bucket (este nombre debe ser único y no debe contener espacios) y seleccionamos una región a elección.

Dejamos por defecto marcada la opción Bloquear todo el acceso público ya que para este propósito necesitamos un bucket privado y no de acceso público.

Finalmente bajamos y damos en Crear bucket para finalizar la creación de este.

Nuestro bucket ha sido creado correctamente y si lo seleccionamos podemos ver que nos da la opción se subir archivos, aunque para este caso no lo realizaremos desde aquí ya que será directamente desde nuestro servidor.

Instalar s3fs en Linux

s3fs nos permitirá realizar el montaje de un bucket S3 en nuestro sistema, la instalación de s3fs está disponible para diferentes distribuciones, por lo cual, debes ingresar los comandos correspondientes según el sistema que tengas instalado.

Instalación en Amazon Linux a través de EPEL:


sudo amazon-linux-extras install epel
sudo yum install s3fs-fuse

Instalación en Arch Linux:


sudo pacman -S s3fs-fuse

Instalación en Debian 9 y Ubuntu 16.04 o más reciente:


sudo apt install s3fs

Instalación en Fedora 27 o más reciente:


sudo dnf install s3fs-fuse

Instalación en Gentoo:


sudo emerge net-fs/s3fs

Instalación en RHEL y CentOS 7 o más reciente a través de EPEL:


sudo yum install epel-release
sudo yum install s3fs-fuse

Instalación en SUSE 12 y openSUSE 42.1 o más reciente:


brew install --cask osxfuse
brew install s3fs

Si necesitas saber como levantar tu servidor Linux en Amazon Web Services te invito a revisar el articulo Crear una instancia EC2 de Linux en AWS disponible en este el sitio.

Una vez que estemos conectados en la terminal de nuestro servidor realizamos la instalación correspondiente.

En este caso, el sistema operativo que tenemos es Amazon Linux 2, por lo cual realizaremos la instalación con los comandos correspondientes.


[root@ip-172-31-24-4 ~]# sudo amazon-linux-extras install epel
Installing epel-release
Loaded plugins: extras_suggestions, langpacks, priorities, update-motd
Cleaning repos: amzn2-core amzn2extra-docker amzn2extra-epel
12 metadata files removed
4 sqlite files removed
0 metadata files removed
Loaded plugins: extras_suggestions, langpacks, priorities, update-motd
amzn2-core                                                                                       | 3.7 kB  00:00:00
amzn2extra-docker                                                                                | 3.0 kB  00:00:00
amzn2extra-epel                                                                                  | 3.0 kB  00:00:00
(1/7): amzn2-core/2/x86_64/group_gz                                                              | 2.5 kB  00:00:00
(2/7): amzn2-core/2/x86_64/updateinfo                                                            | 350 kB  00:00:00
(3/7): amzn2extra-epel/2/x86_64/primary_db                                                       | 1.8 kB  00:00:00
(4/7): amzn2extra-docker/2/x86_64/updateinfo                                                     |   76 B  00:00:00
(5/7): amzn2extra-docker/2/x86_64/primary_db                                                     |  74 kB  00:00:00
(6/7): amzn2extra-epel/2/x86_64/updateinfo                                                       |   76 B  00:00:00
(7/7): amzn2-core/2/x86_64/primary_db                                                            |  50 MB  00:00:01
Resolving Dependencies
--> Running transaction check
---> Package epel-release.noarch 0:7-11 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

======================================================================================================================== Package                        Arch                     Version                Repository                         Size
========================================================================================================================Installing:
 epel-release                   noarch                   7-11                   amzn2extra-epel                    15 k

Transaction Summary
========================================================================================================================Install  1 Package

Total download size: 15 k
Installed size: 24 k
Is this ok [y/d/N]: y
Downloading packages:
epel-release-7-11.noarch.rpm                                                                                                                                                                                         |  15 kB  00:00:00
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Installing : epel-release-7-11.noarch                                                                                                                                                                                                 1/1
  Verifying  : epel-release-7-11.noarch                                                                                                                                                                                                 1/1
Installed:
  epel-release.noarch 0:7-11

Complete!
  0  ansible2                 available    \
        [ =2.4.2  =2.4.6  =2.8  =stable ]
  2  httpd_modules            available    [ =1.0  =stable ]
  3  memcached1.5             available    \
        [ =1.5.1  =1.5.16  =1.5.17 ]
  5  postgresql9.6            available    \
        [ =9.6.6  =9.6.8  =stable ]
  6  postgresql10             available    [ =10  =stable ]
  8  redis4.0                 available    \
        [ =4.0.5  =4.0.10  =stable ]
  9  R3.4                     available    [ =3.4.3  =stable ]
 10  rust1                    available    \
        [ =1.22.1  =1.26.0  =1.26.1  =1.27.2  =1.31.0  =1.38.0
          =stable ]
 11  vim                      available    [ =8.0  =stable ]
 15  php7.2                   available    \
        [ =7.2.0  =7.2.4  =7.2.5  =7.2.8  =7.2.11  =7.2.13  =7.2.14
          =7.2.16  =7.2.17  =7.2.19  =7.2.21  =7.2.22  =7.2.23
          =7.2.24  =7.2.26  =stable ]
 17  lamp-mariadb10.2-php7.2  available    \
        [ =10.2.10_7.2.0  =10.2.10_7.2.4  =10.2.10_7.2.5
          =10.2.10_7.2.8  =10.2.10_7.2.11  =10.2.10_7.2.13
          =10.2.10_7.2.14  =10.2.10_7.2.16  =10.2.10_7.2.17
          =10.2.10_7.2.19  =10.2.10_7.2.22  =10.2.10_7.2.23
          =10.2.10_7.2.24  =stable ]
 18  libreoffice              available    \
        [ =5.0.6.2_15  =5.3.6.1  =stable ]
 19  gimp                     available    [ =2.8.22 ]
 20  docker=latest            enabled      \
        [ =17.12.1  =18.03.1  =18.06.1  =18.09.9  =stable ]
 21  mate-desktop1.x          available    \
        [ =1.19.0  =1.20.0  =stable ]
 22  GraphicsMagick1.3        available    \
        [ =1.3.29  =1.3.32  =1.3.34  =stable ]
 23  tomcat8.5                available    \
        [ =8.5.31  =8.5.32  =8.5.38  =8.5.40  =8.5.42  =8.5.50
          =stable ]
 24  epel=latest              enabled      [ =7.11  =stable ]
 25  testing                  available    [ =1.0  =stable ]
 26  ecs                      available    [ =stable ]
 27  corretto8                available    \
        [ =1.8.0_192  =1.8.0_202  =1.8.0_212  =1.8.0_222  =1.8.0_232
          =1.8.0_242  =stable ]
 28  firecracker              available    [ =0.11  =stable ]
 29  golang1.11               available    \
        [ =1.11.3  =1.11.11  =1.11.13  =stable ]
 30  squid4                   available    [ =4  =stable ]
 31  php7.3                   available    \
        [ =7.3.2  =7.3.3  =7.3.4  =7.3.6  =7.3.8  =7.3.9  =7.3.10
          =7.3.11  =7.3.13  =stable ]
 32  lustre2.10               available    \
        [ =2.10.5  =2.10.8  =stable ]
 33  java-openjdk11           available    [ =11  =stable ]
 34  lynis                    available    [ =stable ]
 35  kernel-ng                available    [ =stable ]
 36  BCC                      available    [ =0.x  =stable ]
 37  mono                     available    [ =5.x  =stable ]
 38  nginx1                   available    [ =stable ]
 39  ruby2.6                  available    [ =2.6  =stable ]
 40  mock                     available    [ =stable ]
 41  postgresql11             available    [ =11  =stable ]
 42  php7.4                   available    [ =stable ]
 43  livepatch                available    [ =stable ]
 44  python3.8                available    [ =stable ]
 45  haproxy2                 available    [ =stable ]
 46  collectd                 available    [ =stable ]
 47  aws-nitro-enclaves-cli   available    [ =stable ]
 48  R4                       available    [ =stable ]
 49  kernel-5.4               available    [ =stable ]
 50  selinux-ng               available    [ =stable ]
 51  php8.0                   available    [ =stable ]
[root@ip-172-31-24-4 ~]#


[root@ip-172-31-24-4 ~]# sudo yum install s3fs-fuse
Loaded plugins: extras_suggestions, langpacks, priorities, update-motd
205 packages excluded due to repository priority protections
Resolving Dependencies
--> Running transaction check
---> Package s3fs-fuse.x86_64 0:1.88-1.el7 will be installed
--> Processing Dependency: fuse >= 2.8.4 for package: s3fs-fuse-1.88-1.el7.x86_64
--> Processing Dependency: fuse-libs >= 2.8.4 for package: s3fs-fuse-1.88-1.el7.x86_64
--> Processing Dependency: libfuse.so.2(FUSE_2.2)(64bit) for package: s3fs-fuse-1.88-1.el7.x86_64
--> Processing Dependency: libfuse.so.2(FUSE_2.5)(64bit) for package: s3fs-fuse-1.88-1.el7.x86_64
--> Processing Dependency: libfuse.so.2(FUSE_2.6)(64bit) for package: s3fs-fuse-1.88-1.el7.x86_64
--> Processing Dependency: libfuse.so.2(FUSE_2.8)(64bit) for package: s3fs-fuse-1.88-1.el7.x86_64
--> Processing Dependency: mailcap for package: s3fs-fuse-1.88-1.el7.x86_64
--> Processing Dependency: libfuse.so.2()(64bit) for package: s3fs-fuse-1.88-1.el7.x86_64
--> Running transaction check
---> Package fuse.x86_64 0:2.9.2-11.amzn2 will be installed
---> Package fuse-libs.x86_64 0:2.9.2-11.amzn2 will be installed
---> Package mailcap.noarch 0:2.1.41-2.amzn2 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

============================================================================================================================================================================================================================================ Package                                                 Arch                                                 Version                                                        Repository                                                Size
============================================================================================================================================================================================================================================Installing:
 s3fs-fuse                                               x86_64                                               1.88-1.el7                                                     epel                                                     291 k
Installing for dependencies:
 fuse                                                    x86_64                                               2.9.2-11.amzn2                                                 amzn2-core                                                86 k
 fuse-libs                                               x86_64                                               2.9.2-11.amzn2                                                 amzn2-core                                                94 k
 mailcap                                                 noarch                                               2.1.41-2.amzn2                                                 amzn2-core                                                31 k

Transaction Summary
============================================================================================================================================================================================================================================Install  1 Package (+3 Dependent packages)

Total download size: 501 k
Installed size: 1.3 M
Is this ok [y/d/N]: y
Downloading packages:
(1/4): fuse-libs-2.9.2-11.amzn2.x86_64.rpm                                                                                                                                                                           |  94 kB  00:00:00
(2/4): mailcap-2.1.41-2.amzn2.noarch.rpm                                                                                                                                                                             |  31 kB  00:00:00
(3/4): fuse-2.9.2-11.amzn2.x86_64.rpm                                                                                                                                                                                |  86 kB  00:00:00
warning: /var/cache/yum/x86_64/2/epel/packages/s3fs-fuse-1.88-1.el7.x86_64.rpm: Header V4 RSA/SHA256 Signature, key ID 352c64e5: NOKEY
Public key for s3fs-fuse-1.88-1.el7.x86_64.rpm is not installed
(4/4): s3fs-fuse-1.88-1.el7.x86_64.rpm                                                                                                                                                                               | 291 kB  00:00:00
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------Total                                                                                                                                                                                                       1.8 MB/s | 501 kB  00:00:00
Retrieving key from file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
Importing GPG key 0x352C64E5:
 Userid     : "Fedora EPEL (7) "
 Fingerprint: 91e9 7d7c 4a5e 96f1 7f3e 888f 6a2f aea2 352c 64e5
 Package    : epel-release-7-11.noarch (@amzn2extra-epel)
 From       : /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
Is this ok [y/N]: y
Running transaction check
Transaction test succeeded
Running transaction
  Installing : fuse-2.9.2-11.amzn2.x86_64                                                                                                                                                                                               1/4
  Installing : fuse-libs-2.9.2-11.amzn2.x86_64                                                                                                                                                                                          2/4
  Installing : mailcap-2.1.41-2.amzn2.noarch                                                                                                                                                                                            3/4
  Installing : s3fs-fuse-1.88-1.el7.x86_64                                                                                                                                                                                              4/4
  Verifying  : mailcap-2.1.41-2.amzn2.noarch                                                                                                                                                                                            1/4
  Verifying  : fuse-libs-2.9.2-11.amzn2.x86_64                                                                                                                                                                                          2/4
  Verifying  : fuse-2.9.2-11.amzn2.x86_64                                                                                                                                                                                               3/4
  Verifying  : s3fs-fuse-1.88-1.el7.x86_64                                                                                                                                                                                              4/4

Installed:
  s3fs-fuse.x86_64 0:1.88-1.el7

Dependency Installed:
  fuse.x86_64 0:2.9.2-11.amzn2                                               fuse-libs.x86_64 0:2.9.2-11.amzn2                                               mailcap.noarch 0:2.1.41-2.amzn2

Complete!
[root@ip-172-31-24-4 ~]#

Crear credenciales de acceso

Para poder tener acceso al bucket desde nuestro sistema debemos crear unas credenciales de acceso al bucket, estas credenciales las creamos desde nuestro panel de AWS, para eso vamos a Servicios y hacemos clic en IAM.

Luego de hacer clic nos dirigimos a Usuarios que se encuentra en el menú lateral izquierdo, nos mostrará todos los usuarios creados con anterioridad, necesitamos crear un nuevo usuario por lo cual daremos clic en el botón Añadir usuario(s).

Asignaremos un nombre de usuario a elección, en este caso será acceso-bucket-s3 y seleccionamos el tipo de acceso mediante programación, luego damos en Siguiente.

Aquí seleccionamos Asociar directamente las políticas existentes, en el buscador ingresamos s3 y seleccionamos la opción AmazonS3FullAccess, luego damos en Siguiente.

Las etiquetas no serán necesarias para este caso así que las omitimos sin configurar nada, tan solo seleccionamos en Siguiente.

Revisamos que todo esté correcto y continuamos seleccionando Crear usuario.

Ya hemos creado nuestro usuario correctamente, ya tenemos disponibles las credenciales, es importante no cerrar esta pantalla ya que este es el único momento en que podemos tener acceso a ellas, en caso de que necesites cerrarla puedes descargar las credenciales y utilizarlas posteriormente.

Configuración de s3fs

Primeramente debemos agregar nuestras credenciales recién creadas en un archivo oculto llamado .passwd-s3fs, debemos agregar este archivo en nuestro directorio home, ya que estamos como usuario Root, nuestro archivo debe crearse en /root que es el directorio home de nuestro usuario, para ello aplicaremos el comando echo ACCESS_KEY_ID:SECRET_ACCESS_KEY > ${HOME}/.passwd-s3fs reemplazando ACCESS_KEY_ID por la ID de clave de acceso y SECRET_ACCESS_KEY por la Clave de acceso secreta.

Luego le otorgamos permisos de lectura y escritura solo al usuario propietario con el comando chmod 600 ${HOME}/.passwd-s3fs.


[root@ip-172-31-24-4 ~]# echo AKIAQYB6F325TYMUJB6I:KEuGFNkvfbWNPQ3mi2wE+bY+yGlwG9fowfSTb+oW > ${HOME}/.passwd-s3fs
[root@ip-172-31-24-4 ~]# chmod 600 ${HOME}/.passwd-s3fs
[root@ip-172-31-24-4 ~]#

Verificamos que efectivamente se creó el archivo y se asignaron los permisos ingresando el comando ls -la /root, también podemos ver el contenido del archivo con cat /root/.passwd-s3fs y verificar que se ingresaron correctamente las credenciales.


[root@ip-172-31-24-4 ~]# ls -la /root
total 24
dr-xr-x---  3 root root 123 Feb 24 23:43 .
dr-xr-xr-x 18 root root 257 Feb 23 00:09 ..
-rw-r--r--  1 root root  18 Oct 18  2017 .bash_logout
-rw-r--r--  1 root root 176 Oct 18  2017 .bash_profile
-rw-r--r--  1 root root 176 Oct 18  2017 .bashrc
-rw-r--r--  1 root root 100 Oct 18  2017 .cshrc
-rw-------  1 root root  62 Feb 24 23:43 .passwd-s3fs
drwx------  2 root root  29 Feb 23 00:10 .ssh
-rw-r--r--  1 root root 129 Oct 18  2017 .tcshrc
[root@ip-172-31-24-4 ~]# cat /root/.passwd-s3fs
AKIAQYB6F325TYMUJB6I:KEuGFNkvfbWNPQ3mi2wE+bY+yGlwG9fowfSTb+oW
[root@ip-172-31-24-4 ~]#

Luego de verificar aplicaremos el comando df para ver las unidades de almacenamiento que tenemos en el sistema, posteriormente cuando configuremos el montaje del bucket s3 nos aparecerá en esta lista.


[root@ip-172-31-24-4 ~]# df
Filesystem     1K-blocks    Used Available Use% Mounted on
devtmpfs          492680       0    492680   0% /dev
tmpfs             503448       0    503448   0% /dev/shm
tmpfs             503448     440    503008   1% /run
tmpfs             503448       0    503448   0% /sys/fs/cgroup
/dev/xvda1       8376300 1742564   6633736  21% /
tmpfs             100692       0    100692   0% /run/user/1000
[root@ip-172-31-24-4 ~]#

Para comenzar a realizar el montaje, primeramente, crearemos un directorio en el cual montaremos el bucket S3, es este caso crearemos un directorio llamado respaldo-s3 en la raíz del sistema con el comando mkdir /respaldo-s3.


[root@ip-172-31-24-4 ~]# mkdir /respaldo-s3
[root@ip-172-31-24-4 ~]#

Ahora realizaremos el montaje del bucket ingresando el comando s3fs nombrebucket /rutadirectorio -o passwd_file=${HOME}/.passwd-s3fs donde nombrebucket es el nombre del bucket creado en AWS y /rutadirectorio es el nombre del directorio recién creado.


[root@ip-172-31-24-4 ~]# s3fs mzbuckets3 /respaldo-s3 -o passwd_file=${HOME}/.passwd-s3fs
[root@ip-172-31-24-4 ~]#

Una vez realizado podemos ingresar el comando df para ver las unidades de almacenamiento montadas en el sistema, ahora vemos que nos aparece nuestro bucket s3 que acabamos de configurar.


[root@ip-172-31-24-4 ~]# df
Filesystem        1K-blocks    Used    Available Use% Mounted on
devtmpfs             492680       0       492680   0% /dev
tmpfs                503448       0       503448   0% /dev/shm
tmpfs                503448     444       503004   1% /run
tmpfs                503448       0       503448   0% /sys/fs/cgroup
/dev/xvda1          8376300 1744588      6631712  21% /
tmpfs                100692       0       100692   0% /run/user/1000
s3fs           274877906944       0 274877906944   0% /respaldo-s3
[root@ip-172-31-24-4 ~]#

Es importante mencionar que cada vez que reiniciemos el servidor debemos montar el bucket S3 nuevamente de forma manual, para evitar esto y que el montaje se realice de forma automática al reiniciar, debemos agregar la línea mzbuckets3 /respaldo-s3 fuse.s3fs _netdev,allow_other 0 0 (recuerda reemplazar el nombre del bucket y directorio según tu caso) al archivo /etc/fstab, edita el archivo con algún editor a elección como nano o vi.


[root@ip-172-31-24-4 ~]# vi /etc/fstab
[root@ip-172-31-24-4 ~]#


#
UUID=518d317e-9b1a-43aa-8b7c-850dd3510341     /           xfs    defaults,noatime  1   1
mzbuckets3 /respaldo-s3 fuse.s3fs _netdev,allow_other 0 0
~
~
~
~

Luego de realizar lo anterior podemos reiniciar el sistema para verificar que efectivamente el montaje se realiza automáticamente.

Ahora, ingresaremos a nuestro bucket S3 montado, crearemos un archivo y una carpeta para verificar que se creen correctamente.


[root@ip-172-31-24-4 ~]# cd /respaldo-s3
[root@ip-172-31-24-4 respaldo-s3]# touch archivo-test.txt
[root@ip-172-31-24-4 respaldo-s3]# mkdir carpeta-test
[root@ip-172-31-24-4 respaldo-s3]# ls
archivo-test.txt  carpeta-test
[root@ip-172-31-24-4 respaldo-s3]#

Por último, nos vamos al bucket S3 en AWS y lo actualizamos para verificar que nos lista el mismo archivo y carpeta creada recientemente desde nuestra terminal.

COMENTARIOS

Mis Perfiles en:

 Maximiliano Zamorano
Ingeniero en Conectividad y Redes
 [email protected]